gpt4 book ai didi

python - PyTorch:为什么要创建同一类型层的多个实例?

转载 作者:行者123 更新时间:2023-12-04 13:27:16 28 4
gpt4 key购买 nike

此代码来自 PyTorch 转换器:

    self.linear1 = Linear(d_model, dim_feedforward, **factory_kwargs)
self.dropout = Dropout(dropout)
self.linear2 = Linear(dim_feedforward, d_model, **factory_kwargs)
self.norm1 = LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs)
self.norm2 = LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs)
self.norm3 = LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs)
self.dropout1 = Dropout(dropout)
self.dropout2 = Dropout(dropout)
self.dropout3 = Dropout(dropout)
为什么要加 self.dropout1 , ...2 , ...3self.dropout已经存在并且是完全相同的功能?
另外,( self.linear1self.linear2 )和 self.linear 之间有什么区别? ?

最佳答案

Dropout的情况下,重用图层通常不应该成为问题。所以你可以创建一个 self.dropout = Dropout(dropout)层并在 forward 中多次调用它功能。但是,在执行此操作时可能会有一些微妙的用例,它们的行为会有所不同,例如,如果您出于某种原因跨网络中的层进行迭代。 This thread ,尤其是 this post ,详细讨论这个。
对于线性层,每个 Linear对象的特征在于一组权重和偏差。如果您在 forward 中多次调用它函数,所有调用将共享和优化相同的权重集。这可以有合理的用途,但当您需要多个线性层时不合适,每个层都有自己的权重和偏差集。

关于python - PyTorch:为什么要创建同一类型层的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67480473/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com