Python 调用';预测发电机';从加载的Keras模型

Python 调用';预测发电机';从加载的Keras模型,python,pandas,tensorflow,machine-learning,keras,Python,Pandas,Tensorflow,Machine Learning,Keras,我训练了一个用于分类图像的双输入神经网络,并将权重保存到hdf5文件中 我现在正在尝试加载这个网络,并使用“predict_generator”查看它在我的测试集上的性能。但是,在调用“predict_generator”时,我得到以下错误: Traceback (most recent call last): File "load_cnn.py", line 75, in <module> pred = loaded_model.predict_generator(

我训练了一个用于分类图像的双输入神经网络,并将权重保存到hdf5文件中

我现在正在尝试加载这个网络,并使用“predict_generator”查看它在我的测试集上的性能。但是,在调用“predict_generator”时,我得到以下错误:

Traceback (most recent call last):
   File "load_cnn.py", line 75, in <module>
     pred = loaded_model.predict_generator(test_gen, steps=36, verbose=1)
   File 
"/home/ppxjm4/anaconda3/envs/ML/lib/python3.7/site-packages/keras/legacy/interfaces.py", 
line 91, in wrapper
     return func(*args, **kwargs)
   File 
"/home/ppxjm4/anaconda3/envs/ML/lib/python3.7/site-packages/keras/engine/training.py", 
line 1772, in predict_generator
     verbose=verbose)
   File 
"/home/ppxjm4/anaconda3/envs/ML/lib/python3.7/site-packages/keras/engine/training_generator.py", 
line 503, in predict_generator
     batch_size = x[0].shape[0]
AttributeError: 'list' object has no attribute 'shape'

如果您的模型有超过1个输入,我建议您尝试从生成器生成dict,而不是列表,下面是keras it self的一个示例(文档字符串为
fit\u generator()
):

def从文件(路径)生成数组:
尽管如此:
打开(路径)作为f:
对于f中的行:
#创建输入数据的numpy数组
#和标签,来自文件中的每一行
x1,x2,y=工艺线(线)
产量({'input_1':x1,'input_2':x2},{'output':y})
model.fit_生成器(从_文件('/my_file.txt')生成_数组,
每_历元的步数=10000,历元=10)

有关更多信息,请参见。

我的问题的解决方案是在使用生成器向模型提供测试数据时修改生成器的输出。当y_col和class_mode设置为None时,flow_from_dataframe方法生成不同维度的数据

def generator_multiple(generator, dataframe, batch_size, img_height, img_width):

    genX1 = generator.flow_from_dataframe(
        dataframe=dataframe, x_col="reconstruction", y_col=None, class_mode=None,
        batch_size=batch_size, shuffle=False, target_size=(img_height, img_width), color_mode='grayscale')

    genX2 = generator.flow_from_dataframe(
        dataframe=dataframe, x_col="observation", y_col=None, class_mode=None,
        batch_size=batch_size, shuffle=False, target_size=(img_height, img_width), color_mode='grayscale')

    while True:
        X1i = genX1.next()
        X2i = genX2.next()
        yield [X1i, X2i]


如果运行完全相同的代码,只使用
fit\u generator
而不是
predict\u generator
,会发生什么情况?以防万一,
yield[[X1i[0],X2i[0]]
也不起作用,对吗?@NatthaphonHongcharoen这给了我一个不同的错误,关于输入维度不是原来的维度expected@TheGuywithTheHat由于我没有给出任何标签,因此仅更改该行代码的尺寸是不正确的。但是,如果我更改该行并使用“测试”生成器,事情会正常进行,这表明加载模型时没有问题什么是
类型(generator\u multiple.next()[0][0])