这是我的测试代码:
from keras import layers
input1 = layers.Input((2,3))
output = layers.Dense(4)(input1)
print(output)
输出为:
<tf.Tensor 'dense_2/add:0' shape=(?, 2, 4) dtype=float32>
但是会发生什么?
文档说:
注意:如果该图层的输入的秩大于2,则为 在具有内核的初始点积之前变平。
输出会被重塑吗?
答案 0 :(得分:9)
当前,与文档中所述相反,Dense
层is applied on the last axis of input tensor:
与文档相反,我们实际上并未对其进行拼合。它的 单独应用于最后一个轴。
换句话说,如果将具有Dense
单位的m
层应用于形状为(n_dim1, n_dim2, ..., n_dimk)
的输入张量,则其输出形状为(n_dim1, n_dim2, ..., m)
。
作为旁注::这使TimeDistributed(Dense(...))
和Dense(...)
彼此等效。
另一注:请注意,这具有共享权重的作用。例如,考虑以下玩具网络:
model = Sequential()
model.add(Dense(10, input_shape=(20, 5)))
model.summary()
模型摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 20, 10) 60
=================================================================
Total params: 60
Trainable params: 60
Non-trainable params: 0
_________________________________________________________________
如您所见,Dense
层只有60个参数。怎么样? Dense
层中的每个单位都连接到输入中每行的5个元素,且权重相同,因此为10 * 5 + 10 (bias params per unit) = 60
。
更新。这是上面示例的直观图示: