前言:整理学习人工神经网络(Artificial Neural Network,ANN)过程中的问题
为什么在线性层之间引入非线性函数(激活函数)使用?
因为线性模型的表达能力不够,引入激活函数是为了添加非线性因素,解决线性模型所不能解决的问题。
下方左图所示,可以用一条直线划分坐标为(1, 1)和其他三个点,但如果想划分三角形和圆圈,那么直线是不能划分的
但对于神经网络模型而言,整个处理非线性可分的能力关键不在于激活函数,而是神经网络之间的多层叠加
参考自:《深度学习入门:基于Python的理论与实现(斋藤康毅)》
为什么将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()
是模块调用,一般在定义网络层的时候使用。
参考文章: