Почему потеря тренировки - это фрактация, когда потеря проверки похожа на плоскую кривую? - PullRequest
0 голосов
/ 29 сентября 2019

Я заменил два последних полностью связанных слоя модели 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...