我正在尝试运行代码
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,并且还在互联网上搜索了可能的解决方案,但没有一个解决。有人可以帮我从这里出去吗?谢谢
答案 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。