1.创建数据
import torch
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())
#画图
plt.scatter(x.data.numpy(),y.data.numpy())
plt.show()
import torch
import torch.nn.functional as F #激励函数都在这
class Net(torch.nn.Module): #继承 torch 的module
def __init__(self, n_feature, n_hidden, n_output):
super(Net,self).__init__() #继承__init__功能
#定理每层用什么样的形式
self.hidden = torch.nn.Linear(n_feature,n_hidden) #隐藏层线性输出
self.predict=torch.nn.Linear(n_hidden,n_output) #输出层线性输出
def forward(self,x): #这同时也是module中的forward功能
#正向传播输入值,神经网络分析出输出值
x = F.relu(self.hidden(x)) #激励函数(隐藏层的线性值)
x = self.predict(x) #输出值
return x
net=Net(n_feature=1,n_hidden=10,n_output=1)
print(net) #net的结构
"""
Net(
(hidden): Linear(in_features=1, out_features=10, bias=True)
(predict): Linear(in_features=10, out_features=1, bias=True)
)
"""
import torch
#optimizer 是训练的工具
optimizer = torch.optim.SGD(net.parameters(),lr=0.2) #传入net的所有参数,学习率
loss_func = torch.nn.MSELoss() #预测值和真实值的误差计算公式(均方差)
for t in range(100):
prediction = net(x) #喂给net训练数据x,输出预测值
loss=loss_func(prediction,y) #计算两者的误差
optimizer.zero_grad() #清空上一步的残余更新参数值
loss.backward() #误差反向传播,计算参数更新值
optimizer.step() #将参数更新值施加到net的parameters上
import matplotlib.pyplot as plt
plt.ion() #画图
plt.show()
for t in range(200):
#接上一步
if t%5 == 0:
#plot and show learning process
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.data.numpy(),fontdict={'size':20,'color':'red'})
plt.pause(0.1)
import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F #激励函数都在这
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())
class Net(torch.nn.Module): #继承 torch 的module
def __init__(self, n_feature, n_hidden, n_output):
super(Net,self).__init__() #继承__init__功能
#定理每层用什么样的形式
self.hidden = torch.nn.Linear(n_feature,n_hidden) #隐藏层线性输出
self.predict=torch.nn.Linear(n_hidden,n_output) #输出层线性输出
def forward(self,x): #这同时也是module中的forward功能
#正向传播输入值,神经网络分析出输出值
x = F.relu(self.hidden(x)) #激励函数(隐藏层的线性值)
x = self.predict(x) #输出值
return x
net=Net(n_feature=1,n_hidden=10,n_output=1)
#optimizer 是训练的工具
optimizer = torch.optim.SGD(net.parameters(),lr=0.2) #传入net的所有参数,学习率
loss_func = torch.nn.MSELoss() #预测值和真实值的误差计算公式(均方差)
for t in range(500):
prediction = net(x) #喂给net训练数据x,输出预测值
loss=loss_func(prediction,y) #计算两者的误差
optimizer.zero_grad() #清空上一步的残余更新参数值
loss.backward() #误差反向传播,计算参数更新值
optimizer.step() #将参数更新值施加到net的parameters上
if t%5 == 0:
#plot and show learning process
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.data.numpy(),fontdict={'size':20,'color':'red'})
plt.pause(0.1)#画的图只存在0.1秒