首页 文章

CNN(Python Keras)的培训过程

提问于
浏览
-1

考虑以下CNN架构,(code fragment was referred from this link

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

我的问题主要是关于CNN的培训过程 .

  • 训练模型时,Flatten图层的输出会在纪元期间发生变化吗?

  • 如果(Flatten图层)的输出发生变化,这是否意味着在Flatten图层之间存在反向传播过程(在Conv2d-> Conv2D-> MaxPooling2D-> Flatten之间)?

  • 在MaxPooling2D图层(或展平之前的任何图层)之后使用Dropout的必要性是什么?

1 回答

  • 1
    • 展平图层简单地获取前一层的输出,并将所有内容展平为一个长向量,而不是将其保持为多维数组 . 因此,展平图层本身没有任何要学习的权重,并且计算其输出的方式永远不会改变 . 当你训练时,它的实际输出会发生变化,因为前面的图层正在训练,因此它们的输出正在改变,因此变平的输入正在改变 .

    • 展平层没有什么独特之处可以阻止反向传播应用于它之前的层 . 如果有,那将阻止前面的层被训练 . 为了在压平之前训练层,必须进行反向传播 . 反向传播是用于更新网络中权重的过程 . 如果它从未应用于起始层,它们将永远不会被更新,并且它们永远不会学到任何东西 .

    • Dropout图层用于正则化效果,以减少过度拟合 . 通过在任何给定的运行中随机选择一些要停用的神经元,辍学尝试强制网络学习更独立,更健壮的功能 . 它不能依赖于一小部分神经元,因为它们可能不被使用 . 同样的想法适用于展平层之前和之后 .

    是否在网络中的特定点包含丢失将取决于您的特定用例 . 例如,如果您没有在网络过度拟合方面苦苦挣扎,那么辍学可能无助于改善您的结果 . 通常决定何时使用辍学和使用多少是一个实验问题,看看什么对你的数据有用 .

相关问题