深度学习-全连接层
本篇文章将讲述关于全连接层的一些基本概念。首先将完全连接的层视为具有以下属性的黑匣子:在正向传播上1.具有3个输入(输入信号,权重,偏置)2.具有1个输出,关于反向传播1.具有1个输入(dout),其大小与输出相同。2.具有3个(dx,dw,db)输出,其大小与输入相同。
计算图的观点
为了发现每个输入如何影响输出(反向传播),最好将算法表示为计算图:
扩大批量
到目前为止,所有示例都只处理输入中的单个元素,但是通常一次我们只处理一个以上的示例。 例如,在GPU上通常同时具有256张图像的批处理。 诀窍是将输入信号表示为2d矩阵[NxD],其中N是批处理大小,D是输入信号的大小。 因此,如果您考虑每个数字为28x28x1(灰度)的CIFAR数据集,则图像D为784,因此如果我们在同一批次上有10个数字,则输入为[10x784]。
为了便于讨论,让我们考虑先前的样本,其中向量X表示为,如果我们想拥有一批4个元素,我们将拥有:
在这种情况下,必须以支持该矩阵乘法的方式表示W,因此根据其创建方式,可能需要对其进行转置。
继续向前传播将计算为:
这里要注意的一点是,该偏置已重复了4次以适应乘积X.W,在这种情况下将生成矩阵[4x2]。 在matlab上,命令“ repmat”完成了这项工作。 在python上,它会自动执行。
使用符号引擎
在转到实现之前,最好先验证在Matlab或Python(符号)符号引擎上的操作。 在手动编码功能之前,这将有助于可视化和探索结果。
Matlab上的符号向后传播
现在我们还要确认反向传播公式。 在Matlab上观察将表达式转换为的函数“ latex”:
输入张量
我们的库将处理图像,并且大多数时候我们将同时处理数百个图像的矩阵运算。 因此,我们必须找到一种表示它们的方法,这里我们将一批图像表示为4d张量或3d矩阵的数组。 在下面,我们有一批4张RGB图片(宽度:160,高度:120)。 我们将它们加载到matlab / python上,并将它们组织成一个4d矩阵:
观察到在matlab中图像变成了120x160x3的矩阵。 我们的张量将是120x160x3x4,在Python上,将图像存储在张量上之前,我们先进行转置,将图像120x160x3转换为3x120x160,然后存储在张量4x3x120x160上。