Почему моя модель CNN не учится при переключении на больший набор данных? - PullRequest
0 голосов
/ 17 апреля 2020

Я проверил свой cnn на небольшом наборе данных, чтобы убедиться, что он способен к обучению. Модель тренируется примерно до 94%, хотя она хорошо подходит, поэтому решила запустить ее на большом наборе данных.

Прежде всего, при тестировании одного изображения, оно правильно предсказывает одно тестовое изображение. Это мой первоначальный тест, чтобы увидеть, выполняет ли он то, что должен, - но при обучении всему набору данных он вообще не учится. Код тот же.

Одна мысль состоит в том, что я ввожу данные из потока flow_from_directory. Он успешно вводит данные, но я не могу проверить, находится ли он в правильном порядке как для входного изображения, так и для истинной земли. Я предполагаю, что это в алфавитном порядке, что означало бы, что это правильно, так как я назвал оба файла одинаковыми.

Я предположил, что если модель способна соответствовать, то она способна учить большее Набор данных при возможности обобщения (следовательно, уменьшить проблему переобучения). Я ошибаюсь, предполагая это?

def create_model():
    pool_size = (2, 2)
    model = Sequential()
    model.add(Conv2D(64, (3,3), padding='same', strides=(1,1),   input_shape=(360, 640, 1), activation = 'relu'))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size = pool_size))

    model.add(Conv2D(128, (3,3), padding='same', strides=(1,1), activation = 'relu'))
    model.add(BatchNormalization())          
    model.add(MaxPooling2D(pool_size = pool_size))

    model.add(Conv2D(256, (3,3), padding='same', strides=(1,1), activation = 'relu'))
    model.add(BatchNormalization())       
    model.add(MaxPooling2D(pool_size = pool_size))

    model.add(Conv2D(128, (1,1), padding ='same', strides=(1,1), activation = 'relu'))
    model.add(BatchNormalization())          
    #model.add(Dropout(0.1))

    model.add(Conv2D(1, (1,1), padding ='same', strides=(1,1), activation = 'relu'))

    model.compile(adam, loss=[squared_error], metrics=['acc', custom_acc])


    csv_logger = CSVLogger('log_L5.csv', append=False, separator=',')
    history = model.fit(x = X_train, y = Y_train, batch_size = None, epochs = 300, callbacks = [csv_logger])

Потери модели Точность модели

Это графики, которые были получены. Я использовал пользовательскую точность, которая вычисляет количество равных пикселей по сравнению с основной правдой, деленное на общее количество пикселей.

Я использовал оптимизатор Адама, начальная скорость обучения 0,001 и пробежал 100 изображений за 300 эпох , Я могу получить один и тот же результат примерно до 1-3000 изображений, но кажется, что он запоминает изображения, а не обобщает их для других изображений.

Мои входные изображения представляют собой изображения с резкими краями, исходные изображения имеют оттенки серого, но у меня есть показывается как цвет по умолчанию для matplotlib, так как его легче увидеть на изображениях.

Входное изображение Groundtruth Prediction

Используемый набор данных - это набор данных Berkeley DeepDrive (BDD).

...