首页 > 其他分享 >深度学习中基于pytorch的多层感知机简洁实现

深度学习中基于pytorch的多层感知机简洁实现

时间:2023-11-03 16:44:41浏览次数:41  
标签:nn torch 神经网络 多层 感知机 pytorch num import net

基于一个例子,总结过去一个月的学习:

import torch
from torch import nn
from torch.nn import init
import numpy as np
import sys
sys.path.append("..") 
import d2lzh_pytorch as d2l

num_inputs, num_outputs, num_hiddens = 784, 10, 256

net = nn.Sequential(
        d2l.FlattenLayer(),
        nn.Linear(num_inputs, num_hiddens),
        nn.ReLU(),
        nn.Linear(num_hiddens, num_outputs), 
        )

for params in net.parameters():
    init.normal_(params, mean=0, std=0.01)

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
loss = torch.nn.CrossEntropyLoss()

optimizer = torch.optim.SGD(net.parameters(), lr=0.5)

num_epochs = 5
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None, None, optimizer)

导入需要的库

这段代码是用于在Python中进行深度学习任务的初始化代码。让我简要解释一下这些代码的作用:

  1. import torch: 导入PyTorch库,PyTorch是一种流行的深度学习框架。

  2. from torch import nn: 从PyTorch库中导入神经网络模块(nn)。这个模块包含了用于构建和训练神经网络的类和函数。

  3. from torch.nn import init: 从PyTorch的神经网络模块中导入初始化模块(init)。初始化方法用于设置神经网络参数的初始值。

  4. import numpy as np: 导入NumPy库并将其重命名为np。NumPy通常用于进行数值计算,常常与PyTorch一起使用。

  5. import sys: 导入sys模块,它提供了访问Python解释器维护的一些变量以及与解释器交互的功能。

  6. sys.path.append(".."): 将当前脚本所在目录的父目录添加到系统路径中。这允许您从父目录中导入模块和包。

  7. import d2lzh_pytorch as d2l: 导入名为d2lzh_pytorch的模块,并将其重命名为d2l。这似乎是您正在使用的一个自定义模块,用于深度学习相关任务,它存储在父目录中并在Python路径中附加了该模块。

问题:为什么导入torch库之后还要从torch库中导入其模块?
image
不知道回答是否正确。

定义模型

这段代码定义了一个简单的神经网络模型,使用了PyTorch中的nn.Sequential容器来构建一个层的序列。让我逐行解释这段代码的作用:

  1. num_inputs, num_outputs, num_hiddens = 784, 10, 256: 这一行定义了三个变量,分别代表输入特征的数量(num_inputs),输出类别的数量(num_outputs),和中间隐藏层的大小(num_hiddens)。

  2. net = nn.Sequential(...): 这里创建了一个神经网络模型,使用nn.Sequential容器将多个神经网络层按顺序堆叠在一起。具体的层包括:

    • d2l.FlattenLayer(): 这是自定义的展平层,用于将输入数据展平成一维向量。在深度学习中,通常需要将输入数据从多维形状展平为一维,以供全连接层使用。
    • nn.Linear(num_inputs, num_hiddens): 这是一个全连接层,它接受num_inputs个输入特征和num_hiddens个神经元。它执行线性变换操作。
    • nn.ReLU(): 这是激活函数层,使用ReLU(修正线性单元)激活函数来引入非线性性。
    • nn.Linear(num_hiddens, num_outputs): 这是另一个全连接层,接受num_hiddens个输入和num_outputs个输出类别。
  3. for params in net.parameters(): init.normal_(params, mean=0, std=0.01): 这个循环迭代遍历神经网络net的所有参数(包括权重和偏差),然后使用正态分布随机初始化它们。init.normal_是PyTorch中的初始化函数,它将参数初始化为均值为0、标准差为0.01的随机值。这是常用的初始化方法之一。

这段代码定义了一个包含两个全连接层和一个ReLU激活函数的神经网络,用于处理784维的输入数据,输出一个10维的向量,通常用于图像分类任务。随机初始化参数是深度学习中的常见步骤,以使模型能够在训练中逐渐学习适合任务的参数值。

读取数据并训练模型

这段代码涉及训练一个神经网络模型,使用Fashion MNIST数据集进行训练和测试。以下是每一部分的解释:

  1. batch_size = 256: 这一行定义了批处理大小,即每次训练迭代中使用的数据样本数量。在这里,批处理大小设置为256。

  2. train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size): 这一行使用自定义的d2l模块中的load_data_fashion_mnist函数加载Fashion MNIST数据集,并将训练集和测试集分别存储在train_itertest_iter中。数据集已经分成了批次,每个批次包含256个样本。

  3. loss = torch.nn.CrossEntropyLoss(): 这一行创建了一个交叉熵损失函数,用于计算模型输出与实际标签之间的损失。在分类任务中,交叉熵损失通常用作损失函数。

  4. optimizer = torch.optim.SGD(net.parameters(), lr=0.5): 这里创建了一个随机梯度下降(SGD)优化器,用于更新神经网络的参数。net.parameters()返回神经网络net的所有可学习参数(权重和偏差),并将它们传递给SGD优化器,设置学习率(lr)为0.5。

  5. num_epochs = 5: 这一行定义了训练的总轮数,每个轮次会遍历整个训练数据集一次。

  6. 最后一行调用了d2l.train_ch3函数,该函数接受模型、训练数据迭代器、测试数据迭代器、损失函数、轮次数、批处理大小、以及其他一些可选参数。它将使用SGD优化器在训练数据上训练模型,然后在测试数据上评估模型的性能,最终输出训练过程中的损失和精度信息。

这段代码执行了一个训练过程,使用Fashion MNIST数据集对神经网络模型进行了5轮的训练,并在每轮后在测试数据集上进行性能评估。训练过程中使用了交叉熵损失函数和随机梯度下降优化器。通过这个过程,模型将逐渐学习适合Fashion MNIST分类任务的参数。

标签:nn,torch,神经网络,多层,感知机,pytorch,num,import,net
From: https://www.cnblogs.com/H-force/p/17746503.html

相关文章

  • TensorFlow、PyTorch、Keras、Scikit-learn和ChatGPT。视觉开发软件工具 Halcon、Visi
     目录TensorFlow、PyTorch、Keras、Scikit-learn和ChatGPT1.TensorFlow2.PyTorch3.Keras视觉开发软件工具Halcon、VisionPro、LabView、OpenCV,还有eVision、Mil、Sapera等。(一)、Halcon(二)OpenCV:ComputerVision(计算机视觉)(三)VisionProTensorFlow、PyTorch、Keras、Scikit-learn和......
  • 【深度学习】PyTorch的基本运算 与 构造简单神经网络模型
    基本运算importtorch#创建一个自定义的张量t=torch.tensor([1.0,2.0,3.0])#tensor([1.,2.,3.])#求平均值t.mean()#tensor(2.)#创建一个指定行列的张量x=torch.empty(3,5)#tensor([[0.,0.,0.,0.,0.],[0.,0.,0.,0.,0.],[0.,0.,0.,0.,0.]......
  • centos 7 下通过 conda 安装 cuda pytorch
    先查看自己的linux上显卡型号:#lspci|grep-invidia04:00.0VGAcompatiblecontroller:NVIDIACorporationGP102[GeForceGTX1080Ti](reva1)04:00.1Audiodevice:NVIDIACorporationGP102HDMIAudioController(reva1)查看是否有程序占用(如果存在占用,请停掉该程序......
  • PyTorch SAVING AND LOADING MODELS
    Saving&LoadingModelforInferenceSave/Load state_dict (Recommended)Save:torch.save(model.state_dict(),PATH)Load:model=TheModelClass(*args,**kwargs)model.load_state_dict(torch.load(PATH))model.eval()REFhttps://pytorch.org/tutorials/beginner/sa......
  • 一文读懂强化学习:RL全面解析与Pytorch实战
    在本篇文章中,我们全面而深入地探讨了强化学习(ReinforcementLearning)的基础概念、主流算法和实战步骤。从马尔可夫决策过程(MDP)到高级算法如PPO,文章旨在为读者提供一套全面的理论框架和实用工具。同时,我们还专门探讨了强化学习在多个领域,如游戏、金融、医疗和自动驾驶等的具体应用......
  • 【PyTorch 卷积】实战自定义的图片归类
    前言        卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一,它通过卷积层、池化层、全连接层等结构,可以有效地处理如时间序列和图片数据等。关于卷积的概念网络上也比较多,这里就不一一描述了。实战为主当然要从实际问题出发,用代码......
  • 如何在安装 pytorch 的时候,不安装 nvidia 相关的包?
    要在安装PyTorch时避免安装与NVIDIA相关的包,可以使用以下方法:使用CPU版本的PyTorch:PyTorch提供了CPU版本,该版本不需要与NVIDIA相关的包。你可以使用以下命令安装CPU版本的PyTorch:pipinstalltorch-fhttps://download.pytorch.org/whl/cpu/torch_stable.html这将仅安装与CPU兼容......
  • 《深度学习的数学》(涌井良幸、涌井贞美著) 神经网络计算pytorch示例一
    涌井良幸、涌井贞美著的《深度学习的数学》这本书,浅显易懂。书中还用Excel示例神经网络的计算,真是不错。但光有Excel示例还是有点欠缺的,如果有代码演示就更好了。百度了半天在网上没找到别人写的,只好自己撸一个(使用python+pytorch),供同样在学习神经网络的初学者参考。(注,这是书中4-......
  • pytorch collate_fn测试用例
    collate_fn函数用于处理数据加载器(DataLoader)中的一批数据。在PyTorch中使用DataLoader时,通过设置collate_fn,我们可以决定如何将多个样本数据整合到一起成为一个batch。在某些情况下,该函数需要由用户自定义以满足特定需求。importtorchfromtorch.utils.dataimportDatase......
  • 解码注意力Attention机制:从技术解析到PyTorch实战
    在本文中,我们深入探讨了注意力机制的理论基础和实际应用。从其历史发展和基础定义,到具体的数学模型,再到其在自然语言处理和计算机视觉等多个人工智能子领域的应用实例,本文为您提供了一个全面且深入的视角。通过Python和PyTorch代码示例,我们还展示了如何实现这一先进的机制。关......