【发布时间】:2019-06-21 09:08:15
【问题描述】:
为什么全卷积网络先平稳后学习?
我正在训练一个全卷积网络来对手写汉字进行分类。我使用的开发数据集有 250 个类,每个类有 200 - 300 个样本。
而且我发现无论我如何调整模型,不知何故,到目前为止我尝试过的所有模型都有类似的行为,它们一开始都处于稳定状态,然后精度开始飙升,而损失减少,因为如下图所示:
我很想知道更多关于这种行为背后的原因。
非常感谢!
编辑:
很抱歉之前没有提供更多详细信息。
到目前为止,我表现最好的网络如下,使用 LR 为 0.1 的 Adadelta 优化器。我的权重是使用 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(Input层后面有Lambda层是因为我是按照原@987654322 @paper,他们使用了 32x32 的输入尺寸),如下:
这就是上面的损失和准确率图表的产生方式。
希望这能提供更好的直觉。谢谢。
【问题讨论】:
-
这可能有很多原因。您能否添加有关您正在使用的损失和优化器的信息?
-
基本上它是一个 adadelta,LR 为 0.1,softmax 损失,因为我要分类超过 250 个类
标签: machine-learning neural-network deep-learning conv-neural-network loss-function