【问题标题】:Flatten layer incompatible with input展平层与输入不兼容
【发布时间】:2019-12-09 08:22:36
【问题描述】:

我正在尝试运行代码

import data_processing as dp
import numpy as np
test_set = dp.read_data("./data2019-12-01.csv")
import tensorflow as tf
import keras

def train_model():
    autoencoder = keras.Sequential([
        keras.layers.Flatten(input_shape=[400]),
        keras.layers.Dense(150,name='bottleneck'),
        keras.layers.Dense(400,activation='sigmoid')
    ])
    autoencoder.compile(optimizer='adam',loss='mse')
    return autoencoder

trained_model=train_model()
trained_model.load_weights('./weightsfile.h5')
trained_model.evaluate(test_set,test_set)

第 3 行中的 test_set 是形状为 (3280977,400) 的 numpy 数组。我正在使用 keras 2.1.4 和 tensorflow 1.5。

但是,这会引发以下错误

ValueError: Input 0 is in compatible with layer flatten_1: expected min_ndim=3, found ndim=2

我该如何解决?我尝试更改 flatten 层中的 input_shape 并在互联网上搜索可能的解决方案,但没有一个解决。有谁可以帮我离开这里吗?谢谢

【问题讨论】:

    标签: machine-learning deep-learning flatten


    【解决方案1】:

    经过多次反复试验,我能够运行代码。这是运行的代码:-

    import data_processing as dp
    import numpy as np
    test_set = np.array(dp.read_data("./datanew.csv"))
    print(np.shape(test_set))
    import tensorflow as tf
    from tensorflow import keras
    # import keras
    def train_model():
        autoencoder = keras.Sequential([
            keras.layers.Flatten(input_shape=[400]),
            keras.layers.Dense(150,name='bottleneck'),
            keras.layers.Dense(400,activation='sigmoid')
        ])
        autoencoder.compile(optimizer='adam',loss='mse')
        return autoencoder
    
    trained_model=train_model()
    trained_model.load_weights('./weightsfile.h5')
    trained_model.evaluate(test_set,test_set)
    

    我所做的改变是我替换了

    导入 keras

    从张量流导入 keras

    这可能也适用于使用旧版本 tensorflow 和 keras 的其他人。我在代码中使用了 tensorflow 1.5 和 keras 2.1.4。

    【讨论】:

      【解决方案2】:

      Keras 和 TensorFlow 只接受批量输入数据进行预测

      您必须“模拟”批次索引维度。

      例如,如果您的数据具有 (M x N) 形状,则您需要在预测步骤中输入一个 (K x M x N) 形式的张量,其中 K 是 batch_dimension。

      模拟batch轴很容易,你可以使用numpy来实现:

      使用:np.expand_dims(axis = 0),对于形状为 M x N 的输入张量,您现在的形状为 1 x M x N。这就是为什么会出现错误,即缺少“1”或“K”,即第三维那是batch_index吗?

      【讨论】:

      • 我添加了test_set = np.expand_dims(test_set, axis=0),但现在也显示相同的错误
      • 尝试仅使用测试集的一个样本进行测试。如果您在更改维度时遇到完全相同的问题,那么您提供数据的方式显然是一个问题。
      • 使用一个输入样本进行测试,确保您的 expand_dims 正确。
      猜你喜欢
      • 1970-01-01
      • 2022-08-23
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2021-07-04
      • 2020-11-28
      • 2021-05-31
      相关资源
      最近更新 更多