从加载的 Keras 模型调用“predict_generator”时出现属性错误

jm22b

我已经训练了一个双输入神经网络来对图像进行分类并将权重保存到一个 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'

我很困惑为什么它在这里抱怨,在训练和调用 'fit_generator()' 似乎工作得很好时。

这是我生成错误的代码:

import os
import pandas as pd
import numpy as np

import keras
from keras import optimizers
from keras.utils import to_categorical
from keras.layers import Input, Dense, Flatten, Dropout, Conv2D, MaxPooling2D, GlobalAveragePooling2D, Activation, concatenate
from keras.layers.advanced_activations import LeakyReLU
from keras.layers.normalization import BatchNormalization
from keras.models import Model
from keras.callbacks import ModelCheckpoint, ReduceLROnPlateau

from keras_preprocessing.image import ImageDataGenerator

train_df = pd.read_pickle("collated_data.pkl")
train_df = train_df.sample(frac=1)

data_gen = ImageDataGenerator(rescale=1./255)

from keras.models import model_from_json

json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()

loaded_model = model_from_json(loaded_model_json)
loaded_model.load_weights("weights.best.hdf5")

print("loaded model from disk!")

loaded_model.compile(loss='categorical_crossentropy', optimizer='Adadelta', metrics=['accuracy'])

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

    if mode == 'train':

        genX1 = generator.flow_from_dataframe(
            dataframe=dataframe[:79000], x_col='reconstruction', y_col='label', class_mode='categorical',
            batch_size=batch_size, shuffle=False, target_size=(img_height, img_width), color_mode='grayscale')

        genX2 = generator.flow_from_dataframe(
            dataframe=dataframe[:79000], x_col='observation', y_col='label', class_mode='categorical',
            batch_size=batch_size, shuffle=False, target_size=(img_height, img_width), color_mode='grayscale')

    if mode == 'validate':

        genX1 = generator.flow_from_dataframe(
            dataframe=dataframe[79000:85000], x_col='reconstruction', y_col='label', class_mode='categorical',
            batch_size=batch_size, shuffle=False, target_size=(img_height, img_width), color_mode='grayscale')

        genX2 = generator.flow_from_dataframe(
            dataframe=dataframe[79000:85000], x_col='observation', y_col='label', class_mode='categorical',
            batch_size=batch_size, shuffle=False, target_size=(img_height, img_width), color_mode='grayscale')

    if mode == 'test':

        genX1 = generator.flow_from_dataframe(
            dataframe=dataframe[85000:], 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[85000:], 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[0], X2i[0]], X2i[1]]


test_gen = generator_multiple(data_gen, dataframe=train_df, mode='test', batch_size=36,
                               img_height=100, img_width=100)

pred = loaded_model.predict_generator(test_gen, steps=36, verbose=1)

predicted_class_indices = np.argmax(pred, axis=1)
labels = (train_gen.class_indices)
labels = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class_indices]

filenames=test_gen.filenames
results=pd.DataFrame({"Filename":filenames,
                      "Predictions":predictions})
results.to_csv("results.csv",index=False)

jm22b

我的问题的解决方案是在使用生成器将测试数据提供给模型时修改生成器的输出。当 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]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用theano后端加载keras模型时出现断言错误

来自分类Dev

编译加载的模型时出现 Keras ValueError

来自分类Dev

如何加载Keras模型?

来自分类Dev

在Keras中加载模型

来自分类Dev

在 keras 中加载模型

来自分类Dev

如何加载微调的Keras模型

来自分类Dev

尝试在Keras中加载顺序模型时出现“ KeyError:0”

来自分类Dev

加载包含 Lambda 层的 Keras 模型时出现 AttributeError

来自分类Dev

在[Google App Engine]中加载Keras模型

来自分类Dev

TFF加载预训练的Keras模型

来自分类Dev

Keras加载模型后精度低

来自分类Dev

Keras 加载的模型不起作用

来自分类Dev

Keras加载的png出现全黑

来自分类Dev

保存和加载Tensorflow模型导致Keras错误

来自分类Dev

在Keras中从.hdf5加载模型权重时出错

来自分类Dev

当训练时使用的keras版本未知时,如何使用版本不匹配错误加载Keras模型

来自分类Dev

Keras:使用 predict_generator 预测新值

来自分类Dev

Keras加载彩色图像

来自分类Dev

Keras Architecture对于保存和加载的模型而言是不同的

来自分类Dev

使用自定义方法保存/加载Keras模型

来自分类Dev

如何加载另存为.pb的Keras模型

来自分类Dev

由于使用“ lambda”,因此无法加载保存的Keras模型

来自分类Dev

加载预训练的 Keras 模型并进行预测

来自分类Dev

通过加载和保存权重来继续训练 Keras 模型

来自分类Dev

您能解释keras模型中的tensorflow加载和hdf5加载之间的区别吗

来自分类Dev

Keras 权重文件加载异常:将 2 层加载到具有 0 层的模型中

来自分类Dev

在Deeplearning4j中加载keras模型时出错-Java

来自分类Dev

当将keras模型加载到tensorjs中时,它变得完全不准确

来自分类Dev

NameError:在加载 keras 模型时未定义名称“feature_extractor_url”

Related 相关文章

  1. 1

    使用theano后端加载keras模型时出现断言错误

  2. 2

    编译加载的模型时出现 Keras ValueError

  3. 3

    如何加载Keras模型?

  4. 4

    在Keras中加载模型

  5. 5

    在 keras 中加载模型

  6. 6

    如何加载微调的Keras模型

  7. 7

    尝试在Keras中加载顺序模型时出现“ KeyError:0”

  8. 8

    加载包含 Lambda 层的 Keras 模型时出现 AttributeError

  9. 9

    在[Google App Engine]中加载Keras模型

  10. 10

    TFF加载预训练的Keras模型

  11. 11

    Keras加载模型后精度低

  12. 12

    Keras 加载的模型不起作用

  13. 13

    Keras加载的png出现全黑

  14. 14

    保存和加载Tensorflow模型导致Keras错误

  15. 15

    在Keras中从.hdf5加载模型权重时出错

  16. 16

    当训练时使用的keras版本未知时,如何使用版本不匹配错误加载Keras模型

  17. 17

    Keras:使用 predict_generator 预测新值

  18. 18

    Keras加载彩色图像

  19. 19

    Keras Architecture对于保存和加载的模型而言是不同的

  20. 20

    使用自定义方法保存/加载Keras模型

  21. 21

    如何加载另存为.pb的Keras模型

  22. 22

    由于使用“ lambda”,因此无法加载保存的Keras模型

  23. 23

    加载预训练的 Keras 模型并进行预测

  24. 24

    通过加载和保存权重来继续训练 Keras 模型

  25. 25

    您能解释keras模型中的tensorflow加载和hdf5加载之间的区别吗

  26. 26

    Keras 权重文件加载异常:将 2 层加载到具有 0 层的模型中

  27. 27

    在Deeplearning4j中加载keras模型时出错-Java

  28. 28

    当将keras模型加载到tensorjs中时,它变得完全不准确

  29. 29

    NameError:在加载 keras 模型时未定义名称“feature_extractor_url”

热门标签

归档