如何在用 Keras 构建和训练的神经网络中处理错误预测?

Tris95

我对神经网络非常陌生,我在一些互联网博客的帮助下尝试了一个典型的第一个例子:猫或狗的图像分类。在训练下面的神经网络后,我试图识别一些我在谷歌上发现的猫/狗的随机图片,它们既不在我的训练集也不在我的测试集......我发现,有时网络会给出正确的预测(识别狗当展示一只狗时),不幸的是有时会出现错误的预测,即我展示了一张猫的图片,而网络预测的是一只“狗”。我该如何处理此类错误?

将所有错误的图片添加到 training_set 或 test_set 并重新进行整个训练过程?或者有没有其他选项可以告诉网络它做出了错误的预测并应该调整其权重?

#Part 1 - Import
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
#Part 2 – Build Network
classifier = Sequential()
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
#Part 3 - Training
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('C:/…/KNNDaten/training_set', target_size = (64, 64), batch_size = 32, class_mode = 'binary')
test_set = test_datagen.flow_from_directory('C:/…/KNNDaten/test_set', target_size = (64, 64), batch_size = 32, class_mode = 'binary')

classifier.fit_generator(training_set, steps_per_epoch = 8000, epochs = 25, validation_data = test_set, validation_steps = 2000)

#Part 4 – Saving Model and weights 
model_json = classifier.to_json()
with open("model1.json", "w") as json_file:
 json_file.write(model_json)
 classifier.save_weights("model1.h5")

# Part 5 - Making new predictions
import numpy as np
from keras.preprocessing import image
test_image = image.load_img('C:/… /KNNDaten/single_prediction/cat_or_dog_1.jpg', target_size = (64, 64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = classifier.predict(test_image)
training_set.class_indices
if result[0][0] == 1:
    prediction = 'dog'
else:
    prediction = 'cat'

print("Image contains: " + prediction);

目前我的训练过程看起来像:训练过程的结果:准确性,...

非常感谢您的帮助!

豪尔赫·罗德里格斯·莫利努埃沃

通常的过程是将错误预测的图像添加到训练数据集中,并使用随机权重或使用先前通过新图像和旧图像获得的权重重新训练网络。

在训练网络时,您不需要使用随机权重启动,您可以使用之前的权重,这有时称为迁移学习。如果您不想过度拟合模型,那么尝试这样做以包含用于训练模型的原始图像或至少其中的一部分是很重要的。

正如 Dascienz 评论的那样,使用数据增强技术对于获得更好的概括也非常有用,例如添加新图像和它们的变化:旋转、平移、对称和重新缩放。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在keras中同时训练多个神经网络?

如何使用 keras 构建神经网络

如何检查训练keras分类器/神经网络的课程?

如何在keras模型中验证神经网络的结构?

如何使用权重在Keras神经网络中手动预测数据

如何使用 Keras 创建一个从表格数据中训练的神经网络?

如何保存和使用在 PyTorch/TensorFlow/Keras 中开发的训练好的神经网络?

在训练和预测过程中,我应该如何处理神经网络中的可变样本长度?

如何使用Keras(tensorflow)在神经网络回归中限制预测输出的总和

如何确定由Keras上的卷积神经网络预测的二进制类?

如何通过我的Keras神经网络一次做出单个预测

如何使用Keras训练和调整人工多层感知器神经网络?

在keras中的CPU上并行训练多个神经网络

零精度训练Keras中的神经网络

如何在keras中可视化卷积神经网络中间层的输出?

如何在R中处理神经网络预测结果中的NA

如何从kaggle的MNIST训练的神经网络中获得正确的预测?

如何使用 keras 构建具有单个隐藏层的神经网络?

在Keras中构建简单的前馈神经网络时遇到关键错误

如何在神经网络中测试实时预测?

Keras/Tensorflow 中简单神经网络的错误

如何使用Keras功能API查看神经网络的摘要

如何使用keras实现多标签分类神经网络

如何教Keras神经网络解决sqrt

如何在C#.NET Core应用程序中运行python神经网络keras脚本

如何在Keras中训练网络以改变输出大小

keras中的神经网络未收敛

Keras中神经网络的尺寸误差

如何在基于keras的神经网络中使用Tensorflow一种热编码?