Python 3.x 权矩阵最终完全连通层

Python 3.x 权矩阵最终完全连通层,python-3.x,tensorflow,conv-neural-network,Python 3.x,Tensorflow,Conv Neural Network,我想我的问题太简单了,但它让我头疼。我想我在神经网络的概念上遗漏了一些东西,或者Tensorflow返回了一些错误的层 我有一个网络,其中最后一层输出4800个单位。倒数第二层有2000个单位。我希望最后一层的权重矩阵具有形状(48002000),但当我在Tensorflow中打印出形状时,我看到了(20004800)。请有人确认最后一层应该是什么形状的权重矩阵?根据答案,我可以进一步调试该问题。谢谢 从概念上讲,神经网络层的编写方式通常类似于y=W*x,其中*是矩阵乘法,x是输入向量,y是输出

我想我的问题太简单了,但它让我头疼。我想我在神经网络的概念上遗漏了一些东西,或者Tensorflow返回了一些错误的层


我有一个网络,其中最后一层输出4800个单位。倒数第二层有2000个单位。我希望最后一层的权重矩阵具有形状(48002000),但当我在Tensorflow中打印出形状时,我看到了(20004800)。请有人确认最后一层应该是什么形状的权重矩阵?根据答案,我可以进一步调试该问题。谢谢

从概念上讲,神经网络层的编写方式通常类似于
y=W*x
,其中*是矩阵乘法,
x
是输入向量,
y
是输出向量。如果
x
有2000个单位和y4800个单位,那么实际上
W
应该有大小
(4800,2000)
,即4800行和2000列

然而,在实现中,我们通常处理一批输入
X
。假设
X
(b,2000)
其中
b
是批量大小。我们不希望通过如上所述执行
W*X
来分别变换
X
的每个元素,因为这样做效率很低。
相反,我们希望同时转换所有输入。这可以通过
Y=X*W.T
实现,其中
W.T
W
的转置。您可以计算出这实际上适用于
W*x
的每一行
x
(即每个输入)
Y
是一个
(b,4800)
矩阵,包含所有转换的输入


在Tensorflow中,权重矩阵简单地保存在这种转置状态中,因为它通常是需要的形式。因此,我们有一个形状为
(20004800)
(形状为
W.T
)的矩阵。

按照惯例,向量是行向量,而不是列向量。请您对答案进行一点扩展,从倒数第二层的2000个单位扩展到输出层的4800个单位,对吗?在这种情况下,重量的形状将是(20004800)很好的解释,谢谢!所以,如果我有一批
1
,输出形状是
(14800)
,我需要将它与权重矩阵相乘
(2000,4800)
,我可以将权重矩阵转置相乘,输出将是
(1,2000)
,这是正确的吗?另外,我正在寻找一个
4800
-向量作为输出,在这种情况下,我想我可以添加另一个层,该层将具有
4800
输入(上一层的输出)和
4800
输出。然后,我的新权重矩阵将是
(48004800)
然后我应该乘以转置矩阵还是原始
4800x4800
矩阵?从上面继续,我所做的这些操作是在测试图像的现有网络上进行的。因此,我获取测试图像,获得最后一层和权重矩阵的输出,然后执行矩阵运算以进一步转换该输出。如果输入/输出维度相同,则无需转置任何内容,因为您的网络将自行学习权重矩阵的语义(假设您正在训练自己的权重)。因此,如果你有一个(48004800)矩阵的层
W
,你可以1)使用
X*W
,或者2)使用
X*W.T
——在后一种情况下,网络将简单地学习与第一种情况相比的
W
转置值。唯一重要的是尺寸正确,允许矩阵乘法。非常感谢您的帮助。