导库
import torch
import torch.nn as nn
import torch.nn.functional as F
搭建网络
class Model(nn.Module):
def __init__(self, **kwargs):
super(Model, self).__init__(**kwargs)
//可以在这你定义你的链接层
pass
def reset_parameters(self):
//在这里初始化权重
pass
def forward(self, inputs):
//在这里定义前向传播
pass
推理
model = Model()
model(inputs) # 或model.forward(inputs)
优化器和损失函数定义
optimize=torch.optim.SGD(model.parameters(),lr=0.1)
loss_fn=nn.MSELoss()
训练
for epoch in range(10):
//清空梯度
optimize.zero_grad()
//前向传播
pred=model(features)
//损失值
loss=loss_fn(pred,labels)
//后向传播
loss.backward()
//优化器更新参数
optimize.step()
//打印损失
print(loss)
实例
产生数据集
%matplotlib inline
import random
import torch
def synthetic_data(w, b, num_examples): #@save
"""生成y=Xw+b+噪声"""
X = torch.normal(0, 1, (num_examples, len(w)))
y = torch.matmul(X, w) + b
y += torch.normal(0, 0.01, y.shape)
return X, y.reshape((-1, 1))
true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
训练网络
import torch
import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module):
def __init__(self, **kwargs):
super(Model, self).__init__(**kwargs)
self.dense=nn.Linear(2,1)
def forward(self, inputs):
outputs=self.dense(inputs)
return outputs
model=Model()
optimize=torch.optim.SGD(model.parameters(),lr=0.1)
loss_fn=nn.MSELoss()
for epoch in range(10):
optimize.zero_grad()
pred=model(features)
loss=loss_fn(pred,labels)
loss.backward()
optimize.step()
print(loss)