博客
关于我
torch笔记六 | 搭建一个简单的与运算神经网络
阅读量:328 次
发布时间:2019-03-04

本文共 1621 字,大约阅读时间需要 5 分钟。

与运算神经网络的搭建与训练

任务目标

搭建一个简单的与运算(AND)神经网络,使用PyTorch框架进行训练,熟悉神经网络的搭建流程。

设计步骤

1. 导入必要的库

在Python环境中安装并导入PyTorch和NumPy库。NumPy用于数据生成,PyTorch用于神经网络搭建和训练。

import torchimport numpy as npfrom torch import nn

2. 构建输入集和理想输出集

使用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

3. 搭建神经网络

使用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()

4. 设置优化器

使用随机梯度下降(SGD)优化器,设置学习率为0.05。

# 定义优化器optimizer = torch.optim.SGD(myNet.parameters(), lr=0.05)

5. 设置损失函数

使用均方误差(MSE)作为损失函数,用于衡量实际输出与理想输出的差异。

# 定义损失函数loss_func = nn.MSELoss()

6. 训练网络

运行3000次训练循环,逐步优化网络参数。

# 训练循环for epoch in range(3000):    # 前向传播    outputs = myNet(x)    # 计算损失    loss = loss_func(outputs, y)    # 清除梯度    optimizer.zero_grad()    # 反向传播    loss.backward()    # 优化参数    optimizer.step()

7. 测试结果

输出训练后的输入数据和实际输出结果。

# 显示训练结果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/

你可能感兴趣的文章
Objective-C实现高斯滤波函数(附完整源码)
查看>>
Objective-C实现高精度乘法(附完整源码)
查看>>
Objective-C实现高精度减法(附完整源码)
查看>>
Objective-C实现高精度除法(附完整源码)
查看>>
Objective-C实现高精度除法(附完整源码)
查看>>
Objective-C实现鸡兔同笼问题(附完整源码)
查看>>
Objective-C实现鸡兔同笼问题(附完整源码)
查看>>
Objective-C实现鼠标点击其他程序(附完整源码)
查看>>
Objective-c正确的写法单身
查看>>
Objective-C语法之代码块(block)的使用
查看>>
ObjectMapper - 实现复杂类型对象反序列化(天坑!)
查看>>
ObjectProperty 类的使用
查看>>
Objects.equals有坑
查看>>
Object常用方法
查看>>
Object方法的finalize方法
查看>>
Object类有哪些方法,hashcode方法的作用,为什么要重写hashcode方法?
查看>>
Object类有哪些方法?各有什么作用?
查看>>
Objenesis创建类的实例
查看>>
OBObjective-c 多线程(锁机制) 解决资源抢夺问题
查看>>
OBS studio最新版配置鉴权推流
查看>>