machine-learning - “predict_generator”返回大于 1 且小于 0 的值

标签 machine-learning keras deep-learning auto-keras

我使用 Autokeras 来训练我的模型,然后使用 fit_final 将其保存为纯 keras h5 文件。

我的模型:

from autokeras import ImageClassifier
from autokeras.image.image_supervised import load_image_dataset

if __name__ == '__main__':
    x_test, y_test = load_image_dataset(csv_file_path="test/label.csv", images_path="test")
    print(x_test.shape)
    print(y_test.shape)

    x_train, y_train = load_image_dataset(csv_file_path="train/label.csv", images_path="train")
    print(x_train.shape)
    print(y_train.shape)

    clf = ImageClassifier(path="~/automodels/", verbose=True)
    clf.fit(x_train, y_train, time_limit= 1 * 10 * 60)
    clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
    y = clf.evaluate(x_test, y_test)
    print(y)

    clf.export_autokeras_model('my_autokeras_model.h5ak')
    clf.export_keras_model('my_model.h5')

我还有一个 Predict.py 代码,但它给了我错误的值

from keras.models import load_model
from keras.preprocessing import image
import numpy as np
import glob
from keras.preprocessing.image import ImageDataGenerator
from sklearn.metrics import confusion_matrix

# dimensions of our images
img_width, img_height = 128, 128

# load the model we saved
model = load_model('model.h5')
#model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

datagen = ImageDataGenerator(rescale=1./255)

generator = datagen.flow_from_directory(
        'data/test',
        target_size=(img_width, img_height),
        batch_size=1,
        class_mode=None,  # only data, no labels
        shuffle=False)  # keep data in same order as labels

#filenames = datagen.filenames
#nb_samples = len(filenames)

probabilities = model.predict_generator(generator, 4)

实际结果:

[[-2.0996048  1.862035 ]
 [-1.4634153  1.2710633]
 [-1.4367918  1.4041075]
 [-1.3242773  1.2946494]]

预期结果应如下所示:

[[0  0.51234 ]
 [1  0.67847]
 [1  0.92324]
 [1  0.32333]]

例如。

我做错了什么?

最佳答案

在Mickey向我建议了激活函数之后,我在github上找到了这个帖子here

这个线程帮助我弄清楚了这些代码行:

keras_model = load_model('model.h5')
x = keras_model.output
x = Activation('softmax', name='activation_add')(x)
new_model = Model(keras_model.input, x)

关于machine-learning - “predict_generator”返回大于 1 且小于 0 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54480986/

相关文章:

python - 如何使用自定义 SVM 内核?

amazon-web-services - AWS SageMaker 数据准备

python - 如何检查 keras 分类器/神经网络训练的类别?

python - CNN 训练准确度与 BatchNorm 停滞不前,在没有 BatchNorm 的情况下快速过度拟合

apache-spark - ALS模型增量训练

python - TensorFlow:tf.train.batch 中 dequeue_up_to 比 dequeue_many 慢吗?

python - 我如何知道哪个预测针对哪个数据?那么,如何评估预测呢?

python - output_graph.pb 上的 tf.GraphKeys.TRAINABLE_VARIABLES 导致空列表

python - 加载keras权重直到特定层

python - 如何将 Keras 模型保存为卡住图?