前言:整理学习人工神经网络(Artificial Neural Network,ANN)过程中的问题
为什么在线性层之间引入非线性函数(激活函数)使用?
因为线性模型的表达能力不够,引入激活函数是为了添加非线性因素,解决线性模型所不能解决的问题。
下方左图所示,可以用一条直线划分坐标为(1, 1)和其他三个点,但如果想划分三角形和圆圈,那么直线是不能划分的
但对于神经网络模型而言,整个处理非线性可分的能力关键不在于激活函数,而是神经网络之间的多层叠加
参考自:《深度学习入门:基于Python的理论与实现(斋藤康毅)》
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jtnb2woK-1655387418572)(F:/Backup/img/20220422211115.png)]](https://i-blog.csdnimg.cn/blog_migrate/8cfd58d7159e66f92dca27b680033ac2.png)
为什么将x_data传入类实例model中即可调用forward()函数中操作?
y_pred = model(x_data)
因为以上代码中model(x_data)使用类名(参数)的语法,因此会直接调用model类中的__call__()方法(继承自torch.nn.Module),而torch.nn.Module中的__call__()方法中会返回forward()函数的结果
__call__()的作用:若在某个类中实现这一方法,则可使该类的实例能像函数一样被调用。Module类实现代码见:
.\anaconda3\envs\d2l\Lib\site-packages\torch\nn\modules。env\d2l为虚拟环境名
如何使用ReLU激活函数
在Pytorch中,激活函数的使用方法有两种,分别是:
第一种:
import torch.nn.functional as F
F.relu(input)
第二种:
import torch.nn as nn
nn.ReLU()
这两种方法都是使用relu激活,但使用的场景不一样,F.relu()是函数调用,一般使用在foreward()函数里;而nn.ReLU()是模块调用,一般在定义网络层的时候使用。
参考文章:
本文探讨了在线性层间引入非线性激活函数的原因,强调了其增强神经网络表达能力的重要性。激活函数如ReLU在PyTorch中的使用方式包括函数调用(F.relu)和模块调用(nn.ReLU),不同场景下选择不同的调用方式。同时解释了模型实例通过__call__()方法调用forward()函数的机制。
649

被折叠的 条评论
为什么被折叠?



