Keras Dense 层的输入没有被扁平化
- 2025-02-05 13:24:00
- admin 原创
- 86
问题描述:
这是我的测试代码:
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,则在与内核进行初始点积之前将其展平。
当输出被重塑时?
解决方案 1:
目前,与文档中所述相反,该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()
模型摘要:
_________________________________________________________________
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
更新。以下是上述示例的直观说明:
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD