我使用 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 中获得可重现的结果?.
我建议您将这两个文件分开,以便在一个脚本中训练并加载然后在另一个脚本中进行测试。这样,您将获得更一致的结果。

慕婉清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, ...)
添加回答
举报
0/150
提交
取消