def DenseNet(inputs, n_classes, n_dense_block, n_layers, growth_rate,
n_initial_filters, compression=1.0, use_bottleneck=False,
dropout=None, weight_decay=1e-4, initial_conv=3):
# Initial convolution
if initial_conv==3:
l, n_filters = initial_conv_3x3(inputs, n_initial_filters,
weight_decay)
elif initial_conv==7:
l, n_filters = initial_conv_7x7(inputs, n_initial_filters,
weight_decay)
else:
raise ValueError('Unknown initial convolution')
# Add dense blocks
for block_idx in range(n_dense_block):
# Add dense block
l, n_filters = dense_block(l, n_layers[block_idx], n_filters,
growth_rate, dropout, use_bottleneck,
weight_decay, name='block'+str(block_idx))
# Add transition down except for the last block
if block_idx<(n_dense_block - 1):
l, n_filters = transition_down(l, n_filters, compression, dropout,
weight_decay,
name='block'+str(block_idx))
# Add classifier at the end
l = BatchNormalization(mode=0, axis=channel_idx,
gamma_regularizer=l2(weight_decay),
beta_regularizer=l2(weight_decay),
name='classifier_bn')(l)
l = Activation('relu', name='classifier_relu')(l)
l = GlobalAveragePooling2D(name='classifier_pool')(l)
l = Dense(n_classes,
activation='softmax',
W_regularizer=l2(weight_decay),
b_regularizer=l2(weight_decay),
name='classifier_dense')(l)
model = Model(input=[inputs], output=[l], name="DenseNet")
return model
# Build the densenet model
评论列表
文章目录