为了账号安全,请及时绑定邮箱和手机立即绑定

使用 keras 的 CNN 结果不一致

使用 keras 的 CNN 结果不一致

皈依舞 2021-11-16 16:10:03
我使用 CNN 根据 Keras 中的图像对汽车损坏进行了预测,无论它们是否严重。每次我为同一数据集运行代码并且没有更改其他参数时,预测的类别和准确性都会发生变化。我尝试重新启动内核并为模型设置种子,希望获得一致的结果。我是 python 的新手,所以请帮助我每次都获得相同的结果。import randomrandom.seed(801)# Importing the Keras libraries and packagesfrom keras.models import Sequentialfrom keras.layers import Conv2Dfrom keras.layers import MaxPooling2Dfrom keras.layers import Flattenfrom keras.layers import Densefrom keras.layers import Dropout# Initialising the CNNclassifier = Sequential()# Step 1 - Convolutionclassifier.add(Conv2D(64, (2, 2), input_shape = (64, 64, 3), activation = 'relu'))# Step 2 - Poolingclassifier.add(MaxPooling2D(pool_size = (2, 2)))# Adding a second convolutional layerclassifier.add(Conv2D(64, (2, 2), activation = 'relu'))classifier.add(MaxPooling2D(pool_size = (2, 2)))# Step 3 - Flatteningclassifier.add(Flatten())# Adding dropoutclassifier.add(Dropout(0.2))# Step 4 - Full connectionclassifier.add(Dense(units = 128, activation = 'relu'))# Adding dropoutclassifier.add(Dropout(0.2))classifier.add(Dense(units = 1, activation = 'sigmoid'))# Compiling the CNNclassifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])# Part 2 - Fitting the CNN to the imagesfrom keras.preprocessing.image import ImageDataGeneratortrain_datagen = ImageDataGenerator(rescale = 1./255,                                  # shear_range = 0.2,                                  # zoom_range = 0.2,                                   horizontal_flip = True)test_datagen = ImageDataGenerator(rescale = 1./255)#train_labels = keras.utils.to_categorical(train_labels,num_classes)#test_labels = keras.utils.to_categorical(test_labels,num_classes)training_set = train_datagen.flow_from_directory('C:/Users/Allianz/Desktop/Image Processing/car-damage-detective-neokt/app/2 category/training',                                                 target_size = (64, 64),                                                 batch_size = 16,                                                 class_mode = 'binary')
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

每次分类时,您似乎都在训练模型!这就是造成不一致的原因。尽管您设置了种子,但仍会产生不同结果的原因可以在(此处)找到[为什么即使我设置了随机种子,我也无法在 Keras 中获得可重现的结果?.

我建议您将这两个文件分开,以便在一个脚本中训练并加载然后在另一个脚本中进行测试。这样,您将获得更一致的结果。


查看完整回答
反对 回复 2021-11-16
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我在加载重量时遇到了类似的问题。问题是,当您加载权重时,由于模型声明,keras 随机分配权重。我改用检查点来存储我的权重并model.load_weights(checkpoints_directory)加载权重。您将不得不为此使用回调。这是此任务的简短代码片段(Google有关于他的主题的精彩视频)。


from keras.callbacks import ModelCheckpoint


callbacks = [ModelCheckpoint(checkpoints_directory, monitor='val_loss', save_weights_only=True, save_best_only=True, period=period)]


model.fit(..., callbacks=callbacks, ...)


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 320 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信