Почему сначала полностью сверточное сетевое плато, а потом учится? - PullRequest
0 голосов
/ 28 января 2019

Почему сначала полностью сверточное сетевое плато, а затем учится?

Я тренирую полностью сверточную сеть, чтобы классифицировать рукописные китайские иероглифы.Набор данных dev, который я использую, содержит 250 классов с 200 - 300 выборками в каждом классе.

И я выяснил, что независимо от того, как я настраиваю модель, все те, которые я пробовал до сих пор, имеют похожее поведение, которые все они сначала плато, а затем точность начинает расти, в то время как потери уменьшаются, как показано на скриншоте ниже:

FCN Plateau

Я бымне нравится больше знать о причинах такого поведения.

Большое спасибо!

Редактировать :

Извините за то, что не предоставил более подробную информацию раньше.

Моя самая эффективная сеть на данный момент, как показано ниже, использует оптимизатор Adadelta с LR на 0,1.Мои веса были инициализированы с использованием инициализации xavier.

Input(shape=(30, 30, 1))
Lambda(
    lambda image: tf.image.resize_images(
        image, size=(resize_size, resize_size),
        method=tf.image.ResizeMethod.BILINEAR
    )
)

Conv2D(filters=96, kernel_size=(5, 5), strides=(1, 1), padding="same", "relu")
Conv2D(filters=96, kernel_size=(1, 1), strides=(1, 1), padding="same", "relu")
MaxPooling2D(pool_size=(3, 3), strides=2)

Conv2D(filters=192, kernel_size=(5, 5), strides=(2, 2), padding="same", "relu")
Conv2D(filters=192, kernel_size=(1, 1), strides=(1, 1), padding="same", "relu")
MaxPooling2D(pool_size=(3, 3), strides=2)

Conv2D(filters=192, kernel_size=(3, 3), "same", "relu")
Conv2D(filters=192, kernel_size=(1, 1), "same", "relu")
Conv2D(filters=10, kernel_size=(1, 1), "same", "relu")
AveragePooling2D(pool_size=(3, 3))
Flatten()
Dense(250, activation="softmax")

model = Model(inp, x)

model.compile(
    loss=categorical_crossentropy,
    optimizer=Adadelta(lr=0.1),
    metrics=["accuracy"],
)

Что касается входных данных, все они представляют собой рукописные китайские символы, которые были преобразованы мной в формат MNIST, размером 30x30x1 (существование лямбды).слой после Входного слоя был из-за того, что я следовал за оригинальной FCN бумагой , и они использовали размер ввода 32x32), как показано ниже:

enter image description here

И вот как вышеприведенные графики потерь и точности появились.

Надеюсь, это обеспечивает лучшую интуицию.Спасибо.

1 Ответ

0 голосов
/ 29 января 2019

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

В общем, это просто потому, что очень сложной модели обычно требуется несколько итераций перед тем, какполучает лучше, чем случайные результаты.Начнем со случайных весов и ядер.На первых нескольких итерациях модель должна проработать хаос, установить несколько полезных шаблонов в ядрах раннего уровня и найти весовые коэффициенты, которые коррелируют с достаточным количеством выходных категорий, чтобы точность превышала 0,4% со статистической значимостью.

Часть проблемы заключается в том, что в эти первые несколько итераций модель также сталкивается с образцами, которые полезны в хаосе, но на самом деле вредят долгосрочному обучению.Например, он может построить шаблон для черных точек и правильно предположить, что это соотносится с глазами млекопитающего и колесами автомобиля.Слишком рано, это обобщение, что самолет и эрдельтерьер конструктивно связаны, оказывается ошибочным неправильным предположением.Он должен сломать корреляции второго уровня между этими категориями и найти что-то еще.

Это тот тип обучения, который удерживает точность на низком уровне дольше, чем вы думаете.Модель проводит первые несколько итераций, выполняя сотни выводов о классификациях, что угодно, что связано с одной или двумя правильными догадками.Затем он должен выучить достаточно, чтобы отделить действительные от недействительных. То, что - это то, где модель начинает делать успехи, которые она может сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...