PyTorch中的模型创建(一)

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 最全最详细的PyTorch神经网络创建

最全最详细的PyTorch神经网络创建~

话不多说直接开始~


神经网络的创建步骤


  1. 定义模型类,需要继承nn.Module
  2. 定义各种层,包括卷积层、池化层、全连接层、激活函数等等
  3. 编写前向传播,规定信号是如何传输的

 

可以用 torchsummary 查看网络结构,如果没有的话,使用pip命令进行安装


Module: 神经网络的模板


import torch.nn as nn
import torch.nn.functional as F
 
class Model(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1,20, 5)
        self.conv2 = nn.Conv2d(20, 50, 5)
 
    def forward(self, x):
        x = F.relu(self.conv1(x))
        return  F.relu(self.conv2(x))


神经网络中常见的各种层


常见的层包括:卷积层,池化层,全连接层,正则化层,激活层


导入层有两种方法:

一种是将其看作一个类,在torch.nn里面

另一种是将其看作一个函数,在torch.nn.functional里面可以调用


全连接层


全连接层又称为线性层,所以函数名叫 Linear,执行的操作是𝑦=𝑥𝐴𝑇+𝑏


torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
  • in_feature代表输入数
  • out_features代表输出数,即神经元数量


m = nn.Linear(2,3)
input = torch.randn(5, 2)
ouput = m(input)
print(ouput.size())
 
输出:torch.Size([5, 3])


先搭建个只有一层的网络,用 torchsummry 查看网络结构


from torch import nn
from torchsummary import summary
class NeuralNetwork( nn . Module):
    def _init_( self) :
        super()._init___()
        self.fc = nn.Linear(10,1,bias=False)# 如果 bias=True(默认),则有11个参数
def forward(self, x):
    x = self.fc(x)
    return x
if _name_ == '_main__':
    network = NeuralNetwork()# print( network)
    summary ( network,(10,))


自定义输入到网络中,得到输出


import torch
from torch import nn
from torchsummary import summary
class NeuralNetwork ( nn.Module):
    def _init_( self):
        super()._init___()
        self.fc = nn.Linear( 10,1)
    def forward(self,x ):
        x = self.fc(x)
        return x
if _name_ == '_main_':
    network = NeuralNetwork()
 
    input = torch.randn(10)
    print("input = " ,input)
    output = network( input)
    print( "output = ", output)
    result = output. detach( ) .numpy()
    print( "result = " , result)


多个 FC 层之间可以连接起来


class NeuralNetwork( nn.Module) :
    def _init_( self):
        super()._init_()
        self.fc_1 = nn.Linear ( 1000, 100)
        self.fc_2 = nn.Linear ( 100,10)
        self.fc_3 = nn.Linear( 10,5)
    def forward( self,x):
        ×= self.fc_1(x)
        ×= self.fc_2(x)
        x= self.fc_3(x)
        return x


激活函数


常见的激活函数包括 sigmoidrelu,以及softmax


Sigmoid


sigmoid是早期的激活函数


  • 将所有值压缩到0-1之间


ReLU


ReLU激活函数常放在全连接层、以及卷积层后面



调用方法都放在 nn.ReLU()


Softmax


softmax是在分类当中经常用到的激活函数,用来放在全连接网络的最后一层,Softmax函数通常用于多类分类问题的输出层,将输出转换为概率分布的形式。



import torch
import torch.nn as nn
m=nn.Softmax( dim=1)
input = torch.randn(4,3)
output = m( input)


  • nn.softmax的dim参数表示在哪个维度上进行softmax操作。默认值为1,表示在输入张量的第二个维度(即列)上进行softmax操作。


随机失活方法Dropout


FC层过多,容易对其中某条路径产生依赖,从而使得某些参数未能训练起来


为了防止上述问题,在 FC层之间通常还会加入随机失活功能,也就是Dropout


它通过在训练过程中随机失活一部分神经元,从而增强模型的泛化能力。


m=nn.Dropout( p=0.5)
input = torch.randn(6,8)
output = m( input)


  • 将一个列表,随机将一些值变为0


全连接网络处理一维信息



搭建以上的网络结构 ,组合全连接层,dropout层,激活函数,我们就可以构建出一个完整的全连接网络结构:


import torch
from torch import nn
from torchsummary import summary
class NeuralNetwork( nn.Module):
    def _init_( self):
        super()._init_()
        self.relu = nn.ReLU()
        self.softmax = nn.softmax(dim=1)
        self.dropout = nn.Dropout(0.5)
        self.fc_1 = nn.Linear(1000, 100)
        self.fc_2 = nn.Linear(100,10)
        self.fc_3 = nn.Linear(10, 5)
    def forward(self, x):
        x = x.view(-1,1000)# view的存在,可以自动适应batchsize
        x = self.dropout( self.relu( self.fc_1(x) ) )
        x = self.dropout( self.relu( self.fc_2(x) ) )
        x= self.softmax ( self.fc_3(x))
        return x


全连接网络处理二维图像


使用全连接网络处理二维图像信息,当二维特征(Feature Map)转为一维特征时,需要从高维压缩成一维,这时候可以用 tensor.view(),或者用nn.Flatten(start_dim=1)


import torch
import torch.nn as nn
 
# 创建一个输入张量
input_tensor = torch.randn(2, 3, 4)
 
# 创建Flatten层
flatten_layer = nn.Flatten(start_dim=1)
 
# 对输入张量进行展平操作
output_tensor = flatten_layer(input_tensor)
 
print("Input Tensor:")
print(input_tensor)
print("Output Tensor:")
print(output_tensor)
 
 
 
# 输出
Input Tensor:
tensor([[[-0.5968, -0.0790,  0.0597, -0.2250],
         [ 0.1564, -0.1564, -0.0790, -0.1564],
         [-0.1564, -0.1564, -0.1564, -0.1564]],
 
        [[ 0.1564, -0.1564, -0.1564, -0.1564],
         [-0.1564, -0.1564, -0.1564, -0.1564],
         [-0.1564, -0.1564, -0.1564, -0.1564]]])
Output Tensor:
tensor([[-0.5968, -0.0790,  0.0597, -0.2250,  0.1564, -0.1564, -0.0790, -0.1564],
        [-0.1564, -0.1564, -0.1564, -0.1564, -0.1564, -0.1564, -0.1564, -0.1564]])



PyTorch中的模型创建(二)+https://developer.aliyun.com/article/1544697?spm=a2c6h.13148508.setting.24.2a1e4f0e5cwuHg

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
1月前
|
机器学习/深度学习 数据采集 人工智能
PyTorch学习实战:AI从数学基础到模型优化全流程精解
本文系统讲解人工智能、机器学习与深度学习的层级关系,涵盖PyTorch环境配置、张量操作、数据预处理、神经网络基础及模型训练全流程,结合数学原理与代码实践,深入浅出地介绍激活函数、反向传播等核心概念,助力快速入门深度学习。
89 1
|
5月前
|
机器学习/深度学习 PyTorch API
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
本文深入探讨神经网络模型量化技术,重点讲解训练后量化(PTQ)与量化感知训练(QAT)两种主流方法。PTQ通过校准数据集确定量化参数,快速实现模型压缩,但精度损失较大;QAT在训练中引入伪量化操作,使模型适应低精度环境,显著提升量化后性能。文章结合PyTorch实现细节,介绍Eager模式、FX图模式及PyTorch 2导出量化等工具,并分享大语言模型Int4/Int8混合精度实践。最后总结量化最佳策略,包括逐通道量化、混合精度设置及目标硬件适配,助力高效部署深度学习模型。
741 21
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
|
16天前
|
边缘计算 人工智能 PyTorch
130_知识蒸馏技术:温度参数与损失函数设计 - 教师-学生模型的优化策略与PyTorch实现
随着大型语言模型(LLM)的规模不断增长,部署这些模型面临着巨大的计算和资源挑战。以DeepSeek-R1为例,其671B参数的规模即使经过INT4量化后,仍需要至少6张高端GPU才能运行,这对于大多数中小型企业和研究机构来说成本过高。知识蒸馏作为一种有效的模型压缩技术,通过将大型教师模型的知识迁移到小型学生模型中,在显著降低模型复杂度的同时保留核心性能,成为解决这一问题的关键技术之一。
|
1月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
77 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
2月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.0性能优化实战:4种常见代码错误严重拖慢模型
我们将深入探讨图中断(graph breaks)和多图问题对性能的负面影响,并分析PyTorch模型开发中应当避免的常见错误模式。
169 9
|
7月前
|
机器学习/深度学习 JavaScript PyTorch
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
生成对抗网络(GAN)的训练效果高度依赖于损失函数的选择。本文介绍了经典GAN损失函数理论,并用PyTorch实现多种变体,包括原始GAN、LS-GAN、WGAN及WGAN-GP等。通过分析其原理与优劣,如LS-GAN提升训练稳定性、WGAN-GP改善图像质量,展示了不同场景下损失函数的设计思路。代码实现覆盖生成器与判别器的核心逻辑,为实际应用提供了重要参考。未来可探索组合优化与自适应设计以提升性能。
513 7
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
|
4月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
178 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
|
3月前
|
机器学习/深度学习 数据可视化 PyTorch
Flow Matching生成模型:从理论基础到Pytorch代码实现
本文将系统阐述Flow Matching的完整实现过程,包括数学理论推导、模型架构设计、训练流程构建以及速度场学习等关键组件。通过本文的学习,读者将掌握Flow Matching的核心原理,获得一个完整的PyTorch实现,并对生成模型在噪声调度和分数函数之外的发展方向有更深入的理解。
1307 0
Flow Matching生成模型:从理论基础到Pytorch代码实现
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现
本文将深入探讨L1、L2和ElasticNet正则化技术,重点关注其在PyTorch框架中的具体实现。关于这些技术的理论基础,建议读者参考相关理论文献以获得更深入的理解。
116 4
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现
|
5月前
|
机器学习/深度学习 PyTorch 编译器
深入解析torch.compile:提升PyTorch模型性能、高效解决常见问题
PyTorch 2.0推出的`torch.compile`功能为深度学习模型带来了显著的性能优化能力。本文从实用角度出发,详细介绍了`torch.compile`的核心技巧与应用场景,涵盖模型复杂度评估、可编译组件分析、系统化调试策略及性能优化高级技巧等内容。通过解决图断裂、重编译频繁等问题,并结合分布式训练和NCCL通信优化,开发者可以有效提升日常开发效率与模型性能。文章为PyTorch用户提供了全面的指导,助力充分挖掘`torch.compile`的潜力。
547 17

热门文章

最新文章

推荐镜像

更多