Почему сначала полностью сверточное сетевое плато, а затем учится?
Я тренирую полностью сверточную сеть, чтобы классифицировать рукописные китайские иероглифы.Набор данных dev, который я использую, содержит 250 классов с 200 - 300 выборками в каждом классе.
И я выяснил, что независимо от того, как я настраиваю модель, все те, которые я пробовал до сих пор, имеют похожее поведение, которые все они сначала плато, а затем точность начинает расти, в то время как потери уменьшаются, как показано на скриншоте ниже:
Я бымне нравится больше знать о причинах такого поведения.
Большое спасибо!
Редактировать :
Извините за то, что не предоставил более подробную информацию раньше.
Моя самая эффективная сеть на данный момент, как показано ниже, использует оптимизатор 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), как показано ниже:
И вот как вышеприведенные графики потерь и точности появились.
Надеюсь, это обеспечивает лучшую интуицию.Спасибо.