Пример #1
0
def get_model(N, k, nb_classes):
    model_script_path = os.path.join(os.path.dirname(__file__), '..')
    model_script_path = os.path.abspath(model_script_path)
    sys.path.append(model_script_path)
    import wide_residual_network as wrn

    init_shape = (32, 32, 3)
    model = wrn.create_wide_residual_network(init_shape,
                                             nb_classes=nb_classes,
                                             N=N,
                                             k=k,
                                             dropout=0.00)
    return model
Пример #2
0
generator = ImageDataGenerator(rotation_range=10,
                               width_shift_range=5. / 32,
                               height_shift_range=5. / 32,
                               horizontal_flip=True)

generator.fit(trainX, seed=0, augment=True)

init_shape = (3, 32, 32) if K.image_dim_ordering() == 'th' else (32, 32, 3)

# For WRN-16-8 put N = 2, k = 8
# For WRN-28-10 put N = 4, k = 10
# For WRN-40-4 put N = 6, k = 4
model = wrn.create_wide_residual_network(init_shape,
                                         nb_classes=10,
                                         N=4,
                                         k=8,
                                         dropout=0.0)

model.summary()
#plot_model(model, "WRN-28-8.png", show_shapes=False)

model.compile(loss="categorical_crossentropy",
              optimizer="adam",
              metrics=["acc"])
print("Finished compiling")
print("Allocating GPU memory")

# model.load_weights("weights/WRN-28-8 Weights.h5")
# print("Model loaded.")
Пример #3
0
    # color preprocessing
    x_train45, x_val, y_train45, y_val = train_test_split(
        x_train, y_train, test_size=0.1,
        random_state=seed)  # random_state = seed
    x_train45, x_val, x_test = color_preprocessing(x_train45, x_val, x_test)

    y_train45 = keras.utils.to_categorical(y_train45, num_classes)
    y_val = keras.utils.to_categorical(y_val, num_classes)
    y_test = keras.utils.to_categorical(y_test, num_classes)

    # build network
    img_input = Input(shape=(img_rows, img_cols, img_channels))
    model = wrn.create_wide_residual_network(img_input,
                                             nb_classes=num_classes,
                                             N=n,
                                             k=growth_rate,
                                             dropout=0.0)
    print(model.summary())
    # set optimizer
    sgd = optimizers.SGD(lr=.1, momentum=0.9, nesterov=True)
    model.compile(loss='categorical_crossentropy',
                  optimizer=sgd,
                  metrics=['accuracy'])

    # set callback
    change_lr = LearningRateScheduler(scheduler)
    checkpointer = ModelCheckpoint('model_wide_28_10_c10_best.hdf5',
                                   verbose=1,
                                   save_best_only=True)
    cbks = [change_lr, checkpointer]
# Set up the callbacks
metrics_callback = MetricsCallback(validation_data=(X_test, Y_test))
checkpoint_callback = CheckpointCallback(monitor='accuracy',
                                         verbose=verbose,
                                         save_weights_only=False)
#lr_callback = LearningRateScheduler(schedule=schedule)

callbacks = [metrics_callback, checkpoint_callback]

#For WRN-28-10 N = (nb_layers-4)/6 = (28-4)/6 = 4, k=10  (maybe memory constraints!!!) 4.17%
#For WRN-16-8 N = (nb_layers-4)/6 = (16-4)/6 = 2, k=8 4.81%
#For WRN-40-4 N = (nb_layers-4)/6 = (16-4)/6 = 2, k=8 4.97%

model = wrn.create_wide_residual_network(img_shape,
                                         nb_classes=8,
                                         N=4,
                                         k=10,
                                         dropout=0.5)

# set the optimizer
sgd = SGD(lr=0.1, decay=1e-5, momentum=0.9, nesterov=True)

# Compile the model
model.compile(loss='categorical_crossentropy', optimizer=sgd)

#model.load_weights('../logs_nodrop_128_zca/model-epoch-000032-acc_test-0.86199.hdf5')

# Model Summary
print(model.summary())

model.fit_generator(generator.flow(X_train, Y_train, batch_size=batch_size),
Пример #5
0
        wtype, embed_dim, scale, N, k, batch_size, epoch_num, target_blk_id)
    modelname_prefix = os.path.join(
        RESULT_PATH, 'wrn_' + history_hdf_path.replace('/', '_'))

    # Initialize the process for the watermark
    b = np.ones((1, embed_dim))
    watermark_regularizer = WatermarkRegularizer(scale,
                                                 b,
                                                 wtype=wtype,
                                                 randseed=randseed)

    init_shape = (3, 32, 32) if K.image_dim_ordering() == 'th' else (32, 32, 3)
    model = wrn.create_wide_residual_network(
        init_shape,
        nb_classes=classes_num,
        N=N,
        k=k,
        dropout=0.00,
        wmark_regularizer=watermark_regularizer,
        target_blk_num=target_blk_id)
    model.summary()
    print('Watermark matrix:\n{}'.format(watermark_regularizer.get_matrix()))

    # Training process
    sgd = SGD(lr=0.1, momentum=0.9, nesterov=True)
    model.compile(loss="categorical_crossentropy",
                  optimizer=sgd,
                  metrics=["acc"])
    if len(base_modelw_fname) > 0:
        model.load_weights(base_modelw_fname)
    print("Finished compiling.")
    else:
        return 0.0008

lrschedule = LearningRateScheduler(lr_scheduler_fxn, verbose=1) 
tboard     = TensorBoard(log_dir=os.path.join(root_folder, "logs"))
checkpoint = ModelCheckpoint(
                filepath=os.path.join(root_folder, "checkpoints", 
                                    "wts_{epoch:02d}-{loss:.2f}.h5"),
                verbose=True, 
                save_weights_only=True
            )

# Network 
model = wrn.create_wide_residual_network(
            (32,32,3),
            nb_classes=10, 
            N=4, k=10, 
            dropout=0.0
        )
print(model.summary())
sgd = SGD(lr=0.1, momentum=0.9, nesterov=True)
model.compile(loss="categorical_crossentropy", optimizer=sgd, metrics=["accuracy"]) 

# Train 
history = model.fit_generator(
        train_dgen.flow(trainX, trainY, batch_size=batch_size),
        steps_per_epoch=len(trainX) // batch_size + 1, 
        validation_data=test_dgen.flow(testX, testY, batch_size=batch_size),
        validation_steps=len(testX) // batch_size + 1,
        epochs=epochs,
        callbacks=[lrschedule, tboard, checkpoint]
    )
Пример #7
0
import time

if lib.isnotebook():
    from keras_tqdm import TQDMNotebookCallback as KerasCallBack
else: 
    from keras_tqdm import TQDMCallback as KerasCallBack


# In[5]:


print('Building model...')
K.set_image_data_format('channels_last')

# wrn 28 10
model = wrn.create_wide_residual_network((32, 32, 3), nb_classes=100, N=5, k=10, dropout=0.3, verbose=1)


# In[6]:


print('Loading data...')
data = lib.load_data()
x_train = data['x_train']
y_train = data['y_train']


# In[16]:


x_train.shape, y_train.shape
Пример #8
0
    fill_mode="constant",
    cval = 0
)

img_gen.fit(X_train45)
Y_train45 = np_utils.to_categorical(Y_train45, nb_classes)  # 1-hot vector
y_val = np_utils.to_categorical(y_val, nb_classes)
y_test = np_utils.to_categorical(y_test, nb_classes)


init_shape = (3, 32, 32) if K.image_dim_ordering() == 'th' else (32, 32, 3)

# For WRN-16-8 put N = 2, k = 8
# For WRN-28-10 put N = 4, k = 10
# For WRN-40-4 put N = 6, k = 4
model = wrn.create_wide_residual_network(init_shape, nb_classes=nb_classes, N=2, k=4, dropout=0.00)

model.summary()
#plot_model(model, "WRN-16-8.png", show_shapes=False)

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["acc"])
print("Finished compiling")

#model.load_weights("weights/WRN-16-8 Weights.h5")
print("Model loaded.")

hist = model.fit_generator(img_gen.flow(X_train45, Y_train45, batch_size=batch_size, shuffle=True),
                   steps_per_epoch=len(X_train45) // batch_size, epochs=nb_epoch,
                   callbacks=[callbacks.ModelCheckpoint("WRN_16_4_Weights_cifar100.h5",
                                                        monitor="val_acc",
                                                        save_best_only=True,
testX = testX.astype('float32')
testX = (testX - testX.mean(axis=0)) / (testX.std(axis=0))

trainY = kutils.to_categorical(trainY)
testY = kutils.to_categorical(testY)

generator = ImageDataGenerator(rotation_range=10,
                               width_shift_range=5./32,
                               height_shift_range=5./32,)

init_shape = (3, 32, 32) if K.image_dim_ordering() == 'th' else (32, 32, 3)

# For WRN-16-8 put N = 2, k = 8
# For WRN-28-10 put N = 4, k = 10
# For WRN-40-4 put N = 6, k = 4
model = wrn.create_wide_residual_network(init_shape, nb_classes=10, N=2, k=8, dropout=0.00)

model.summary()
plot_model(model, "WRN-16-8.png", show_shapes=False)

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["acc"])
print("Finished compiling")

#model.load_weights("weights/WRN-16-8 Weights.h5")
print("Model loaded.")

model.fit_generator(generator.flow(trainX, trainY, batch_size=batch_size), steps_per_epoch=len(trainX) // batch_size, epochs=nb_epoch,
                   callbacks=[callbacks.ModelCheckpoint("weights/WRN-16-8 Weights.h5",
                                                        monitor="val_acc",
                                                        save_best_only=True,
                                                        verbose=1)],
Пример #10
0
    width_shift_range=4.0 /
    32,  # randomly shift images horizontally (fraction of total width)
    height_shift_range=4.0 /
    32,  # randomly shift images vertically (fraction of total height)
    fill_mode='constant',
    cval=0,
    horizontal_flip=True,  # randomly flip images
    # vertical_flip=False
)

# model = wrn.build_model((32, 32, 3,), classes=100, n=4, k=10, dropout=0.3, weight_decay=0.0005, verbose=True)
model = wrn2.create_wide_residual_network((
    32,
    32,
    3,
),
                                          nb_classes=num_classes,
                                          N=4,
                                          k=10,
                                          dropout=0.3)

model.compile(loss='categorical_crossentropy',
              optimizer=optimizers.SGD(lr=0.1,
                                       momentum=0.9,
                                       decay=0.0,
                                       nesterov=True),
              metrics=['accuracy'])

model.summary()

train_data_generator.fit(train_data)
Пример #11
0
 def __init__(self, weightsFile):
     (self.trainX, trainY), (testX, testY) = cifar10.load_data()
     init_shape = (3, 32, 32) if K.image_dim_ordering() == 'th' else (32, 32, 3)
     self.model = wrn.create_wide_residual_network(init_shape, nb_classes=10, N=2, k=8, dropout=0.00)
     self.model.load_weights(weightsFile)
     self.graph = tf.get_default_graph()
Пример #12
0
generator = ImageDataGenerator(rotation_range=10,
                               width_shift_range=5. / 32,
                               height_shift_range=5. / 32,
                               horizontal_flip=True)

generator.fit(trainX, seed=0, augment=True)

init = Input(shape=(3, img_rows, img_cols), )

# For WRN-16-8 put N = 2, k = 8
# For WRN-28-10 put N = 4, k = 10
# For WRN-40-4 put N = 6, k = 4
wrn_16_8 = wrn.create_wide_residual_network(init,
                                            nb_classes=10,
                                            N=2,
                                            k=8,
                                            dropout=0.00)

model = Model(input=init, output=wrn_16_8)

model.summary()
#plot(model, "WRN-16-8.png", show_shapes=False)

model.compile(loss="categorical_crossentropy",
              optimizer="adam",
              metrics=["acc"])
print("Finished compiling")

model.load_weights("weights/WRN-16-8 Weights.h5")
print("Model loaded.")