python pytorch使用

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=https://www.it610.com/article/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=https://www.it610.com/article/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 = https://www.it610.com/article/np.loadtxt('D:\BaiduNetdiskDownload\PyTorch深度学习实践\diabetes.csv.gz',delimiter=',',dtype=np.float32)
x_data=https://www.it610.com/article/torch.from_numpy(data[:,:-1])
y_data=https://www.it610.com/article/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()

【python pytorch使用】print(loss_list[-1])
plt.plot(epoch_list, loss_list)
plt.ylabel("losss")
plt.xlabel("epoch")
plt.show()

    推荐阅读