pytorch 未经训练的参数影响最终模型性能

kokeuurv  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(143)

我用PyTorch写了一些DL模型,并且修正了随机种子。一些未使用的函数会影响最终模型的性能。例如,这是我代码的一部分。

class StaticEmbedding(nn.Module):
    def __init__(self, d_model, seq_len, mode='l'):
        super(StaticEmbedding, self).__init__()
        self.seq_len = seq_len
        self.linear_l = nn.Linear(27, seq_len)
        self.linear_d = nn.Linear(27, d_model//2)
        self.linear_p = nn.Linear(d_model//2, d_model)
        self.linear_1 = nn.Linear(27, d_model//2)
        self.linear_2 = nn.Linear(d_model//2, d_model)
        self.gelu = nn.GELU()
        self.tanh = nn.Tanh()

    def forward(self, static):  
        static = static[:,None,:]        
        if self.mode =='d':
            static = self.linear_d(static)
        elif self.mode == 'l':
            static = self.linear_l(static).transpose(1,2)
        elif self.mode == 'p':   
            static = self.linear_d(static)after this
            static = self.linear_p(self.gelu(static))
            static = self.tanh(static)
             
        return static

self.linear_1和self.linear_2不在正向命令下,但是如果我删除它们,我会得到不同的结果。我觉得很奇怪,因为它们不在模型中。有人能解释一下吗?

jdgnovmf

jdgnovmf1#

我认为原因是你对随机数发生器的期望太高了,而它却不能提供。种子固定是有效的,如果程序没有大的改变,“大的”意味着随机数发生器的调用链保持不变。然后你添加了层,它们的初始化例程打破了这个链。

相关问题