展平层与输入不兼容

Flatten layer incompatible with input

我正在尝试运行代码

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 incompatible with layer flatten_1: expected min_ndim=3, found ndim=2

我该如何解决?我尝试更改展平层中的 input_shape 并在互联网上搜索可能的解决方案,但其中 none 已解决。有人可以帮我从这里出去吗?谢谢

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

您必须 'simulate' 批量索引维度。

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

模拟batch axis很简单,可以用numpy来实现:

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

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

的代码
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)

我做的改变是我替换了

import keras

from tensorflow import keras

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