【问题标题】:Why isn't Tensorflow/Keras Flatten layer flattening my array?为什么 Tensorflow/Keras Flatten 层不能展平我的阵列?
【发布时间】:2020-12-22 19:05:02
【问题描述】:

我正在尝试在模型外部使用 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 张量?

【问题讨论】:

    标签: python numpy tensorflow keras


    【解决方案1】:

    这是因为Flatten() 层假定第一个维度是样本数,因此它返回 4 个展平的行。您已经有 4 个观测值和每个观测值的 1D 输入。例如,如果您有形状为 (32, 28, 28, 1) 的数据,它的行为会有所不同,它的每一行都有更高的维度。

    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)
    

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

    X = tf.constant(np.random.random((1, 4, 4)),dtype=tf.float32)
    Xf = flayer(X)
    print(Xf.shape)
    
    (1, 16)
    

    【讨论】:

      猜你喜欢
      • 2018-12-22
      • 2016-03-17
      • 2020-06-16
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      相关资源
      最近更新 更多