pytorch神经网络学习笔记(2)

    技术2022-07-11  73

    用python搭建了个简单的神经网络

    关系拟合

    import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.pyplot as plt x = torch.unsqueeze(torch.linspace(-1,1,100),dim=1) # unsqueeze把一维数据变成二维数据 # torch当中只能处理二维数据 y = x.pow(2)+0.2*torch.rand(x.size()) #y=x^2+一些噪点的影响 x,y =Variable(x),Variable(y) #因为神经网络只能输入Variable #plt.scatter(x.data.numpy(),y.data.numpy()) #打印散点图 #plt.show() class Net(torch.nn.Module):#继承torch的一个模块 def __init__(self,n_feature,n_hidden,n_output): #n_feature输入层,n_hidden隐藏层,n_output输出层 super(Net,self).__init__() self.hidden = torch.nn.Linear(n_feature,n_hidden) self.predict = torch.nn.Linear(n_hidden,n_output) def forward(self,x):#搭建神经网络前向传递的一些过程 x = F.relu(self.hidden(x)) x = self.predict(x) return x net = Net(1,10,1) print(net) #可视化 plt.ion() plt.show() optimizer = torch.optim.SGD(net.parameters(),lr=0.5) #优化神经网络,传递参数,lr是学习效率,也是梯度下降幅度 loss_func = torch.nn.MSELoss() #均方差 #训练 for t in range(100): prediction = net(x) loss = loss_func(prediction,y) #计算误差,prediction是预测值,y是真实值 optimizer.zero_grad() #梯度全部设为0 loss.backward() #反向传递 optimizer.step() #以lr来优化梯度 if t%5==0: #画出学习过程 plt.cla() #清屏 plt.scatter(x.data.numpy(),y.data.numpy()) #画散点图 plt.plot(x.data.numpy(),prediction.data.numpy(),'r-','lw=5') #画线 plt.text(0.5,0,'Loss=%.4f' % loss.item(),fontdict={'size':20,'color':'red'}) #画误差值 plt.pause(0.5) #每隔0.5秒画一次 plt.ioff() plt.show()

    gif图动态展示搭建的效果

    参考:莫烦python教学

    Processed: 0.013, SQL: 9