1、导入torch和 torch.nn
首先,我们需要使用以下命令导入Pytorch库:
import torch
import torch.nn as nn
2、定义变量
定义所有图层和批次大小以开始执行神经网络,如下所示:
# 分别定义输入大小、隐藏层大小、输出大小和批量大小
n_in, n_h, n_out, batch_size = 10, 5, 1, 10
3、输入数据
作为神经网络包括输入数据的组合来获取相应的输出数据,例如:
# Create dummy input and target tensors (data)
x = torch.randn(batch_size, n_in)
y = torch.tensor([[1.0], [0.0], [0.0],
[1.0], [1.0], [1.0], [0.0], [0.0], [1.0], [1.0]])
4、创建模型
在内置功能的帮助下创建顺序模型。 使用以下代码行,创建顺序模型:
# Create a model
model = nn.Sequential(nn.Linear(n_in, n_h),
nn.ReLU(),
nn.Linear(n_h, n_out),
nn.Sigmoid())
5、构建loss函数
利用梯度下降优化器构建损失函数,如下图所示:
Construct the loss function
criterion = torch.nn.MSELoss()
# 构建优化器(本例中为随机梯度下降)
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)
6、梯度下降模型
使用给定的代码行实现迭代循环的梯度下降模型
# 训练循环(50个epochs)
for epoch in range(50):
# 前向传播:通过传递 x 到模型计算预测的 y
y_pred = model(x)
# 计算并打印损失
loss = criterion(y_pred, y)
print('Epoch:', epoch, 'Loss:', loss.item())
# 清零梯度,进行反向传播,并更新权重
optimizer.zero_grad() # 清零之前的梯度
loss.backward() # 反向传播:计算梯度
optimizer.step() # 更新模型参数
7、完整代码
使用梯度下降(代码中是随机梯度下降)来最小化损失,通常用于监督学习任务中的模型训练。
import torch
import torch.nn as nn
import torch.optim as optim
# 定义一个简单的模型(例如,单层神经网络)
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
# 一个简单的线性层,输入大小为 2,输出大小为 1
self.fc = nn.Linear(2, 1)
def forward(self, x):
return self.fc(x)
# 示例数据集(输入和目标)
# 示例特征(2D)
x = torch.tensor([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0], [4.0, 5.0]])
y = torch.tensor([[5.0], [7.0], [9.0], [11.0]]) # 示例目标(1D)
# 初始化模型、损失函数和优化器
model = SimpleNN()
criterion = nn.MSELoss() # 均方误差损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降优化器
# 训练循环(50个epochs)
for epoch in range(50):
# 前向传播:通过传递 x 到模型计算预测的 y
y_pred = model(x)
# 计算并打印损失
loss = criterion(y_pred, y)
print('Epoch:', epoch, 'Loss:', loss.item())
# 清零梯度,进行反向传播,并更新权重
optimizer.zero_grad() # 清零之前的梯度
loss.backward() # 反向传播:计算梯度
optimizer.step() # 更新模型参数