网站首页 > 技术文章 正文
在学习或编程深度神经网络时,最重要的是以矩阵的形式排列数据。而使用Keras就像将数据以矩阵的形式排列并提供给它一样简单。没有必要定义权重和偏差。
本文是为那些想要使用numpy或低级TensorFlow来编写深度模型的人的指南。
这篇文章描述:
- 我们可以通过多少方式安排输入数据。
- 增加输入和权重的不同方法。
- 如何根据输入数据布局定义权重和偏差。
- 如何使尺寸正确。
- 推广上述尺寸问题,根据层计算权重和偏差的尺寸。
矩阵尺寸:
有两种类型我们可以在矩阵中排列数据:
- 1)将特征排列为列
- 2)将特征排列为行
作为列的特征:
在这种类型中,特征被排列为列,并且样本被排列为行。
例如,具有n特征和1样本的矩阵如下所示:
这得到了Keras和其他在线教程的支持。
行的特征:
在这种类型中,特征排列为行,样本排列为列。
例如,具有n特征和1样本的矩阵如下所示:
这是由Andrew Ng支持的。
矩阵运算:
操作顺序取决于我们如何安排数据。
- 如果数据按列排列的特征: X*W + B
- 如果数据按行排列的特征: W*X + B
其中,W =权重矩阵,X =输入矩阵,B =偏差矩阵
如果输入数据排列发生变化,为什么公式会发生变化?
我们需要将输入乘以其相应的权重并将它们全部相加。
简化为
通常矩阵乘法如下:
注意:为简单起见,请忽略上图中的淡黄色圆点。
想象一下,黄色 =输入,深黄色 =样品-1和红色 =权重。(这里我们按照列排列的特征)
上图代表我们的等式:
因此,如果我们将数据排列为列的特征,我们必须使用X*W+B
同样的事情适用于排列为行的特征(只需反转上述符号,如黄色 =权重,深黄色 =权重对应于样本-1,红色 =样本-1)。
所以,现在我们知道输入排列如何影响我们需要使用的公式。
矩阵的维数:
与Keras不同,在TensorFlow和Numpy中,我们需要定义每个权重和偏差。
现在,基于输入维数和输出维数,我们得到了偏置和权值矩阵的维数。
排列为行的特征:
首先,我们显然决定每层中的层数和节点数。
所以,这里我们已经知道输入层和输出层的矩阵尺寸。
即
第0层有4个输入和6个输出
第1层有6个输入和6个输出
第2层有6个输入和2个输出
第3层有2个输入和2个输出
现在我们只需要计算权重和偏差的尺寸。
我们考虑作为输入和输出维度的排列为列的特征。
一次,计算机每个线程/核心只能使用1个样本。
因此,如果我们有1024个内核(GPU),那么它使用1个样本x 1024
这是我们的基本等式:我们不知道W&B的维度
我们知道1st Matrix列应该等于2nd Matrix行以执行矩阵乘法。
所以,我们用X的列更新W的行。
接下来,我们更新偏差。我们知道Matrix Addition不会更改生成的Matrix维度。因此,B的维数必须等于得到的矩阵Y.
现在,我们只剩下找到W的列。
我们知道矩阵相乘会改变输出矩阵的维数。
因此,当我们将X和W相乘时,结果尺寸必须等于B才能执行矩阵加法。
我们得到了Layer-1的尺寸。
对于Layer-2和Layer-3:
最后我们得到了带有1x2维的输出Y。
推广上述方法:
我们可以推广上述方程式来计算基于层的尺寸。
为此,我们只考虑计算的层和Layer-0不需要任何计算,因为它是输入层。
如果我们观察上面的3个方程,我们可以看到模式:
以列排列的特征:
基本方程式:
对于权重:
对于偏差:
其中n = 1,2,3 ......,输出层数
排列为行的特征:
基本方程式:
对于权重:
对于偏差:
其中n = 1,2,3 ......,输出层数。
我们可以看到“特征排列为行”的W&B维度只是“以列排列的特征”的W&B的转置。
那么,使用哪一个?功能排列为列或行?
使用按列排列的特征非常有意义。
因为,默认情况下,W是权重向量,在数学中,向量被视为列,而不是行。
要正确地将两者相乘并在正确的特征中使用正确的权重,您必须使用X * W + B :
通过X * W将每个特征乘以其相应的权重并添加B,您可以在每个预测中添加偏差项。
这就是像Keras这样的框架使用这种表示法的原因。因此,我们被迫遵循排列为输入列的特征。如果我们使用低级TensorFlow,那么我们可以使用我们想要的符号,因为我们执行计算并明确定义权重和偏差。
- 上一篇: 玩转张量点乘和变形(张量的运算规则及意义)
- 下一篇: 形象直观的“2X2矩阵”乘法运算的本质原理
猜你喜欢
- 2024-09-26 人工智能数学基础----矩阵(人工智能a算法)
- 2024-09-26 机器学习之线性代数速查表(线性代数快速入门)
- 2024-09-26 谈谈矩阵的运算(矩阵及其运算的性质)
- 2024-09-26 巧用python的矩阵运算来进行电路的计算和分析
- 2024-09-26 计算机图形中的矩阵(计算机的矩阵怎么用)
- 2024-09-26 形象直观的“2X2矩阵”乘法运算的本质原理
- 2024-09-26 玩转张量点乘和变形(张量的运算规则及意义)
- 2024-09-26 python与线性代数 矩阵的运算(python做线性代数)
- 2024-09-26 矩阵加法与数乘的应用——灰度矩阵的凸组合对应灰度图的合成
- 2024-09-26 NumPy最生动形象的教程(numpy技巧)
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 573℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 513℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 469℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 449℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 447℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)