2020年10月14日:最近几天复现论文踩坑记录

最近踩的坑:

  1. 在ddpg算法类的actor网络中输入1个state来获取action,要扩展成batch_size为1的tensor。否则出来的维度不同,导致后面计算熵出错。出错还好,就是怕不报错,就需要慢慢排查。

  2. 对于target类网络,不需要使用梯度更新的,可以关掉梯度来节省内存提高速度。

  3. iterator.chain()返回的迭代器只能使用一次,for循环后将失效。需要重新创建迭代器。(因为这个原因导致critic的网络没有被更新)

    l1 = [1,2,3]
    l2 = [4,5,6]
    l1_l2 = itertools.chain(l1,l2)
    for i in l1_l2:
        print(i)
    # l1_l2使用后失效。
    for i in l1_l2:
        # 无法进入
        print(i*0.1)
    
  4. numpy: a.squeeze()并不改变a本身的值,而是返回一个结果。一般带下划线的方法可以改变本身的值,如a.add_()

  5. np.where(c, x, y) 如果满足条件c,则返回x,否则返回y

    np.where( c ) 返回满足条件c的坐标。

    例如,

    a = np.random.uniform(size = 10) # 随机生成均一分布的10个0~1之间的数组
    np.where(a<0.8) #返回所有小于0.8的坐标。长度不一定,根据多少定。
    
  6. numpy:

    # 假设a是一个(1,50,10)的数组。
    a[0, [1,2,3]] # 返回的是dim0里面坐标为1,2,3的元素。即返回的是一个(3,10)的数组。
    
  7. 算法相关:

    不一定需要正则化,也可以训练出来好的结果。根据实际情况定。一旦对输入的数据进行了正则化,那么在测试新的数据时,就需要使用原来正则化所使用的均值和方差,否则结果会有问题。

  8. 如果想要保证网络每次初始化的参数都相同,在pytorch中网络的__init__可以使用torch.manual_seed(seed)设置随机种子,这样在每次创建的网络初始权重都一样。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值