【问题标题】:ConvNet validation accuracy relation with each epoch与每个 epoch 的 ConvNet 验证准确度关系
【发布时间】:2018-08-07 08:03:50
【问题描述】:

在训练 CNN 时,为什么验证损失可以在一个 epoch 中有所改善,即使之前的 epoch 验证损失没有改善?我不使用任何 dropout,训练和验证数据集在每个 epoch 之后都保持不变

型号:

model = Sequential()
model.add(Conv2D(filters=16, kernel_size=2, padding='same', activation='relu', 
                        input_shape=(32, 32, 3)))
model.add(MaxPooling2D(pool_size=2))
model.add(Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(Conv2D(filters=64, kernel_size=2, padding='same', activation='relu'))
#model.add(Dropout(0.3))
model.add(MaxPooling2D(pool_size=2))
model.add(Conv2D(filters=64, kernel_size=2, padding='same', activation='relu'))
model.add(Conv2D(filters=64, kernel_size=2, padding='same', activation='relu'))
#model.add(Dropout(0.3))
model.add(MaxPooling2D(pool_size=2))
#model.add(Dropout(0.3))
model.add(Flatten())
model.add(Dense(500, activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(10, activation='softmax'))

下面的示例:epoch 14 改进了 val_loss 而 epoch 13 没有。这个怎么可能?这背后的直觉是什么?

Epoch 12/20
Epoch 00011: val_loss did not improve
14s - loss: 1.1619 - acc: 0.6079 - val_loss: 1.2863 - val_acc: 0.5308
Epoch 13/20
Epoch 00012: val_loss did not improve
14s - loss: 1.1741 - acc: 0.6029 - val_loss: 1.3020 - val_acc: 0.5930
Epoch 14/20
Epoch 00013: val_loss improved from 1.11924 to 0.97569, saving model to model.weights.best.hdf5
14s - loss: 1.1895 - acc: 0.6005 - val_loss: 0.9757 - val_acc: 0.6614

【问题讨论】:

    标签: validation tensorflow keras conv-neural-network epoch


    【解决方案1】:

    通常,您会期望趋势是先改善,然后是稳定,最后可能随着过度拟合的出现而恶化。但是,验证准确性是一个嘈杂的过程。您没有直接对其进行培训,因此它可能会上升或下降一点。

    思考这个问题的一种方法是注意任何深度网络都描述了一个复杂的、高度非线性的函数,由大量变量参数化。在每一步,训练算法都会尝试微调这些参数,以便您的非线性函数在训练示例给出的点处具有所需的值。但验证准确度衡量的是在一组不同示例上的这种对齐方式。当然,在这个训练过程的某些阶段,训练集准确性的提高会导致验证集的恶化,这完全是偶然的——这将在以后的迭代中得到解决。

    此外,即使是训练准确度也会出现波动,因为您通常在小批量上进行训练,而不是一次在整个训练集上进行训练。因此,一个特定的 minibatch 可能包含一堆示例,这些示例将函数推向特定方向,而这恰好对大多数其他训练示例有害。这通常会通过后续的 minibatch 得到解决,但会不时导致训练准确度下降。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 2019-08-14
      • 2018-07-14
      • 2023-02-16
      • 2020-12-01
      • 2020-12-03
      • 2020-03-28
      • 1970-01-01
      相关资源
      最近更新 更多