人工神经网络问题汇总

本文探讨了在线性层间引入非线性激活函数的原因,强调了其增强神经网络表达能力的重要性。激活函数如ReLU在PyTorch中的使用方式包括函数调用(F.relu)和模块调用(nn.ReLU),不同场景下选择不同的调用方式。同时解释了模型实例通过__call__()方法调用forward()函数的机制。
摘要由CSDN通过智能技术生成

前言:整理学习人工神经网络(Artificial Neural Network,ANN)过程中的问题


为什么在线性层之间引入非线性函数(激活函数)使用?

因为线性模型的表达能力不够,引入激活函数是为了添加非线性因素,解决线性模型所不能解决的问题。

下方左图所示,可以用一条直线划分坐标为(1, 1)和其他三个点,但如果想划分三角形和圆圈,那么直线是不能划分的

但对于神经网络模型而言,整个处理非线性可分的能力关键不在于激活函数,而是神经网络之间的多层叠加

参考自:《深度学习入门:基于Python的理论与实现(斋藤康毅)》

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jtnb2woK-1655387418572)(F:/Backup/img/20220422211115.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\modulesenv\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()是模块调用,一般在定义网络层的时候使用。


参考文章:

  1. 神经网络激活函数的作用是什么?
  2. PyTorch中的 forward() 方法详解_energy_百分百的博客
  3. 探究PyTorch中model(image)会自动调用forward函数?
  4. pytorch:F.relu() 与 nn.ReLU() 的区别
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值