我使用Autokeras训练了我的模型,训练完成后,我将其保存为纯Keras的h5文件。
我的模型:
from autokeras import ImageClassifierfrom autokeras.image.image_supervised import load_image_datasetif __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_modelfrom keras.preprocessing import imageimport numpy as npimport globfrom keras.preprocessing.image import ImageDataGeneratorfrom sklearn.metrics import confusion_matrix# dimensions of our imagesimg_width, img_height = 128, 128# load the model we savedmodel = 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]]
例如。
我做错了什么?
回答:
在@人名建议我关于激活函数后,我在GitHub上找到了这个讨论这里
这个讨论帮助我理解了以下几行代码:
keras_model = load_model('model.h5')x = keras_model.outputx = Activation('softmax', name='activation_add')(x)new_model = Model(keras_model.input, x)