我使用 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
提交
取消