我有一个类似VGG的网络,性能很好,但需要花很长时间来训练(约30小时)超过600个时代
我试着换成keras.applications.densenet.Densenet121的性能和更快的训练时间,但它显然是过度适合即使在高辍学在稠密层。在
from keras.applications.densenet import DenseNet201, DenseNet121
input_image = Input(shape=input_shape)
x = BatchNormalization()(input_image)
base_model = DenseNet121(
include_top=False,
weights='imagenet' if weights else None,
input_shape=input_shape,
pooling='max')
x = base_model(x)
x = Flatten()(x)
x = Dense(128, activation='relu', name='fc2')(x)
x = BatchNormalization()(x)
x = Dropout(0.9, name='dropout_fc2')(x)
predictions = Dense(nb_classes, activation="softmax", name="predictions")(x)
不过,我还是想测试这种架构。在
如果我使用keras.applications.densenet.DenseNet121
的实现,我有:
以[6, 12, 24, 16]
作为层大小。在
分别是:
DenseNet201 = [6, 12, 48, 32]
DenseNet169 = [6, 12, 32, 32]
DenseNet121 = [6, 12, 24, 16]
参考实施包括:
但是他们把深度和生长作为参数:-depth 100 -growthRate 12
而且我无法计算出深度/生长状态和层之间的关系。在
在Keras下,我如何缩小这个模型,以获得一个DenseNet40
的等价物?在
像DenseNet121、DenseNet169、DenseNet201、DenseNet264这样的标准实现使用每个密集块的显式层数。在前面提到的所有网络中,稠密黑人的数量是4,增长率是32。但其中的层有如下变化:
对于使用自定义层数和增长率的实现,您可以自己计算每个密集块的层数,也可以统一分配每个密集块的层数。在
DenseNet中的层数的形式是
3 N + 4
。你可以在自定义网络中使用你自己的增长率。(例12)。在如果您想使用keras实现来定制网络,那么您必须向它传递每个块的层列表。 所以如果你想要一个100层的网络,传递一个
^{pr2}$[25, 25, 25, 25]
列表。在请注意,keras目前只支持具有4个块的DenseNet,因此如果您要修改DenseNet的keras实现,则必须向它传递一个大小为4的列表。在
并改变following line中
keras-applications/keras_applications/densenet.py
中的硬编码增长率。 只需更改:收件人:
相关问题 更多 >
编程相关推荐