大家好！欢迎学习“深度学习工具 PyTorch”课程
在这节课 我将演示
如何使用 PyTorch 构建神经网络并训练网络
在 notebook 里学习并练习完之后
你将自己编写代码来构建网络
这节课的目标是
构建一个图像分类器
但首先我们会学习基础知识
那么 如何在 PyTorch 中构建一个简单的神经网络？
回顾下神经网络的工作原理
这里有一些输入值 例如 x1 x2
我们用它们乘以权重 w 和偏差
这个 b 表示偏差 我们乘以 1
将这几个值相加得出 h 然后是激活函数
即这里的 f(h)
将这些输入值之和 h 传入激活函数 得出输出 y
这就是神经网络的基本原理
这些是输入
乘以某些权重
传入激活函数 得出输出
你可以继续堆叠这个结构
将这些单元（神经元）的输出传入采用另一组权重的另一个层级
数学公式是这样的
输出 y 等于权重 w 和输入值 x
及偏差值 b 的线性组合
然后放入激活函数 f 里并得出 y
也可以写成这样的求和公式
w^i 乘以 x^i 的和加上偏差项 b
得出 y
这个公式的好处是
可以将输入特征（值）x 当做向量
并将权重当做另一个向量
因此这里的相乘求和与两个向量的点积/内积是相同的
如果将输入和权重当做向量
可以对这两个向量求点积
然后得出值 h
并将 h 传入激活函数里 得出输出 y
现在我们将权重和输入值当做向量
向量是一种张量
张量是向量和矩阵的泛化形式
这些是普通的数据结构
一维张量是向量
这是一个一维值数组
这里是字符 ‘t’ ‘e’ ‘n’ ‘s’ ‘o’ ‘r’
像这样的矩阵是二维张量
这些值按从左到右和从上到下这两个方向排列
它们分别是行和列
你可以沿着一行对列执行操作
或沿着一列对行执行操作
这个是三维张量
可以看做三维的 RGB 彩色图像
对于每个像素
所有的红绿蓝通道
都有某个值
因此在二维图像中
每个像素都有三个值
这就是三维张量
正如我刚刚提到的 张量是一种泛化形式
因此可以有四维
五维 六维张量等等
但是我们通常处理的是
一维 二维和三维张量
这些张量是
pyTorch 和其他神经网络框架中的基本数据结构
TensorFlow 就是根据张量命名的
这些就是你要使用的基本数据结构
你必须熟练掌握它们
才能够使用
深度学习框架
我们开始吧我将演示如何创建张量
并使用它们构建简单的神经网络
首先 我们将导入 PyTorch 在这里输入 import torch
我在这里创建了激活函数
这是 S 型激活函数
它是一个完美的 S 型图形 将输入值压缩到了 0 和 1 之间
非常适合提供概率值
概率值只能位于 0 到 1 之间
因此 如果你希望
神经网络的输出为概率
则建议使用 S 型激活函数
我将创建一些虚拟数据 生成一些权重和偏差
你将使用这些虚拟值进行计算
并获得简单神经网络的输出
在这里创建 manual_seed()
设置将要使用的随机数
在这里创建特征
特征是指网络的输入特征/输入数据
这里是 torch.randn()
randn 将创建由正态变量组成的张量
即来自正态分布的随机正态变量
指定元组大小
这里我希望特征是一个矩阵
即包含 1 行和 5 列的二维张量
可以将它看做有 5 个元素的行向量
对于矩阵 我们将创建另一个矩阵
并使用随机正态变量 这次我将使用 randn_like
它的原理是
传入一个张量并查看该张量的形状
然后创建形状相同的另一个张量
这就是这个“like”的含义
我将使用随机正态变量创建一个张量
形状和 features 张量的一样这就是权重
然后我将创建偏差项
还是随机正态变量
现在我只创建一个值
这是 1 行和 1 列
现在布置一道练习题
你需要根据特征 权重
和偏差张量
计算这个简单神经网络的输出
注意 你需要对特征和权重求内积
即将特征和权重相乘并求和
然后加上偏差项
最后传入激活函数 得出网络的输出
如果你想查看我是如何实现的
请参阅我的 solution notebook
或者观看下个视频 我会讲解这道练习的答案