10.7.3 残差连接和层规范化

这个nn.LayerNorm有点搞笑我觉得,有个参数normalized_shape,输入想要归一化张量的最后几个维度,然后就将最后几个维度的元素看做一个整体进行归一化,如下

import torch
import torch.nn as nn

# 定义输入张量 (batch_size, sequence_length, feature_dim)
x = torch.tensor([
    [
        [1.0, 2.0, 3.0, 4.0],
        [5.0, 6.0, 7.0, 8.0],
        [9.0, 10.0, 11.0, 12.0]
    ],
    [
        [13.0, 14.0, 15.0, 16.0],
        [17.0, 18.0, 19.0, 20.0],
        [21.0, 22.0, 23.0, 24.0]
    ]
])

# 输出形状为 (2, 3, 4)
layer_norm = nn.LayerNorm(normalized_shape=4)  # normalized_shape 指定特征维度 (feature_dim)

# 应用 LayerNorm
normalized_x = layer_norm(x)
normalized_x

输出为

tensor([[[-1.3416, -0.4472,  0.4472,  1.3416],
         [-1.3416, -0.4472,  0.4472,  1.3416],
         [-1.3416, -0.4472,  0.4472,  1.3416]],

        [[-1.3416, -0.4472,  0.4472,  1.3416],
         [-1.3416, -0.4472,  0.4472,  1.3416],
         [-1.3416, -0.4472,  0.4472,  1.3416]]],
       grad_fn=<NativeLayerNormBackward0>)
layer_norm = nn.LayerNorm(normalized_shape=[3,4])  # normalized_shape 指定特征维度 (feature_dim)

# 应用 LayerNorm
normalized_x = layer_norm(x)
normalized_x

输出为

tensor([[[-1.5933, -1.3036, -1.0139, -0.7242],
         [-0.4345, -0.1448,  0.1448,  0.4345],
         [ 0.7242,  1.0139,  1.3036,  1.5933]],

        [[-1.5933, -1.3036, -1.0139, -0.7242],
         [-0.4345, -0.1448,  0.1448,  0.4345],
         [ 0.7242,  1.0139,  1.3036,  1.5933]]],
       grad_fn=<NativeLayerNormBackward0>)

但是如果normalized_shape参数不是4[3,4][2,3,4]就会报错(其他等价形式也可以,比如(4,)(3,4)

posted @   最爱丁珰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2024-02-25 Field Should Not Be Empty
2024-02-25 One-X
2024-02-25 Constructive Problems
2024-02-25 回文子串的最大长度
2024-02-25 Array Collapse
2024-02-25 Game with Multiset
点击右上角即可分享
微信分享提示