CNN (Python Keras) 的训练过程
Training process of a CNN (Python Keras)
考虑以下 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 层的输出是否会在 epoch 期间发生变化?
- 如果(Flatten 层的)输出发生变化,是否意味着在 Flatten 层之前(在 Conv2d->Conv2D->MaxPooling2D->Flatten 之间)也存在反向传播过程?
- 在 MaxPooling2D 层(或展平之前的任何层)之后使用 Dropout 的必要性是什么?
展平层只是获取前一层的输出并将所有内容展平为一个长向量,而不是将其保留为多维数组。所以展平层本身没有任何权重需要学习,而且它计算输出的方式永远不会改变。它的实际输出在你训练时确实发生了变化,因为前面的层正在接受训练,所以它们的输出在变化,因此扁平化的输入也在变化。
展平层没有什么独特之处可以防止反向传播应用于它之前的层。如果有,那将阻止前面的层被训练。为了在展平之前训练层,必须进行反向传播。反向传播是用于更新网络中的权重的过程。如果它从未应用于起始层,它们将永远不会更新,也永远不会学到任何东西。
Dropout 层用于其正则化效果以减少过度拟合。通过在任何给定 运行 上随机选择一些要停用的神经元,dropout 试图迫使网络学习更独立、更稳健的特征。它不能依赖一小部分神经元,因为它们可能不会被使用。同样的想法适用于展平层之前和之后。
在您的网络中的特定点包括丢失是否有用取决于您的特定用例。例如,如果您没有为网络过度拟合而苦苦挣扎,那么 dropout 可能无助于改善您的结果。通常决定确切何时使用 dropout 以及使用多少是一个实验问题,看看什么对你的数据有效。
考虑以下 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 层的输出是否会在 epoch 期间发生变化?
- 如果(Flatten 层的)输出发生变化,是否意味着在 Flatten 层之前(在 Conv2d->Conv2D->MaxPooling2D->Flatten 之间)也存在反向传播过程?
- 在 MaxPooling2D 层(或展平之前的任何层)之后使用 Dropout 的必要性是什么?
展平层只是获取前一层的输出并将所有内容展平为一个长向量,而不是将其保留为多维数组。所以展平层本身没有任何权重需要学习,而且它计算输出的方式永远不会改变。它的实际输出在你训练时确实发生了变化,因为前面的层正在接受训练,所以它们的输出在变化,因此扁平化的输入也在变化。
展平层没有什么独特之处可以防止反向传播应用于它之前的层。如果有,那将阻止前面的层被训练。为了在展平之前训练层,必须进行反向传播。反向传播是用于更新网络中的权重的过程。如果它从未应用于起始层,它们将永远不会更新,也永远不会学到任何东西。
Dropout 层用于其正则化效果以减少过度拟合。通过在任何给定 运行 上随机选择一些要停用的神经元,dropout 试图迫使网络学习更独立、更稳健的特征。它不能依赖一小部分神经元,因为它们可能不会被使用。同样的想法适用于展平层之前和之后。
在您的网络中的特定点包括丢失是否有用取决于您的特定用例。例如,如果您没有为网络过度拟合而苦苦挣扎,那么 dropout 可能无助于改善您的结果。通常决定确切何时使用 dropout 以及使用多少是一个实验问题,看看什么对你的数据有效。