我用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不在正向命令下,但是如果我删除它们,我会得到不同的结果。我觉得很奇怪,因为它们不在模型中。有人能解释一下吗?
1条答案
按热度按时间jdgnovmf1#
我认为原因是你对随机数发生器的期望太高了,而它却不能提供。种子固定是有效的,如果程序没有大的改变,“大的”意味着随机数发生器的调用链保持不变。然后你添加了层,它们的初始化例程打破了这个链。