pytorch 标准化和残差

是init就是创建模型对象时的初始化操作,

forward就是模型对象被当成函数调用时自动触发的方法

init是为了初始化对象的架构,forward定义计算流程。

forward 会在 __call__ 自动调用 和c++ ​编辑overload ​编辑operator ()没区别。

就是init一次,构建一个新对象,权重也是新的。

 
 
class LayerNorm(nn.Module):
    def __init__(self,feature,eps=le-6):
        """
        
        """
        super(LayerNorm,self).__init__()
        self.a_2=nn.Parameter(torch.ones(feature))
        self.b_2=nn.Parameter(torch.zeros(feature))
        self.eps=eps
    
    def forward(self,x):
        mean=x.mean(-1,keepdim=True)
        std=x.std(-1,keepdim=True)
        return self.a_2*(x-mean)/(std+self.eps)+self.b_2
 
 
 
class SublayerConnection(nn.Module):
    """
    这不仅仅做了残差,这是把残差和layernorm一起做了
    """
    def __init__(self,size,dropout=0.1):
        super(SublayerConnection,self).__init__()
    #第一步,做layernorm
        self.layer_norm=LayerNorm(size)
    #第二步,做dropout ,可做可不做,避免过拟合,提升性能,其实重点是layerno
        self.dropout=nn.Dropout(p=dropout)
        
    def forward(self,x,sublayer):
        
        """
        参数x:就是self-attention的输入
        参数 sublayer:self-attention层
        
        """
        return self.dropout(self.layer_norm(x+sublayer(x)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值