1.定义网络模型
2.前向传播计算loss
3.反向传播计算梯度
4.参数更新(随机梯度下降SGD)
from-b站:平凡的久月
import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
device='cuda:0' if torch.cuda.is_available() else 'cpu'
#训练过程的模拟数据
# torch.manual_seed(1) # reproducible
x=torch.unsqueeze(torch.linespace(-1,1,100),dim=1)#一维扩展为二维 x=100*1(100个x,每个x特征为1)
y=x.pow(2)+0.2*torch.randn(x.size())#干扰
class MLPRegressor(torch.nn.Module):
def __init__(self,n_feature,n_hidden,n_output):
super(MLPRegressor,self).__init__()
self.hidden=torch.nn.Linear(n_feature,n_hidden)
self.output=torch.nn.Linear(n_hidden,n_output)
def forward(self,x):
x=F.relu(self.hidden(x))
x=self.predict(x)
return x
net=MLPRegressor(n_feature=1,n_hidden=10,n_output=1)
print(net)
optimizer=torch.optim.SGD(net.parameters(),lr=0.2)#优化
criteria=torch.nn.MSELoss()
plt.ion()
for t in range(200):
prediction=net(x)
loss=criteria(prediction,y)
optimizer.zero_grad()#梯度清零
loss.backward()#反向传播算梯度
optimizer.step()#参数更新
# #画图
# 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()