Я заменил два последних полностью связанных слоя модели VGG16 на глобальное среднее объединение и использую этот CNN для двоичной классификации (класс 0: доброкачественный, класс 1: злокачественный) с использованием маммографического изображения.Скорость обучения была установлена равной 0,0000001, а эпоха = 500. Кривая тренировочных потерь колеблется в широком диапазоне (например, большой зигзаг), а кривая проверочных потерь похожа на плоскую прямую линию.Я прилагаю фигуру тренировочных потерь против кривой проверочных потерь в качестве фигуры для лучшего понимания. тренировочная потеря против кривой проверочной потери
С другой стороны, кривая точности обучения также колеблется в пределахбольшой диапазон (например, большой зигзаг), а кривая точности валидации - как прямая линия. Я также прикрепляю фигуру точности обучения против кривой точности валидации в качестве рисунка для лучшего понимания. точность обучения против кривой точности валидации
Для обучения 280 (доброкачественных: 136, злокачественных: 144) изображений было использовано увеличение данных.Для проверки использовалось 27 (доброкачественных: 14, злокачественных: 13) изображений.А для тестирования было использовано 21 (доброкачественное: 5, злокачественное: 16) изображение.Матрица путаницы выглядит хорошо: Матрица путаницы
Мой вопрос заключается в том, почему кривая тренировочных потерь колеблется, когда кривая проверочных потерь всегда плоская?А также, почему моя кривая точности обучения колеблется, когда кривая точности проверки всегда плоская?
# Show the image paths
train_path = 'Digital_Mamo/OPTIMAM' # Relative Path
valid_path = 'Digital_Mamo/InBreast'
test_path = 'Digital_Mamo/BCDR'
valid_batches = ImageDataGenerator().flow_from_directory(valid_path, target_size=(224, 224), classes=['Benign', 'Malignant'], batch_size=9) #, color_mode="grayscale"
test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(224, 224), classes=['Benign', 'Malignant'], batch_size=7)
datagen = ImageDataGenerator(rotation_range=10, width_shift_range=0.1,
height_shift_range=0.1, shear_range=0.15, zoom_range=0.1,
channel_shift_range=10., horizontal_flip=True)
train_batches = datagen.flow_from_directory(
train_path,
target_size=(224, 224),
batch_size=10,
classes=['Benign','Malignant'])
vgg16_model= load_model('Fetched_VGG.h5')
# transform the model to Sequential
for layer in vgg16_model.layers[:-4]:
model.add(layer)
model.add(GlobalAveragePooling2D())
# Freezing the layers (Oppose weights to be updated)
for layer in model.layers:
layer.trainable = False
model.add(Dense(2, activation='softmax', name='predictions'))
### Compile the model
model.compile(Adam(lr=.0000001), loss='categorical_crossentropy', metrics=['accuracy']) # lr=.0001
# train the model
hist = model.fit_generator(train_batches, steps_per_epoch=28, validation_data=valid_batches, validation_steps=3, epochs=500, verbose=2) # epochs=5
scoreSeg = model.evaluate_generator(test_batches, steps=3)
print('Test Loss:', scoreSeg[0])
print('Test accuracy:', scoreSeg[1])
#test
predictions = model.predict_generator(test_batches, steps=3, verbose=0)
#print(predictions)