code:
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) # x data (tensor) ,shape (100,1) y=x.pow(2)+0.2*torch.rand(x.size()) # noisy y data (tensor) ,shape=(100,1) # torch can only train on Variable,so convert them to Variable x,y=Variable(x),Variable(y) # plt.scatter(x.data.numpy(),y.data.numpy()) # plt.show() class Net(torch.nn.Module): def __init__(self,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() # something about plotting plt.show() optimizer =torch.optim.SGD(net.parameters(),lr=0.5) #优化参数 loss_func = torch.nn.MSELoss() # 计算误差 (MSE:均方差) for t in range(100): prediction =net(x) #开始训练 loss = loss_func(prediction,y) # 一定要预测的值在前,真实值在后 # below are optimizer.zero_grad() # clear gradients for next train loss.backward() # backpropagation, compute gradients optimizer.step() # 以学习效率 0.5来优化梯度 if t % 5==0: # 每训练5次 ,打印一次 # plot and show learning process plt.cla() plt.scatter(x.data.numpy(),y.data.numpy()) plt.plot(x.data.numpy(),prediction.data.numpy()) plt.text(0.5,0,'Loss=%.4f' % loss.data[0],fontdict={'size':20,'color':'red'}) plt.pause(0.1) plt.ioff() plt.show()