问题
最近在运行模型时,结果不稳定,所以尝试修改随机初始化的参数,使参数是随机初始化的,但是每次都一样
发现是用了
self.embed_user = nn.Embedding(user_num, factor_num)
self.embed_item = nn.Embedding(item_num, factor_num)
是调用了torch.nn.Embedding()
进行了初始化, 创建了一个嵌入的模型
尝试一
发现对于embed_user
的调用都是weight
users_embedding = self.embed_user.weight
items_embedding = self.embed_item.weight
通过把weight输出,可以看到实际上weight就是FloatTensor。
所以尝试直接用Tensor,再固定随机的Tensor,但是后面模型会报错,并且很难解决。
尝试二
最后在Pytorch官网的讨论里,发现了这么一种写法
torch.manual_seed(1000)
self.embed_user = nn.Embedding(user_num,factor_num)(torch.autograd.Variable(torch.LongTensor([0,1,2])))
self.embed_item = nn.Embedding(item_num,factor_num)(torch.autograd.Variable(torch.LongTensor([0,1,2])))
但是从后面调用报的错误来看,不认为embed_user.weight
是一个Tensor
尝试三✅
偶然尝试,将torch.autograd.Variable()
单独拿出来写,竟然可以运行成功(至于为什么,还不清楚😥)
torch.manual_seed(1000)
self.embed_user = nn.Embedding(user_num, factor_num)
self.embed_item = nn.Embedding(item_num, factor_num)
self.embed_user(torch.autograd.Variable(torch.LongTensor([0,1,2])))
self.embed_item(torch.autograd.Variable(torch.LongTensor([0,1,2])))
我们可以通过输出看一下效果
print(self.embed_user.weight)
print(self.embed_item.weight)
第一次运行:
第二次运行:
通过对比可以发现,两次生成的Tensor是完全一致的,并且是随机的