关于python:python-pytorch使用

4次阅读

共计 1743 个字符,预计需要花费 5 分钟才能阅读完成。

import matplotlib.pyplot as plt
import torch
import numpy as np
epoch_list=[]
loss_list=[]
class Model(torch.nn.Module):

def __init__(self):
    super(Model,self).__init__()
    #第一个线性模型:输出的样本特色为 8 个,输入的特色为 6
    '''
    w 和 b 的维度,天然就定了:y_pred=wx+b
    y_(n*6)=x_(n*8)*w+b
    w=8*6
    b=1* 6 最初播送机制,复制成 n *6
    '''
    self.linear1=torch.nn.Linear(8, 6)
    #第二个线性模型:输出样本特色为下层的输入特色数 6,输入特色数为 4
    self.linear2=torch.nn.Linear(6, 4)
     #第三个线性模型:输出样本特色为下层的输入特色数 6,输入特色数为 4
    self.linear3=torch.nn.Linear(4, 1)
    #torch.nn.Sigmoid 是个 Module,[PayPal 下载](https://www.gendan5.com/wallet/PayPal.html) 也是继承 torch.nn.Module,然而因为没有参数,故只定义一个即可,作为一个层,辨别层标记为非线性激活函数,卷积层也是线性的
    self.sigmoid=torch.nn.Sigmoid()
    self.activate=torch.nn.ReLU()
def forward(self,x_data):
    '''
    只用一个 x_data 变量,尽管是有很多层,然而为了避免写错和节俭内存
    激活函数作为一个层,辨别层标记为非线性激活函数,卷积层也是线性的
    ''''''
    #x_data_2 第一层输入,也是第二层输出
    x_data=self.sigmoid(self.linear1(x_data))
    #x_data_3 第二层输入,也是第三层输出
    x_data=self.sigmoid(self.linear2(x_data))
    #y_pred
    x_data=self.sigmoid(self.linear3(x_data))
    '''
    #x_data_2 第一层输入,也是第二层输出
    x_data=self.activate(self.linear1(x_data))
    #x_data_3 第二层输入,也是第三层输出
    x_data=self.activate(self.linear2(x_data))
    #y_pred
    x_data=self.sigmoid(self.linear3(x_data))
    return x_data

model=Model()

因为个别的显卡只反对 32 位浮点数,所以不必 double64 位

data = np.loadtxt(‘D:\BaiduNetdiskDownload\PyTorch 深度学习实际 \diabetes.csv.gz’,delimiter=’,’,dtype=np.float32)
x_data=torch.from_numpy(data[:,:-1])
y_data=torch.from_numpy(data[:,[-1]])
criterion=torch.nn.BCELoss(size_average=True)
optimizer=torch.optim.SGD(model.parameters(),lr=0.1)
for epoch in range(1000):

# 前馈
#y_pred 是张量
y_pred = model(x_data)
#loss 是数据为一个标量的张量
loss = criterion(y_pred, y_data)
epoch_list.append(epoch)
loss_list.append(loss.item())
 #把所有参数的梯度都归零
optimizer.zero_grad()
 #进行反向流传,计算 loss 对参数的梯度
loss.backward()
 #更新参数
optimizer.step()

print(loss_list[-1])
plt.plot(epoch_list, loss_list)
plt.ylabel(“losss”)
plt.xlabel(“epoch”)
plt.show()

正文完
 0