深度强化学习杂记

  • reset()中随机种子不要改变(gym环境配置)

  • 函数里面的注释:

    参数注释:以冒号(:)标记
    返回值注释:以 -> 标记

  • AttributeError: ‘function’ object has no attribute ‘calculate’

    属性错误,函数对象没有calculate属性

  • vs code中找相同的变量:Ctrl+F

  • 多行注释Ctrl+/

  • if __name__ == "__main__":#可用于测试代码使用
    

    类的属性值用私有方法计算

  • 函数加括号与不加括号的区别:

    加括号,返回的是函数内部定义的一个返回变量,即return的对象。

    不加括号,返回的是一个函数对象,不需要该函数执行完就能返回。

  • 没有激活函数就是输入和输出就是线性组合,加上激活函数才有非线性

    • 常见的激活函数:sigmoid,Tanh,ReLU,Leaky ReLU,PReLU,ELU,Maxout

    • sigmoid:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vqv3I87I-1670759321822)(C:\Users\upuplions\AppData\Roaming\Typora\typora-user-images\image-20221210145634654.png)]

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z3XWkSxy-1670759321823)(https://pic2.zhimg.com/80/v2-6d06c0db16a0cc66e27bfb97d08b14bd_1440w.webp)]

      特点:

      • Sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定,可以用作输出层。
      • 连续函数,便于求导
      • sigmoid函数在变量取绝对值非常大的正值或负值时会出现饱和现象,意味着函数会变得很平,并且对输入的微小改变会变得不敏感。在反向传播时,当梯度接近于0,权重基本不会更新,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。
      • sigmoid函数的输出不是0均值的,会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响。
      • 计算复杂度高,因为sigmoid函数是指数形式。
  • Tanh函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RQXradwz-1670759321823)(C:\Users\upuplions\AppData\Roaming\Typora\typora-user-images\image-20221210150040660.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xa8wuF6u-1670759321824)(C:\Users\upuplions\AppData\Roaming\Typora\typora-user-images\image-20221210150127193.png)]

  • 特点:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LYCXBtGd-1670759321824)(C:\Users\upuplions\AppData\Roaming\Typora\typora-user-images\image-20221210150208045.png)]

Tanh函数是 0 均值的,因此实际应用中 Tanh 会比 sigmoid 更好。但是仍然存在梯度饱和exp计算的问题。

  • ReLU函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXw3LdTE-1670759321824)(C:\Users\upuplions\AppData\Roaming\Typora\typora-user-images\image-20221210150316893.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D8qB8H2z-1670759321824)(C:\Users\upuplions\AppData\Roaming\Typora\typora-user-images\image-20221210150344045.png)]

  • 使用ReLU的SGD算法的收敛速度比 sigmoid 和 tanh 快。

  • 在x>0区域上,不会出现梯度饱和、梯度消失的问题。

  • 计算复杂度低,不需要进行指数运算,只要一个阈值就可以得到激活值。

  • ReLU的输出不是0均值的。

  • Dead ReLU Problem(神经元坏死现象):ReLU在负数区域被kill的现象叫做dead relu。ReLU在训练的时很“脆弱”。在x<0时,梯度为0。这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新。产生这种现象的两个原因:参数初始化问题;learning rate太高导致在训练过程中参数更新太大

  • Leaky ReLU函数渗漏整流线性单元(Leaky ReLU),为了解决dead ReLU现象。用一个类似0.01的小值来初始化神经元,从而使得ReLU在负数区域更偏向于激活而不是死掉。这里的斜率都是确定的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GzVFoF8f-1670759321825)(C:\Users\upuplions\AppData\Roaming\Typora\typora-user-images\image-20221210150647860.png)]

  • PReLU函数:参数整流线性单元(Parametric Rectified linear unit,PReLU),用来解决ReLU带来的神经元坏死的问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbyzQoIF-1670759321825)(C:\Users\upuplions\AppData\Roaming\Typora\typora-user-images\image-20221210150804471.png)]

  • **指数线性单元(ELU):**具有relu的优势,没有Dead ReLU问题,输出均值接近0,实际上PReLU和Leaky ReLU都有这一优点。有负数饱和区域,从而对噪声有一些鲁棒性。可以看做是介于ReLU和Leaky ReLU之间的一个函数。当然,这个函数也需要计算exp,从而计算量上更大一些。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4DEXvMb-1670759321825)(https://pic1.zhimg.com/80/v2-7c560bb667e0eebe798dd383ecbe504c_720w.webp)]

  • 问题:

    TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.#不能将cuda:0设备类型张量转换为numpy。首先使用tensor .cpu()将张量复制到主机内存中。
    
  • torch.cat()拼接张量的函数

  • flatten()函数:

    flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组。
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值