pytorch学习的一些tips(10)

add_module:add_module(namemodule)

作用:为当前的module添加子module

具有两个参数:

 pytorch不会自动给我们注册模块,我们需要根据传进来的参数对网络进行初始化,pytorch在注册模块的时候,会查看成员的类型,如果成员变量类型是Module的子类,那么pytorch就会注册这个模块,否则就不会。

在__init__中
conv_ls = []
        for i in range(hyperpm['nlayer']):
            conv = RoutingLayer(hyperpm)
            self.add_module('conv_%d' % i, conv)
            conv_ls.append(conv)
在forward中
        for conv in self.conv_ls:
            x = conv(x, src_trg_edges)

有一个替换操作:

self.convs=nn.ModuleList([RoutingLayer(hyperpm) for _ in range(hyperpm['nlayer'])])

python中for _ in range(10) 与 for i in range(10):

for _ in range(n) 一般仅仅用于循环n次,不用设置变量,用 _ 指代临时变量,只在这个语句中使用一次。
在循环中两者的作用相似。


python-格式化字符串(%d %f %s )

https://blog.csdn.net/yokii_/article/details/102811308


print(model)

当print(model)时,默认是按照def __init__(self,in_dim, out_dim, device)中的顺序打印的,而非是forward中的顺序。


  mode = ‘test’ if y is None else ‘train’
if y==None:
	mode='test'
else:
	mode='train'

上面两段代码等价


复现代码结果:

发现seed随机种子又不能用了,不能复现代码的结果,经过检查发现是在model中使用了negative_sampling,这个玩意儿不受seed的约束。

经过抽丝剥茧,我发现一个巨大的问题,不是negative_sampling不受seed的约束,而是我在写seed函数的时候,忘记在.py文件里面import random包了,但是更坑爹的是,他一直没有报错,一直运行良好,这是什么鬼东西啊!

import random
random.seed(seed) #为python设置随机种子

当导入这个包之后,就可以完美的复现代码结果啦。

我发现写代码就是发现一个问题,解决一个问题,周而复始。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值