Pytorch常用的NN网络层用法详解整理笔记

【如果笔记对你有帮助,欢迎关注&点赞&收藏,收到正反馈会加快更新!谢谢支持!】

目录

1. nn.Linear 线性层(全连接层)

2. nn.Conv1d (一维卷积层)

 3. nn.Conv2d(二维卷积层)

4. nn.Conv3d (三维卷积层)

5. nn.MaxPool1d (一维最大池化层)

 6. nn.Embedding(嵌入层)

7. nn.ReLU, nn.Sigmoid (激活函数)

8.  nn.BatchNorm1d (一维批量归一化)

9. nn.LayerNorm (层归一化)


(ps:下面用法只列出较常用的参数)

1. nn.Linear 线性层(全连接层)

  • 作用:将输入特征映射到输出特征

  • 用法

    nn.Linear(in_features, out_features) # 处理tensor最后一个维度
  • 例子

    layer = nn.Linear(16, 32)
    
    x = torch.randn(2,4,16) # (输入)x形状: torch.Size([2, 4, 16])
    output = layer(x) # output形状: torch.Size([2, 4, 32])

    2. nn.Conv1d (一维卷积层)

    • 作用:处理一维序列数据(如音频、文本等),每个数据点有对应特征(维度即in_channels)
    • 用法(in_channels, out_channels, kernel_size 这三个必须要给定)
      nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1)
      

    • 输入输出形状:
       
    • 例子
      layer = nn.Conv1d(16, 32, 3)  # in_channels=16, out_channels=32, kernel_size=3
      
      x = torch.randn(2,16,6)  # 输入x:batch_size=2, in_channels=16, sequence_length=6
      output = layer(x)  # output形状:torch.Size([2, 32, 4])

     3. nn.Conv2d(二维卷积层)

    •  作用:处理二维数据(如图像),每个数据点有对应特征(维度即in_channels)
    • 用法:
      kernel_size, stride, padding, dilation 可以是 int 或 tuple (输入int就默认两个相等)
      torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1)
    • 输入输出形状要求:
    • 例子
      layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
      
      x = torch.randn(2, 3, 50, 50)  # 输入x:batch_size=2, in_channels=16, H=50, W=50
      output = layer(x)  # torch.Size([2, 16, 50, 50])

    4. nn.Conv3d (三维卷积层)

    • 作用:处理三维序列数据(比如视频、点云),每个数据点有对应特征(维度即in_channels)
    • 用法:
      kernel_size, stride, padding, dilation 可以是 int 或 tuple (输入int就默认三个相等)
      torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1)
    • 输入输出形状要求:
       
    • 例子:
      layer = nn.Conv3d(16, 32, (3, 5, 2), stride=(2, 1, 1), padding=(4, 2, 0))
      
      x = torch.randn(2, 16, 10, 50, 100)  # 输入x:batch_size=2, in_channels=16, D=10, H=50, W=100
      output = layer(x)  # torch.Size([2, 32, 8, 50, 99])

    5. nn.MaxPool1d (一维最大池化层)

    • 作用:降采样,减少数据的维度,保留重要特质
    • 用法:
      nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1)
    • 输入输出形状(和Conv1d一样):
    • 例子:
      layer = nn.MaxPool1d(3)  # kernel_size=3
      
      x = torch.randn(2,16,6)  # 输入x:batch_size=2, in_channels=16, sequence_length=6
      output = layer(x)  # output形状:torch.Size([2, 16, 2])

     

     6. nn.Embedding(嵌入层)

    • 作用:将离散的输入转换为连续的向量表示
    • 用法:
      nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None)
    • 例子: 
      layer = nn.Embedding(10, 3)  # 索引0-9共十个数,每个数对应一个size为3的embedding
      
      x = torch.LongTensor([[1, 2, 4, 5], [0, 3, 2, 9]])  # x.shape: torch.Size([2, 4])
      output = layer(x)  # output.shape: torch.Size([2, 4, 3])
      print(output)
      # tensor([[[ 1.0540,  1.1001, -0.5979],
      #          [-0.5170,  0.7198,  0.6907],
      #          [-0.2922, -0.1940,  0.2146],
      #          [ 2.3867, -1.2277,  1.7305]],
      
      #         [[ 1.1240,  0.1396,  1.0800],
      #          [-0.2988, -0.3426, -1.1541],
      #          [-0.5170,  0.7198,  0.6907],
      #          [ 1.1608, -1.0140,  0.8074]]], grad_fn=<EmbeddingBackward0>)

     

    7. nn.ReLU, nn.Sigmoid (激活函数)

    • 作用:非线性变换
    • 用法:
      nn.ReLU()
      nn.Sigmoid()
    • 例子:
      layer = nn.Sigmoid()
      
      x = torch.randn(2, 16) 
      output = layer(x)  # output.shape: torch.Size([2, 16])

     

    8.  nn.BatchNorm1d (一维批量归一化)

    • 作用:处理一维序列数据,标准化每个batch的数据来加速训练过程,并减少内部协变量偏移
    • 用法:
      nn.BatchNorm1d(num_features)
    • 输入输出形状:
    • 例子:
      layer = nn.BatchNorm1d(num_features=16)
      
      x = torch.randn(10, 16, 50)
      output = layer(x)  # torch.Size([10, 16, 50])
    • nn.BatchNorm2d, nn.BatchNorm3d作用与nn.BatchNorm1d相同,用法参照nn.Conv2d, nn.Conv3d

    9. nn.LayerNorm (层归一化)

    • 作用:对样本的特征进行归一化,每个样本独立进行,可以保持样本之间的独立性
    • 用法:
      nn.LayerNorm(normalized_shape) # normalized_shape为int/tuple
    • 代码:
      # 只对特征维度归一化
      layer = nn.LayerNorm(normalized_shape=16)
      
      x = torch.randn(10, 50, 16)
      output = layer(x)   # output.shape: torch.Size([10, 50, 16])
      
      # 对最后两个维度归一化(相当于对每个样本进行归一化)
      layer2 = nn.LayerNorm(normalized_shape=(50, 16)) 
      
      x = torch.randn(10, 50, 16)
      output = layer(x)   # output.shape: torch.Size([10, 50, 16])

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值