使用 keras 的 CNN 结果不一致

我使用 CNN 根据 Keras 中的图像对汽车损坏进行了预测,无论它们是否严重。每次我为同一数据集运行代码并且没有更改其他参数时,预测的类别和准确性都会发生变化。我尝试重新启动内核并为模型设置种子,希望获得一致的结果。我是 python 的新手,所以请帮助我每次都获得相同的结果。


import random

random.seed(801)

# Importing the Keras libraries and packages

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

from keras.layers import Dropout


# Initialising the CNN

classifier = Sequential()


# Step 1 - Convolution

classifier.add(Conv2D(64, (2, 2), input_shape = (64, 64, 3), activation = 'relu'))


# Step 2 - Pooling

classifier.add(MaxPooling2D(pool_size = (2, 2)))




# Adding a second convolutional layer

classifier.add(Conv2D(64, (2, 2), activation = 'relu'))

classifier.add(MaxPooling2D(pool_size = (2, 2)))






# Step 3 - Flattening

classifier.add(Flatten())



# Adding dropout

classifier.add(Dropout(0.2))


# Step 4 - Full connection

classifier.add(Dense(units = 128, activation = 'relu'))


# Adding dropout

classifier.add(Dropout(0.2))


classifier.add(Dense(units = 1, activation = 'sigmoid'))


# Compiling the CNN

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])


# Part 2 - Fitting the CNN to the images


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)


#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')


皈依舞
浏览 321回答 2
2回答

开满天机

每次分类时,您似乎都在训练模型!这就是造成不一致的原因。尽管您设置了种子,但仍会产生不同结果的原因可以在(此处)找到[为什么即使我设置了随机种子,我也无法在 Keras 中获得可重现的结果?.我建议您将这两个文件分开,以便在一个脚本中训练并加载然后在另一个脚本中进行测试。这样,您将获得更一致的结果。

慕婉清6462132

我在加载重量时遇到了类似的问题。问题是,当您加载权重时,由于模型声明,keras 随机分配权重。我改用检查点来存储我的权重并model.load_weights(checkpoints_directory)加载权重。您将不得不为此使用回调。这是此任务的简短代码片段(Google有关于他的主题的精彩视频)。from keras.callbacks import ModelCheckpointcallbacks = [ModelCheckpoint(checkpoints_directory, monitor='val_loss', save_weights_only=True, save_best_only=True, period=period)]model.fit(..., callbacks=callbacks, ...)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python