社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

PyTorch深度学习实战(6)——神经网络性能优化技术(e)

GIS研发 • 5 月前 • 127 次点击  
0层隐藏层
from torch.optim import SGD, Adam  # 导入 PyTorch 中的优化器:随机梯度下降(SGD)和 Adam(实际上下面只用了 Adam)def get_model():    """    构建并返回一个简单的全连接神经网络模型,同时返回对应的损失函数和优化器。    该模型适用于 MNIST 手写数字分类任务(28x28 像素的灰度图)。    """    # 创建一个顺序容器(nn.Sequential),按顺序依次执行里面的层    model = nn.Sequential(        # 线性层(全连接层):输入特征数为 28*28=784(将 28x28 的图像展平成一维向量),        # 输出特征数为 10,对应 0~9 共 10 个数字类别。        nn.Linear(28 * 28, 10)    ).to(device)  # 将模型的所有参数和计算移动到指定的设备(如 GPU 或 CPU),                  # 注意:`device` 需要在函数外部提前定义,例如 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')    # 定义损失函数:交叉熵损失(CrossEntropyLoss),常用于多分类问题。    # 它会自动对模型输出的 logits 进行 softmax 操作,然后计算与真实标签之间的交叉熵。    loss_fn = nn.CrossEntropyLoss()    # 定义优化器:Adam(一种自适应学习率的优化算法),用于更新模型的参数。    # 参数:model.parameters() 表示需要训练的所有参数,lr=1e-3 表示学习率为 0.001。    optimizer = Adam(model.parameters(), lr=1e-3)    # 返回模型、损失函数、优化器三个对象,供训练循环使用    return model, loss_fn, optimizer
一层隐藏层
两层隐藏层
def get_model():    """    构建一个多层全连接神经网络(MLP),适用于 MNIST 手写数字分类任务。    返回模型、损失函数和优化器。    """    # nn.Sequential 是一个顺序容器,会将里面的层按顺序依次执行    model = nn.Sequential(        # 第1层:全连接层(线性层)        # 输入维度:28*28 = 784(将 28x28 的图像展平成一维向量)        # 输出维度:1000(可以理解为第一个隐藏层的神经元数量)        nn.Linear(28 * 28, 1000),        # 激活函数 ReLU(线性整流单元)        # 作用:将上一层的输出中所有负数变为0,正数保持不变        # 引入非线性,让神经网络能够学习更复杂的模式        nn.ReLU(),        # 第2层:全连接层        # 输入维度:1000(来自上一层的输出)        # 输出维度:512(第二个隐藏层的神经元数量)        nn.Linear(1000, 512),        # 再次使用 ReLU 激活函数        nn.ReLU(),        # 第3层(输出层):全连接层        # 输入维度:512(来自上一层的输出)        # 输出维度:10(对应 0~9 共 10 个数字类别)        nn.Linear(512, 10)    ).to(device)  # 将整个模型移动到指定的设备(GPU 或 CPU)    # 注意:device 需要在函数外部定义,例如:    # device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')    # 损失函数:交叉熵损失(CrossEntropyLoss)    # 用于多分类问题,它会自动对模型输出的 10 个原始分数(logits)应用 softmax,    # 然后与真实标签(一个整数,代表正确类别)计算损失值    loss_fn = nn.CrossEntropyLoss()    # 优化器:Adam(一种常用且效果较好的优化算法)    # model.parameters() 返回模型中所有需要训练的参数(权重和偏置)    # lr=1e-3 表示学习率为 0.001,控制参数更新的步长    optimizer = Adam(model.parameters(), lr=1e-3)    # 返回模型、损失函数、优化器,供训练循环调用    return model, loss_fn, optimizer

从以上结果可以看出:

·当没有隐藏层时,模型无法学习数据集中的复杂模式,与一个隐藏层相比,当有两个隐藏层时,模型的过拟合会更严重。

深度神经网络意味着在输入层和输出层间存在多个隐藏层。多个隐藏层确保神经网络可以学习输入和输出之间的复杂非线性关系,而简单的神经网络则无法完成这样的需求(由于隐藏层数量有限)。

相关:
PyTorch深度学习实战(6)——神经网络性能优化技术(d)-add
PyTorch深度学习实战(6)—神经网络性能优化技术(d)

PyTorch深度学习实战(6)—神经网络性能优化技术(c)

PyTorch深度学习实战(6)—神经网络性能优化技术(b)

PyTorch深度学习实战(6)—神经网络性能优化技术(a)

PyTorch深度学习实战(5)—计算机视觉基础

PyTorch深度学习实战(4)--常用激活函数和损失函数详解

PyTorch深度学习实战(3)—使用PyTorch构建神经网络(b)

PyTorch深度学习实战(3)—使用PyTorch构建神经网络(a)

PyTorch深度学习实战(2)-PyTorch基础

示例:反向传播和梯度下降的计算过程

AI基础 | 前向传播

AI基础 | 反向传播

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/196050