为什么 Tensorflow/Keras Flatten 层没有展平我的阵列?

Ete*_*Via 0 python numpy keras tensorflow

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

为什么我的展平层不输出 16x1 张量?

Nic*_*ais 5

那是因为该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)
Run Code Online (Sandbox Code Playgroud)
(32, 784)
Run Code Online (Sandbox Code Playgroud)

如果您打算使用 shape 将一个观察结果展平(4, 4),您应该添加一个批处理维度以使其工作:

X = tf.constant(np.random.random((1, 4, 4)),dtype=tf.float32)
Xf = flayer(X)
print(Xf.shape)
Run Code Online (Sandbox Code Playgroud)
(1, 16)
Run Code Online (Sandbox Code Playgroud)