Keras Dense图层的输入未展平

yad*_*sun 5 python machine-learning keras tensorflow keras-layer

这是我的测试代码:

from keras import layers
input1 = layers.Input((2,3))
output = layers.Dense(4)(input1)
print(output)
Run Code Online (Sandbox Code Playgroud)

输出是:

<tf.Tensor 'dense_2/add:0' shape=(?, 2, 4) dtype=float32>
Run Code Online (Sandbox Code Playgroud)

但是什么是重要的?

文件说:

注意:如果图层的输入的排名大于2,则在使用内核的初始点积之前将其展平.

输出重塑了吗?

tod*_*day 15

目前,与文档中所述相反,该Dense应用于输入张量的最后一个轴:

与文档相反,我们实际上并没有将其扁平化.它独立应用于最后一个轴.

换句话说,如果在输入张量的形状上应用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()
Run Code Online (Sandbox Code Playgroud)

模型摘要:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 20, 10)            60        
=================================================================
Total params: 60
Trainable params: 60
Non-trainable params: 0
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

如您所见,该Dense图层只有60个参数.怎么样?在每个单元Dense层连接到与输入的每行的5个元素相同的权重,因此10 * 5 + 10 (bias params per unit) = 60.