我刚刚在python3.6上安装了autokeras。修复一些错误后,它可以很好地工作,我可以使用数据集训练模型。 训练后,我得到一个模型,精度为0.991,损失为0.06。借助预测功能,它几乎可以毫无故障地对我的测试数据集进行分类。 但是,当我导出并将其另存为keras模型时,该模型的性能确实很差。它将所有内容错误地分类,并且预测函数仅返回随机的小数,而不返回预期类的编号。 我想我只是缺少一些命令,因为图像分类器工作良好。 任何帮助或提示都将非常好。
编辑: 我基本上遵循https://autokeras.com/start/上的示例。我将数据预处理为形状(n,150、150、3),范围在0到1之间。每个图像的代码如下:
img='/home/example_image.png'
x=image.img_to_array(image.load_img(img, target_size=(150, 150)))
x=x.reshape(1, 150, 150, 3)
x = x.astype('float32') / 255
我也尝试使用50x50形状的图像,因为autokeras似乎在较小形状下效果更好。我的标签是长度为n的列表。然后,我使用网站上的代码:
clf = ImageClassifier(verbose=True)
clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
y = clf.evaluate(x_test, y_test)
print(y)
它返回了一个非常好的模型,具有很高的准确性和很小的损失。我无法显示输出的屏幕截图,因为我目前在家里,而我的笔记本电脑太虚弱,无法重现此问题。当我使用以下命令时:
clf.predict(example_img)
我还得到了图像中对象数量正确的结果。 当我尝试使用他们网站上给出的命令导出模型时,我的问题就开始了:
from autokeras import ImageClassifier
clf = ImageClassifier(verbose=True, augment=False)
clf.load_searcher().load_best_model().produce_keras_model().save('my_model.h5')
此后,我加载模型。
import keras
from keras.models import load_model
model = load_model('my_model.h5')
它给了我一些错误:
“ UserWarning:在保存文件中找不到训练配置:模型尚未编译。请手动编译。 warnings.warn('在保存文件中找不到训练配置:'“
我搜索了它,但人们说忽略它。 但是,当我尝试在此加载的模型中使用预测时,我总是会得到一些随机十进制值的数组,这些值通常为负数。分类总是错误的,因为此数组中的最大值是针对错误的类。
当我再次使用ML计算机在办公室时,我将使用更多屏幕截图和详细信息来编辑此文本。
编辑2: 当我训练模型时,这是最好的模型:
+--------------------------------------------------------------------------+
| Father Model ID | Added Operation |
+--------------------------------------------------------------------------+
| | ('to_add_skip_model', 1, 5) |
| | ('to_wider_model', 1, 64) |
| | ('to_wider_model', 5, 64) |
| 5 | ('to_conv_deeper_model', 9, 3) |
| | ('to_conv_deeper_model', 23, 3) |
| | ('to_concat_skip_model', 5, 9) |
+--------------------------------------------------------------------------+
Saving model.
+--------------------------------------------------------------------------+
| Model ID | Loss | Metric Value |
+--------------------------------------------------------------------------+
| 6 | 0.014135746611282229 | 1.0 |
+--------------------------------------------------------------------------+
之后,我使用final_fit并尝试了预报功能:
>>> clf.predict(test_images)
array([ 0., 0., 0., ..., 12., 12., 12.])
这是预期的输出。评估也给出了良好的结果:
>>> y = clf.evaluate(test_images, test_labels)
>>> print(y)
0.9969230769230769
然后将模型导出为keras模型并再次加载:
>>> from keras import models
>>> clf.load_searcher().load_best_model().produce_keras_model().save('keras_best_model.h5')
>>> model = models.load_model('keras_best_model.h5')
一切都很好,我也没有任何错误。但是当我现在使用predict_function时,它将返回错误的结果:
>>> model.predict(test_images[0].reshape(1, 50, 50, 3))
array([[ 2.5287893, -2.2281592, -2.8172228, 1.1171696, -5.8477755,
-3.1250796, 1.4904132, 1.1068834, -4.982565 , -1.6350467,
-4.3806715, -2.7464929, -6.1051216]], dtype=float32)
所以clf.predict给我一个数字,而model.predict给我一个数组。不应该一样吗?几乎所有的预测都是错误的。当我评估模型时,这是输出:
>>> model.evaluate(test_images, test_labels1)
2600/2600 [==============================] - 1s 569us/step
[5.251570468682509, 0.10115384615384615]
与clf评估相比,这完全不好,我也不知道为什么。
答案 0 :(得分:0)
在新版本(0.3.6)中,看来
clf.load_searcher().load_best_model().produce_keras_model().save('keras_best_model.h5')
已删除。目前,您可以使用“ autokeras.utils.pickle_to_file”进行保存,并可以使用“ autokeras.utils.pickle_from_file”加载模型。这不是通常的keras模型,但是我们可以获得相同的结果。