1、直接奉献代码,后期有入门更新,之前一直在学的是TensorFlow,
import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.pyplot as plt import numpy as np x_data = np.arange(-2*np.pi,2*np.pi,0.1).reshape(-1,1) y_data = np.sin(x_data).reshape(-1,1) x = torch.unsqueeze(torch.linspace(-5, 5, 100), dim=1) # 将1维的数据转换为2维数据 # y = x.pow(2) + 0.2 * torch.rand(x.size()) y = torch.cos(x) # 将tensor置入Variable中 x, y = Variable(torch.from_numpy(x_data)).float(), Variable(torch.from_numpy(y_data)).float() print(x.shape,y.shape) # plt.scatter(x.data.numpy(), y.data.numpy()) # plt.show() # 定义一个构建神经网络的类 class Net(torch.nn.Module): # 继承torch.nn.Module类 def __init__(self): super(Net, self).__init__() # 获得Net类的超类(父类)的构造方法 # 定义神经网络的每层结构形式 # 各个层的信息都是Net类对象的属性 self.hidden = torch.nn.Linear(1, 10) # 隐藏层线性输出 self.centre_1 = torch.nn.Linear(10,20) self.predict = torch.nn.Linear(20, 1) # 输出层线性输出 # 将各层的神经元搭建成完整的神经网络的前向通路 def forward(self, x): x = F.tanh(self.hidden(x)) # 对隐藏层的输出进行relu激活 x_1 = F.tanh(self.centre_1(x)) x =F.tanh(self.predict(x_1)) return x # 定义神经网络 net = Net() print(net) # 打印输出net的结构 # 定义优化器和损失函数 optimizer = torch.optim.SGD(net.parameters(), lr=0.5) # 传入网络参数和学习率 loss_function = torch.nn.MSELoss() # 最小均方误差 acc = lambda y1,y2: np.sqrt(np.sum(y1**2+y2**2)/len(y1)) # 神经网络训练过程 plt.ion() # 动态学习过程展示 plt.show() for t in range(100): prediction = net(x) # 把数据x喂给net,输出预测值 loss = loss_function(prediction, y) # 计算两者的误差,要注意两个参数的顺序 optimizer.zero_grad() # 清空上一步的更新参数值 loss.backward() # 误差反相传播,计算新的更新参数值 optimizer.step() # 将计算得到的更新值赋给net.parameters() # 可视化训练过程 if (t + 1) % 2 == 0: plt.cla() plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=2) aucc = acc(prediction.data.numpy(),y.data.numpy()) print("loss={} aucc={}".format(loss.data.numpy(),aucc)) plt.text(-4.5, 1, 'echo=%sL=%.4f acc=%s' % (t+1,loss.data.numpy(),aucc), fontdict={'size': 15, 'color': 'red'}) plt.pause(0.1) print("训练结束") plt.ioff() plt.show()
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python pytorch numpy DNN 线性回归模型 - Python技术站