Revert "Fit DenseNet examples to Keras-2 (#53)"

This reverts commit fcd054fe40.
This commit is contained in:
Junwei Pan
2017-03-28 17:21:15 -07:00
committed by GitHub
parent fcd054fe40
commit 2ae79ddc19
2 changed files with 33 additions and 37 deletions
+4 -4
View File
@@ -26,7 +26,7 @@ img_rows, img_cols = 32, 32
img_channels = 3
# Parameters for the DenseNet model builder
img_dim = (img_channels, img_rows, img_cols) if K.image_data_format() == "channels_first" else (img_rows, img_cols, img_channels)
img_dim = (img_channels, img_rows, img_cols) if K.imgae_data_format() == "channels_first" else (img_rows, img_cols, img_channels)
depth = 40
nb_dense_block = 3
growth_rate = 12
@@ -71,11 +71,11 @@ model_checkpoint = ModelCheckpoint(weights_file, monitor="val_acc", save_best_on
callbacks = [lr_reducer, early_stopper, model_checkpoint]
model.fit_generator(generator.flow(trainX, Y_train, batch_size=batch_size), steps_per_epoch=len(trainX) // batch_size,
epochs=nb_epoch,
model.fit_generator(generator.flow(trainX, Y_train, batch_size=batch_size), samples_per_epoch=len(trainX),
nb_epoch=nb_epoch,
callbacks=callbacks,
validation_data=(testX, Y_test),
verbose=2)
nb_val_samples=testX.shape[0], verbose=2)
scores = model.evaluate(testX, Y_test, batch_size=batch_size)
print("Test loss : ", scores[0])
+29 -33
View File
@@ -14,11 +14,10 @@ import warnings
from keras.models import Model
from keras.layers.core import Dense, Dropout, Activation, Reshape
from keras.layers import Convolution2D, Deconvolution2D, AtrousConvolution2D, UpSampling2D
from keras.layers.merge import concatenate
from keras.layers.convolutional import Convolution2D, Deconvolution2D, AtrousConvolution2D, UpSampling2D
from keras.layers.pooling import AveragePooling2D
from keras.layers.pooling import GlobalAveragePooling2D
from keras.layers import Input, merge, Conv2D
from keras.layers import Input, merge
from keras.layers.normalization import BatchNormalization
from keras.regularizers import l2
from keras.utils.layer_utils import convert_all_kernels_in_model
@@ -102,7 +101,7 @@ def DenseNet(depth=40, nb_dense_block=3, growth_rate=12, nb_filter=16, nb_layers
input_shape = _obtain_input_shape(input_shape,
default_size=32,
min_size=8,
data_format=K.image_dim_ordering(),
dim_ordering=K.image_dim_ordering(),
include_top=include_top)
if input_tensor is None:
@@ -254,7 +253,7 @@ def DenseNetFCN(input_shape, nb_dense_block=5, growth_rate=16, nb_layers_per_blo
input_shape = _obtain_input_shape(input_shape,
default_size=32,
min_size=16,
data_format=K.image_dim_ordering(),
dim_ordering=K.image_dim_ordering(),
include_top=include_top)
if input_tensor is None:
@@ -297,15 +296,15 @@ def __conv_block(ip, nb_filter, bottleneck=False, dropout_rate=None, weight_deca
concat_axis = 1 if K.image_dim_ordering() == "th" else -1
x = BatchNormalization(axis=concat_axis, gamma_regularizer=l2(weight_decay),
x = BatchNormalization(mode=0, axis=concat_axis, gamma_regularizer=l2(weight_decay),
beta_regularizer=l2(weight_decay))(ip)
x = Activation('relu')(x)
if bottleneck:
inter_channel = nb_filter * 4 # Obtained from https://github.com/liuzhuang13/DenseNet/blob/master/densenet.lua
x = Conv2D(inter_channel, (1, 1), kernel_initializer='he_uniform', padding='same', use_bias=False,
kernel_regularizer=l2(weight_decay))(x)
x = Convolution2D(inter_channel, 1, 1, init='he_uniform', border_mode='same', bias=False,
W_regularizer=l2(weight_decay))(x)
if dropout_rate:
x = Dropout(dropout_rate)(x)
@@ -314,8 +313,8 @@ def __conv_block(ip, nb_filter, bottleneck=False, dropout_rate=None, weight_deca
beta_regularizer=l2(weight_decay))(x)
x = Activation('relu')(x)
x = Conv2D(nb_filter, (3, 3), kernel_initializer="he_uniform", padding="same", use_bias=False,
kernel_regularizer=l2(weight_decay))(x)
x = Convolution2D(nb_filter, 3, 3, init="he_uniform", border_mode="same", bias=False,
W_regularizer=l2(weight_decay))(x)
if dropout_rate:
x = Dropout(dropout_rate)(x)
@@ -338,11 +337,11 @@ def __transition_block(ip, nb_filter, compression=1.0, dropout_rate=None, weight
concat_axis = 1 if K.image_dim_ordering() == "th" else -1
x = BatchNormalization(axis=concat_axis, gamma_regularizer=l2(weight_decay),
x = BatchNormalization(mode=0, axis=concat_axis, gamma_regularizer=l2(weight_decay),
beta_regularizer=l2(weight_decay))(ip)
x = Activation('relu')(x)
x = Conv2D(nb_filter, (3, 3), kernel_initializer="he_uniform", padding="same", use_bias=False,
kernel_regularizer=l2(weight_decay))(x)
x = Convolution2D(int(nb_filter * compression), 1, 1, init="he_uniform", border_mode="same", bias=False,
W_regularizer=l2(weight_decay))(x)
if dropout_rate:
x = Dropout(dropout_rate)(x)
x = AveragePooling2D((2, 2), strides=(2, 2))(x)
@@ -376,16 +375,15 @@ def __dense_block(x, nb_layers, nb_filter, growth_rate, bottleneck=False, dropou
x = __conv_block(x, growth_rate, bottleneck, dropout_rate, weight_decay)
x_list.append(x)
x1 = concatenate(x_list, axis=concat_axis)
#x = merge(x_list, mode='concat', concat_axis=concat_axis)
x = merge(x_list, mode='concat', concat_axis=concat_axis)
if grow_nb_filters:
nb_filter += growth_rate
if return_concat_list:
return x1, nb_filter, x_list
return x, nb_filter, x_list
else:
return x1, nb_filter
return x, nb_filter
def __transition_up_block(ip, nb_filters, type='upsampling', output_shape=None, weight_decay=1E-4):
@@ -404,13 +402,11 @@ def __transition_up_block(ip, nb_filters, type='upsampling', output_shape=None,
if type == 'upsampling':
x = UpSampling2D()(ip)
elif type == 'subpixel':
x = Conv2D(nb_filters, (3, 3), padding="same", kernel_regularizer=l2(weight_decay), activation='relu',
use_bias=False, kernel_initializer='he_uniform')(ip)
#x = Convolution2D(nb_filters, 3, 3, activation="relu", border_mode='same', W_regularizer=l2(weight_decay),
# bias=False, init='he_uniform')(ip)
x = Convolution2D(nb_filters, 3, 3, activation="relu", border_mode='same', W_regularizer=l2(weight_decay),
bias=False, init='he_uniform')(ip)
x = SubPixelUpscaling(scale_factor=2)(x)
x = Conv2D(nb_filters, (3, 3), activation="relu", padding='same', kernel_regularizer=l2(weight_decay),
use_bias=False, kernel_initializer='he_uniform')(x)
x = Convolution2D(nb_filters, 3, 3, activation="relu", border_mode='same', W_regularizer=l2(weight_decay),
bias=False, init='he_uniform')(x)
elif type == 'atrous':
# waiting on https://github.com/fchollet/keras/issues/4018
x = AtrousConvolution2D(nb_filters, 3, 3, activation="relu", W_regularizer=l2(weight_decay),
@@ -482,8 +478,8 @@ def __create_dense_net(nb_classes, img_input, include_top, depth=40, nb_dense_bl
compression = 1.0 - reduction
# Initial convolution
x = Conv2D(nb_filter, (3, 3), kernel_initializer="he_uniform", padding="same", name="initial_conv2D", use_bias=False,
kernel_regularizer=l2(weight_decay))(img_input)
x = Convolution2D(nb_filter, 3, 3, init="he_uniform", border_mode="same", name="initial_conv2D", bias=False,
W_regularizer=l2(weight_decay))(img_input)
# Add dense blocks
for block_idx in range(nb_dense_block - 1):
@@ -498,13 +494,13 @@ def __create_dense_net(nb_classes, img_input, include_top, depth=40, nb_dense_bl
x, nb_filter = __dense_block(x, final_nb_layer, nb_filter, growth_rate, bottleneck=bottleneck,
dropout_rate=dropout_rate, weight_decay=weight_decay)
x = BatchNormalization(axis=concat_axis, gamma_regularizer=l2(weight_decay),
x = BatchNormalization(mode=0, axis=concat_axis, gamma_regularizer=l2(weight_decay),
beta_regularizer=l2(weight_decay))(x)
x = Activation('relu')(x)
x = GlobalAveragePooling2D()(x)
if include_top:
x = Dense(nb_classes, activation='softmax', kernel_regularizer=l2(weight_decay), bias_regularizer=l2(weight_decay))(x)
x = Dense(nb_classes, activation='softmax', W_regularizer=l2(weight_decay), b_regularizer=l2(weight_decay))(x)
return x
@@ -575,8 +571,8 @@ def __create_fcn_dense_net(nb_classes, img_input, include_top, nb_dense_block=5,
compression = 1.0 - reduction
# Initial convolution
x = Conv2D(init_conv_filters, (3, 3), kernel_initializer="he_uniform", padding="same", name="initial_conv2D",
use_bias=False, kernel_regularizer=l2(weight_decay))(img_input)
x = Convolution2D(init_conv_filters, 3, 3, init="he_uniform", border_mode="same", name="initial_conv2D", bias=False,
W_regularizer=l2(weight_decay))(img_input)
nb_filter = init_conv_filters
@@ -620,12 +616,12 @@ def __create_fcn_dense_net(nb_classes, img_input, include_top, nb_dense_block=5,
# upsampling block must upsample only the feature maps (concat_list[1:]),
# not the concatenation of the input with the feature maps (concat_list[0].
l = concatenate(concat_list[1:], axis=concat_axis)
l = merge(concat_list[1:], mode='concat', concat_axis=concat_axis)
t = __transition_up_block(l, nb_filters=n_filters_keep, type=upsampling_type, output_shape=out_shape)
# concatenate the skip connection with the transition block
x = concatenate([t, skip_list[block_idx]], axis=concat_axis)
x = merge([t, skip_list[block_idx]], mode='concat', concat_axis=concat_axis)
if K.image_dim_ordering() == 'th':
out_shape[2] *= 2
@@ -641,8 +637,8 @@ def __create_fcn_dense_net(nb_classes, img_input, include_top, nb_dense_block=5,
return_concat_list=True, grow_nb_filters=False)
if include_top:
x = Conv2D(nb_classes, (1, 1), activation='linear', padding='same', kernel_regularizer=l2(weight_decay),
use_bias=False)(x)
x = Convolution2D(nb_classes, 1, 1, activation='linear', border_mode='same', W_regularizer=l2(weight_decay),
bias=False)(x)
if K.image_dim_ordering() == 'th':
channel, row, col = input_shape