PyTorch nn.Linear学习记录

本文详细解析了PyTorch中的nn.Linear类,介绍了其在线性变换和偏置操作中的作用机制,并通过线性回归实例展示了如何使用nn.Linear进行数据处理。理解了参数矩阵和偏置向量如何决定输出,适合初学者和进阶者学习。

记录一下 PyTorch nn.Linear 的学习过程。

概述

首先,从 PyTorch 的官方文档,可以发现 nn.Linear 是一个类(面向对象语言)。它的作用是对输入数据 x (列向量)做线性变换(Ax)和偏置(+b)后得到输出数据 y(列向量)。即
y = A x + b y=Ax+b y=Ax+b
其中 A 是线性变换矩阵,A有 m 行,n 列。x、y、b分别代表一条输入数据、一条输出数据、一条输出数据对应的偏置,分别是 n 行、m 行、m行的列向量。有读者可能注意到 PyTorch 官方文档给出的式子是 y = x A T + b y=xA^T+b y=xAT+b,但是本文不采用这个写法。理由是本文认为这个写法和上面的写法表达了一样的内涵,可以认为这个写法是上面写法方程两边同时取了转置,这个写法中向量为行向量。
下文先介绍 nn.Linear 的基本信息,并且对其机理做详细介绍,最后举了一个简单的线性回归例子。

一、

代码 1展示创建一个 nn.Linear 类的对象。输出 1 打印了关于该对象的信息。输出 1 告诉我们该对象的输入向量有 2 个分量,输出向量有 3 个分量。还打印了 nn.Linear 类对象的 参数矩阵(随机生成的)和偏置向量。细心的读者可能发现了参数矩阵有 3 行、2 列。为什么不是 2 行、3 列呢?(可能产生该疑惑的理由是代码第3行:torch.nn.Linear(2,3)建立了一个输入特征为 2 个分量的向量,输出特征为 3 个分量的向量的 nn.Linear 对象)下面通过图1、介绍 参数矩阵的一些特点以及输出是如何得到的

import torch
model = torch.nn.Linear(2, 3);
print('Network Structure : torch.nn.Linear(2,3) :\n', model)
print('Weight Of Network :\n', model.weight)
print('Bias Of Network :\n', model.bias)
代码1.

输出

Network Structure : torch.nn.Linear(2,3) :
 Linear(in_features=2, out_features=3, bias=True)
Weight Of Network :
 Parameter containing:
tensor([[-0.2424,  0.5018],
        [ 0.4110,  0.6242],
        [ 0.5015, -0.5561]], requires_grad=True)
Bias Of Network :
 Parameter containing:
tensor([-0.3397,  0.5143, -0.1039], requires_grad=True)

在 nn.Linear 中,是如何得到输出的呢?本文发现用最简单的前向神经网络(只有输入层、输出层而没有隐藏层)来解释比较直观。下图 1 的网络结构和代码 1 中的 nn.Linear(2,3) 生成的 Linear(in_features=2, out_features=3, bias=True) 结构是保持一致的。偏置理解起来比较简单,下文中先不考虑偏置。
首先,图1中每个绿色的神经元代表了输入向量的每个分量;每个粉色神经元代表了输出向量的每个分量。输入层的神经元与输出层的神经元之间有单向箭头直线连接,由输入层的神经元指向输出层的神经元。比如,在 神经元 a 0 0 a_0^0 a00 a 1 0 a_1^0 a10 之间有一条直线,而且由前者指向后者,这意味着得到 a 1 0 a_1^0 a10 需要 a 0 0 a_0^0 a00 的信息。但是指向 a 1 0 a_1^0 a10 的神经元不止一个,还有 a 0 1 a_0^1 a01,这意味着只要知道 a 0 0 a_0^0 a00 a 0 1 a_0^1 a01的值和相关参数,就能计算出 a 1 0 a_1^0 a10的值,具体地:
a 1 0 = a 0 0 w 0 0 + a 0 1 w 0 1 a_1^0 = a_0^0w_0^0+a_0^1w_0^1 a10=a00w00+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值