第一层到第六晨的encoder结构基本一样,未发现明显的区别
Transformer(
(encoder): Encoder(
(linear_in): Linear(in_features=320, out_features=512, bias=True)#线性层320-512(设置偏置会占用显存)
1、深度学习偏置的作用?
x1w1 + x2w2 +…+xnwn > T(T为一个阈值),而T越大,想激活这个感知器的难度越大,人工选择一个阈值并不是一个好的方法,因为样本那么多,我不可能手动选择一个阈值,使得模型整体表现最佳,那么我们可以使得T变成可学习的,这样一来,T会自动学习到一个数,使得模型的整体表现最佳。当把T移动到左边,它就成了偏置,x1w1 + x2w2 +…+xnwn - T> 0 ----->x*w +b > 0,总之,偏置的大小控制着激活这个感知器的难易程度。
(大概的意思是自动选择一个阈值而不是手动选择)
原文链接:https://blog.csdn.net/Boys_Wu/article/details/109819534
具体描述:https://blog.csdn.net/u013289254/article/details/98785869
(layer_norm_in): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
2.归一化的作用一般都是为了让数据更加稳定,减少模型的loss
BatchNorm:batch方向做归一化,算NHW的均值,对小batchsize效果不好;BN主要缺点是对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小,则计算的均值、方差不足以代表整个数据分布
(魔方的前方块)
LayerNorm:channel方向做归一化,算CHW的均值,主要对RNN作用明显;
(魔方的左方块)
num_features: 来自期望输入的特征数,该期望输入的大小为’batch_size x num_features [x width]’
eps: 为保证数值稳定性(分母不能趋近或取0),给分母加上的值。默认为1e-5。
momentum: 动态均值和动态方差所使用的动量。默认为0.1。
affine: 布尔值,当设为true,给该层添加可学习的仿射变换参数。
track_running_stats:布尔值,当设为true,记录训练过程中的均值和方差;
原文链接:https://blog.csdn.net/shanglianlm/article/details/85075706
(positional_encoding): PositionalEncoding()
(dropout): Dropout(p=0.1, inplace=False)
(layer_stack): ModuleList(
(0): EncoderLayer(
(slf_attn): MultiHeadAttention(
(w_qs): Linear(in_features=512, out_features=512, bias=True)
(w_ks): Linear(in_features=512, out_features=512, bias=True)
(w_vs): Linear(in_features=512, out_features=512, bias=True)
(attention): ScaledDotProductAttention(
(dropout): Dropout(p=0.1, inplace=False)
(softmax): Softmax(dim=2)
)
(layer_norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
(fc): Linear(in_features=512, out_features=512, bias=True)
(dropout): Dropout(p=0.1, inplace=False)
)
(pos_ffn): PositionwiseFeedForward(
(w_1): Linear(in_features=512, out_features=2048, bias=True)
(w_2): Linear(in_features=2048, out_features=512, bias=True)
(dropout): Dropout(p=0.1, inplace=False)
(layer_norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
)
)
inplace=False 不改变原有的数据,在原来的数据上进行操作并生成一个新的数据