赞
踩
Transformer中的FeedForward
flyfish
class PoswiseFeedForwardNet(nn.Module): def __init__(self, d_ff=2048): super(PoswiseFeedForwardNet, self).__init__() # 定义一维卷积层 1,用于将输入映射到更高维度 self.conv1 = nn.Conv1d(in_channels=d_embedding, out_channels=d_ff, kernel_size=1) # 定义一维卷积层 2,用于将输入映射回原始维度 self.conv2 = nn.Conv1d(in_channels=d_ff, out_channels=d_embedding, kernel_size=1) # 定义层归一化 self.layer_norm = nn.LayerNorm(d_embedding) def forward(self, inputs): #------------------------- 维度信息 -------------------------------- # inputs [batch_size, len_q, embedding_dim] #---------------------------------------------------------------- residual = inputs # 保留残差连接 # 在卷积层 1 后使用 ReLU 激活函数 output = nn.ReLU()(self.conv1(inputs.transpose(1, 2))) #------------------------- 维度信息 -------------------------------- # output [batch_size, d_ff, len_q] #---------------------------------------------------------------- # 使用卷积层 2 进行降维 output = self.conv2(output).transpose(1, 2) #------------------------- 维度信息 -------------------------------- # output [batch_size, len_q, embedding_dim] #---------------------------------------------------------------- # 与输入进行残差链接,并进行层归一化 output = self.layer_norm(output + residual) #------------------------- 维度信息 -------------------------------- # output [batch_size, len_q, embedding_dim] #---------------------------------------------------------------- return output # 返回加入残差连接后层归一化的结果
PoswiseFeedForwardNe继承自PyTorch的nn.Module类。该网络包含两个一维卷积层和一个层归一化操作。在前向传播过程中,该网络首先对输入进行卷积操作,然后通过ReLU激活函数进行非线性变换,接着进行降维操作,并与原始输入进行残差连接,最后通过层归一化得到输出。
具体来说,函数初始化时,根据参数d_ff设置两个一维卷积层的输出维度。在前向传播过程中,输入的维度为[batch_size, len_q, embedding_dim],首先将输入保留为残差连接的副本。然后,通过一维卷积层1将输入映射到更高维度,并在卷积层1后使用ReLU激活函数。接着,通过一维卷积层2将输出映射回原始维度。最后,将卷积层2的输出与原始输入进行残差连接,并通过层归一化操作得到最终输出。
上述部分在整体的位置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。