[英]Training process of a CNN (Python Keras)
考虑CNN的以下架构,( 此链接引用了代码片段 )
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的培训过程。
展平层只是将上一层的输出取整并将所有内容展平为一个长向量,而不是将其保留为多维数组。 因此,展平层本身没有学习任何权重,并且它计算其输出的方式永远不会改变。 训练时,它的实际输出确实发生了变化,这是因为前面的层正在训练中,因此它们的输出也在变化,因此要展平的输入也在变化。
平整层没有什么独特之处可以防止反向传播应用于之前的层。 如果有的话,那将阻止对先前的层进行培训。 为了在压平之前训练层,必须进行反向传播。 反向传播是用于更新网络中权重的过程。 如果从未将其应用于起始层,则将永远不会对其进行更新,并且他们将永远不会学到任何东西。
辍学层用于其正则化效果以减少过度拟合。 通过随机选择一些在任何给定运行中将被停用的神经元,辍学尝试迫使网络学习更多独立,强大的功能。 它不能依赖神经元的一小部分,因为它们可能不会被使用。 平坦层之前和之后都适用相同的想法。
是否在网络中的特定点包括辍学是否有用将取决于您的特定用例。 例如,如果您不为网络过度安装而苦苦挣扎,那么辍学可能无助于改善您的结果。 通常,确切地决定何时使用辍学以及使用多少辍学只是一个实验问题,以查看对您的数据有效的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.