torch.nn.Embedding()的固定化

问题

最近在运行模型时,结果不稳定,所以尝试修改随机初始化的参数,使参数是随机初始化的,但是每次都一样

发现是用了

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是完全一致的,并且是随机的

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值