拼合层与输入不兼容

时间:2019-12-09 08:22:36

标签: machine-learning deep-learning flatten

我正在尝试运行代码

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是形状为numpy的数组(3280977,400)。我正在使用keras 2.1.4和tensorflow 1.5。

但是,这会引发以下错误

  

ValueError:输入0与flatten_1层不兼容:预期的min_ndim = 3,找到的ndim = 2

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

2 个答案:

答案 0 :(得分: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

  

来自tensorflow导入keras

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

答案 1 :(得分:0)

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

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

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

模拟批处理轴非常简单,您可以使用numpy来实现:

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