为什么Tensorflow/KerasFlatten层没有展平我的阵列?
我正在尝试使用tensorflow.keras.layers.Flatten模型外部的层来展平 4x4 张量。我不明白为什么该Flatten层实际上没有展平我的阵列。
这是我的代码:
import tensorflow as tf
import numpy as np
flayer = tf.keras.layers.Flatten()
X = tf.constant(np.random.random((4,4)),dtype=tf.float32)
Xf = flatten_layer(X)
print(Xf)
并print(Xf)显示
tf.Tensor(
[[0.9866459 0.52488756 0.86211777 0.06254051]
[0.32552275 0.23201537 0.8646714 0.80754006]
[0.55823076 0.51929855 0.538077 0.4111973 ]
[0.95845264 0.14468837 0.30223057 0.09648433]], shape=(4, 4), dtype=float32)
为什么我的展平层不输出 16x1 张量?
回答
那是因为该Flatten()层假定第一个维度是样本数,因此它返回 4 个展平的行。您已经有 4 个观察值和 1D 输入。(32, 28, 28, 1)例如,如果您的数据具有 shape ,则其行为会有所不同,例如,每行具有更高的维度。
import tensorflow as tf
import numpy as np
flayer = tf.keras.layers.Flatten()
X = tf.constant(np.random.random((32, 28, 28, 1)),dtype=tf.float32)
Xf = flayer(X)
print(Xf.shape)
(32, 784)
如果您打算使用 shape 将一个观察结果展平(4, 4),您应该添加一个批处理维度以使其工作:
X = tf.constant(np.random.random((1, 4, 4)),dtype=tf.float32)
Xf = flayer(X)
print(Xf.shape)
(1, 16)