【问题标题】:Weird Training Issue with keras - sudden huge drop in loss with zeros in FC layerkeras 的奇怪训练问题 - FC 层中的零损失突然大幅下降
【发布时间】:2016-12-28 15:10:25
【问题描述】:

我在使用 Keras(Tensor Flow 后端,Ubuntu 14.04,Cuda 8,带有 cudnn)训练连体式 CNN 时遇到了这个奇怪的问题。简而言之,CNN 有一组共享的权重,它接收两个图像,合并它们各自的 FC 层,然后估计一个回归。我正在使用带有 Adam 优化器的 MSE 损失(使用默认参数)。我已经多次处理不同类型的问题,但从未见过以下情况。

基本上发生的事情发生在第一个 epoch,一切似乎都训练得很好,并且损失正在缓慢下降,正如预期的那样(在使用 32 的批大小时,MSE 约为 3.3 左右)。回归正在估计一个 9 维连续值向量。

然后,一旦第二个 epoch 开始,损失就会急剧下降(到 ~ 4e-07)。你会认为“哦,是的,损失真的很小——我赢了”,但是当我通过对新输入的预测来检查训练的权重时(我使用检查点根据损失转储出最好的权重集) ,我得到奇怪的行为。无论输入是什么(不同的图像,作为输入的随机噪声,甚至是零),我总是得到相同的精确输出。进一步检查表明,共享权重中的最后一个 FC 层全为零。

如果我在第一个 epoch 之后查看权重,当一切看起来“正常”时,这不会发生——我只是没有得到最佳结果(有道理——只发生了一个 epoch)。这只发生在第二个纪元之后。

有人见过吗?有任何想法吗?你认为这是我的一个愚蠢的错误,还是一些奇怪的错误?

在此处了解有关我的网络拓扑的更多详细信息。以下是共享权重:

shared_model = Sequential()

shared_model.add(Convolution2D(nb_filter=96, nb_row=9, nb_col=9, activation='relu', subsample=(2,2), input_shape=(3,height,width)))
shared_model.add(MaxPooling2D(pool_size=(2,2)))
shared_model.add(Convolution2D(nb_filter=256, nb_row=3, nb_col=3, activation='relu', subsample=(2,2)))
shared_model.add(MaxPooling2D(pool_size=(2,2)))
shared_model.add(Convolution2D(nb_filter=256, nb_row=3, nb_col=3, activation='relu'))
shared_model.add(MaxPooling2D(pool_size=(2,2)))
shared_model.add(Convolution2D(nb_filter=512, nb_row=3, nb_col=3, activation='relu', subsample=(1,1)))

shared_model.add(Flatten())

shared_model.add(Dense(2048, activation='relu'))
shared_model.add(Dropout(0.5))

然后我将它们合并进行回归如下:

input_1 = Input(shape=(3,height,width))
input_2 = Input(shape=(3,height,width))
encoded_1 = shared_model(input_1)
encoded_2 = shared_model(input_2)
encoded_merged = merge([encoded_1, encoded_2], mode='concat', concat_axis=-1)
fc_H = Dense(9, activation='linear')
h_loss = fc_H(encoded_merged)
model = Model(input=[input_1, input_2], output=h_loss)

最后,每个 epoch 训练大约 1,000,000 个样本,因此应该有大量数据需要训练。我只是从未见过 FC 层被设置为全零。即便如此,我也不明白当训练数据不全为零时,这如何导致损失非常低。

【问题讨论】:

    标签: keras


    【解决方案1】:

    对于似乎被最后一层预测的零点,可能发生的是垂死的 ReLU 问题。试试 LeakyReLU,调整 alpha。这对我有效地消除了我在第一个时代本身会得到的那些零。

    【讨论】:

      猜你喜欢
      • 2019-12-29
      • 2017-12-15
      • 2017-12-04
      • 2019-02-10
      • 2019-04-02
      • 2021-07-13
      • 2019-04-20
      • 2021-06-14
      • 2020-06-27
      相关资源
      最近更新 更多