平层与输入不兼容

问题描述 投票:0回答:2

我正在尝试运行代码

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,并且还在互联网上搜索了可能的解决方案,但没有一个解决。有谁可以帮我离开这里吗?谢谢

machine-learning deep-learning flatten
2个回答
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)

我所做的更改已替换为我

import keras

来自tensorflow导入keras

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


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。

© www.soinside.com 2019 - 2024. All rights reserved.