pytorch基础(五):torch.nn.Linear的工作原理


前言

  本系列主要是对pytorch基础知识学习的一个记录,尽量保持博客的更新进度和自己的学习进度。本人也处于学习阶段,博客中涉及到的知识可能存在某些问题,希望大家批评指正。另外,本博客中的有些内容基于吴恩达老师深度学习课程,我会尽量说明一下,但不敢保证全面。


提示:以下是本篇文章正文内容,下面案例可供参考

一、吴恩达深度学习视频

  相信很多人深度学习的入门教程是吴恩达老师的深度学习视频,吴恩达老师有关线性激活的运算推导相信大家都不陌生。在使用numpy复现一个简单的神经网络时,用一个简单的例子解释参数维度的变化:

1.输入样本(20,50),即单个样本是20维的向量,每次输入50个,每一列为一个样本
2.输入层:第一层=20:70,即第一层隐藏层有70个神经元
3.W=(n[L],n[L-1])=70:20,偏移向量b=(70,)
4.线性激活:A[1]=WX+b,A[1]的维度为(70,50)

  也就是说,每层weight的初始化维度为(输入层除外):(n[L], n[L-1])。而输入样本的维度为(单个样本维度,样本个数),即输入的每一列为单个样本,每一层计算的A[L]的每一列对应的是单个样本的计算值。

二、torch.nn.Linear

  根据pytorch官方文档给出的解释如下:
在这里插入图片描述
  从官方文档给出的解释来看,torch.nn.Linear的两个输入为(输入的维度,输出的维度),也就是(n[L-1], n[L]),而torch.nn.Linear内部初始化的权重的维度为(n[L],n[L-1])。我们通过一个简单的例子来说明一下:

1.假设输入层神经元个数为20,下一层(记作L1)的神经元个数为70
2.初始化L1的线性层:torch.nn.Linear(20,70)
3.L1层的weight维度为:(70,20)   偏移向量的维度为:(70,)
4.根据计算公式:y=x.AT+b,要求输入的x的维度为(n,20),n为样本个数
5.L1层的线性计算结果(可以理解为Z[1])的维度为:(n,70)

  可以看出,初始化torch.nn.Linear时要使用(n[L-1], n[L]),也就是输入维度和输出维度。样本输入要采用每一行代表一个样本的方式,与吴恩达老师视频中的讲解完全相反,刚开始编程可能会有点不习惯,慢慢习惯就好。
  关于weight的维度其实有点奇怪,线性层保存的weight的维度为(n[L],n[L-1]),这其实和吴恩达老师视频中的一致,但是计算的时候却进行了转置操作,这就使得x的输入与吴恩达老师视频中完全相反。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值