我有一个像VGG一样的网,性能很好,但训练( ~30h)超过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
的实现,我有:
def DenseNet121(include_top=True,
weights='imagenet',
input_tensor=None,
input_shape=None,
pooling=None,
classes=1000):
return DenseNet([6, 12, 24, 16],
include_top, weights,
input_tensor, input_shape,
pooling, classes)
以[6, 12, 24, 16]
作为层大小。
分别:
DenseNet201 = [6, 12, 48, 32]
DenseNet169 = [6, 12, 32, 32]
DenseNet121 = [6, 12, 24, 16]
参考执行情况如下:
但它们使用的参数是深度和增长:-depth 100 -growthRate 12
和我无法理解-depth 100 -growthRate 12
和层之间的关系。
例如,我如何在Keras下缩小这个模型的大小,使其与DenseNet40
相当?
发布于 2018-07-27 02:19:06
像DenseNet121、DenseNet169、DenseNet201、DenseNet264这样的标准实现,在每个密集块中使用显式的层数。上述所有网络中的密集黑人数为4人,增长率为32人。但它们的层次各不相同:
DenseNet121 = [6, 12, 24, 16]
DenseNet169 = [6, 12, 32, 32]
DenseNet201 = [6, 12, 48, 32]
DenseNet264 = [6, 12, 64, 48]
对于具有自定义层数和增长率的实现,可以为每个密集块提供自己的层数,也可以均匀地分配每个密集块的层数。
DenseNet中的层数为3 N + 4
格式。您可以在自定义网络中使用自己的增长率。(例如12)。
如果您想要使用keras实现来创建自定义网,则必须将每个块的层列表传递给它。因此,如果您想要一个100层网络,请传递一个[25, 25, 25, 25]
列表。
DenseNet([25, 25, 25, 25],
include_top, weights,
input_tensor, input_shape,
pooling, classes)
注意,keras目前只支持4个块的DenseNets,所以如果要修改DenseNet的keras实现,就必须传递一个大小为4的列表。
并改变跟随线的硬编码增长率( keras-applications/keras_applications/densenet.py
)。只要改变:
x = conv_block(x, 32, name=name + '_block' + str(i + 1))
至:
x = conv_block(x, your_growth_rate, name=name + '_block' + str(i + 1))
https://stackoverflow.com/questions/48580703
复制相似问题