所以据我了解,Dense几乎是 Keras 说矩阵乘法的方式。
概括:
每当我们说Dense(512, activation='relu', input_shape=(32, 32, 3))
,我们真正的意思是执行矩阵乘法以产生一个期望最后一维为512的输出矩阵。
翻译中丢失的是512只是所需输出的一部分,而不是整个画面。Keras 会看到输入形状和 Dense 形状,并自动确定您要执行矩阵乘法。
示例 1:
让我们看看Dense(512, activation='relu', input_shape=(32, 32, 3))
。
矩阵乘法:
(None, 32, 32, 3) * (3, 512)
解释:
None
是模型训练时确定的图片数量,所以现在无所谓。
(..., 32, 32, 3)
是input_shape
在Dense(...)
(3, 512)
来自 Keras,看到您将最后一个维度作为 a(..., ..., ..., 3)
作为您的input_shape
. 因此,Keras 采用最后一个3
并将其与 相结合,512
得到最终的形状(3, 512)
。Taa-daa,自动魔法解释道。
结果是:
(None, 32, 32, 512)
这是因为这两个3
s 由于矩阵乘法而相互抵消。
正如Param #
grovina(3 * 512) + 512 = 2048
的回答所指出的那样。这是因为这个等式:
input * weights + bias
input
将是3
(也就是每个神经元的参数数)
weights
将是512
(又名神经元数量)
bias
将是512
(也就是每个神经元一个偏差)
示例 2:
让我们对Dense(10, activation='softmax')
.
矩阵乘法:
(None, 32, 32, 512) * (512, 10)
解释:
None
现在没关系。
(..., 32, 32, 512)
是input_shape
从第一个来的Dense(...)
(512, 10)
来自 the 的最后一个维度input_shape
和10
第二个中指定的Dense(...)
结果是:
(None, 32, 32, 10)
两者512
抵消。
Param #
是 (512 * 10) + 10 = 5130
input
将是512
(也就是每个神经元的参数数)
weights
将是10
(又名神经元数量)
bias
将是10
(也就是每个神经元一个偏差)