所以据我了解,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)
这是因为这两个3s 由于矩阵乘法而相互抵消。
正如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(也就是每个神经元一个偏差)