本文共 1621 字,大约阅读时间需要 5 分钟。
搭建一个简单的与运算(AND)神经网络,使用PyTorch框架进行训练,熟悉神经网络的搭建流程。
在Python环境中安装并导入PyTorch和NumPy库。NumPy用于数据生成,PyTorch用于神经网络搭建和训练。
import torchimport numpy as npfrom torch import nn
使用NumPy生成四个训练样本,分别是(0,0)、(0,1)、(1,0)、(1,1)。对应的理想输出为0、0、0、1。将这些数据转换为PyTorch的Tensor变量进行训练。
# 生成输入数据矩阵x = np.mat('0 0; 0 1; 1 0; 1 1')x = torch.tensor(x).float() # 将输入转换为浮点型Tensor# 生成理想输出y = np.mat('0; 0; 0; 1')y = torch.tensor(y).float() # 将输出转换为浮点型Tensor 使用PyTorch的nn.Sequential构建一个简单的网络,包含输入层、激活函数层和输出层。
# 定义网络结构class MyNet(nn.Module): def __init__(self): super(MyNet, self).__init__() # 输入层:2个输入节点,8个隐藏节点 self.fc1 = nn.Linear(2, 8) # 激活函数层:ReLU self.relu = nn.ReLU() # 隐藏层2:8个输入节点,1个输出节点 self.fc2 = nn.Linear(8, 1) # 输出层:Sigmoid激活函数 self.sigmoid = nn.Sigmoid() def forward(self, x): # 前向传播 x = self.fc1(x) x = self.relu(x) x = self.fc2(x) x = self.sigmoid(x) return x# 初始化网络myNet = MyNet()
使用随机梯度下降(SGD)优化器,设置学习率为0.05。
# 定义优化器optimizer = torch.optim.SGD(myNet.parameters(), lr=0.05)
使用均方误差(MSE)作为损失函数,用于衡量实际输出与理想输出的差异。
# 定义损失函数loss_func = nn.MSELoss()
运行3000次训练循环,逐步优化网络参数。
# 训练循环for epoch in range(3000): # 前向传播 outputs = myNet(x) # 计算损失 loss = loss_func(outputs, y) # 清除梯度 optimizer.zero_grad() # 反向传播 loss.backward() # 优化参数 optimizer.step()
输出训练后的输入数据和实际输出结果。
# 显示训练结果print("输入数据:")print(x)print("\n输出结果:")print(myNet(x).data) 通过训练,网络能够正确识别与运算结果。输入为(0,0)时输出为0,输入为(0,1)时输出为0,输入为(1,0)时输出为0,输入为(1,1)时输出为1,表明网络训练效果良好。
转载地址:http://yznq.baihongyu.com/