Пример #1
0
    def critic_optimizer(self):
        discounted_reward = K.placeholder(shape=(None, ))

        value = self.critic.output

        loss = K.mean(K.square(discounted_reward - value))

        optimizer = RMSprop(lr=self.critic_lr, rho=0.99, epsilon=0.01)
        updates = optimizer.get_updates(self.critic.trainable_weights, [], loss)
        train = K.function([self.critic.input, discounted_reward], [loss], updates=updates)
        return train
    def optimizer(self):
        a = K.placeholder(shape=(None, ), dtype='int32')
        y = K.placeholder(shape=(None, ), dtype='float32')

        py_x = self.model.output

        a_one_hot = K.one_hot(a, self.action_size)
        q_value = K.sum(py_x * a_one_hot, axis=1)
        error = K.abs(y - q_value)

        quadratic_part = K.clip(error, 0.0, 1.0)
        linear_part = error - quadratic_part
        loss = K.mean(0.5 * K.square(quadratic_part) + linear_part)

        optimizer = RMSprop(lr=0.00025, epsilon=0.01)
        updates = optimizer.get_updates(self.model.trainable_weights, [], loss)
        train = K.function([self.model.input, a, y], [loss], updates=updates)

        return train
Пример #3
0
    def build_functions(self):
        S = Input(shape=self.state_size)
        NS = Input(shape=self.state_size)
        A = Input(shape=(1,), dtype='int32')
        R = Input(shape=(1,), dtype='float32')
        T = Input(shape=(1,), dtype='int32')
        self.build_model()
        self.value_fn = K.function([S], self.model(S))

        VS = self.model(S)
        VNS = disconnected_grad(self.model(NS))
        future_value = (1-T) * VNS.max(axis=1, keepdims=True)
        discounted_future_value = self.discount * future_value
        target = R + discounted_future_value
        cost = ((VS[:, A] - target)**2).mean()
        opt = RMSprop(0.0001)
        params = self.model.trainable_weights
        updates = opt.get_updates(params, [], cost)
        self.train_fn = K.function([S, NS, A, R, T], cost, updates=updates)
Пример #4
0
    def actor_optimizer(self):
        action = K.placeholder(shape=[None, self.action_size])
        advantages = K.placeholder(shape=[None, ])

        policy = self.actor.output

        good_prob = K.sum(action * policy, axis=1)
        eligibility = K.log(good_prob + 1e-10) * advantages
        actor_loss = -K.sum(eligibility)

        entropy = K.sum(policy * K.log(policy + 1e-10), axis=1)
        entropy = K.sum(entropy)

        loss = actor_loss + 0.01*entropy
        optimizer = RMSprop(lr=self.actor_lr, rho=0.99, epsilon=0.01)
        updates = optimizer.get_updates(self.actor.trainable_weights, [], loss)
        train = K.function([self.actor.input, action, advantages], [loss], updates=updates)

        return train
Пример #5
0
    def build_functions(self):
        self.build_model()
                
        S = Input(shape=(self.state_size,))
        NS = Input(shape=(self.state_size,))
        A = Input(shape=(1,), dtype='int32')
        R = Input(shape=(1,), dtype='float32')
        T = Input(shape=(1,), dtype='int32')
        
        self.value_fn = kb.function([S], [self.model(S)])

        values = self.model(S)
        next_values = self.model(NS) #disconnected_grad(self.model(NS))
        future_value = kb.cast((1-T), dtype='float32') * kb.max(next_values, axis=1, keepdims=True)
        discounted_future_value = self.discount * future_value
        target = R + discounted_future_value
        cost = kb.mean(kb.pow(values - target, 2))
        opt = RMSprop(0.0001)
        params = self.model.trainable_weights
        updates = opt.get_updates(params, [], cost)
        self.train_fn = kb.function([S, NS, A, R, T], [cost], updates=updates)
Пример #6
0
    print_step('Build model...')
    inp = Input(shape=(maxlen, ))
    x = Embedding(max_features,
                  embed_size,
                  weights=[embedding_matrix],
                  trainable=False)(inp)
    x = Bidirectional(CuDNNGRU(64, return_sequences=True))(x)
    x = Dropout(0.3)(x)
    x = Bidirectional(CuDNNGRU(64, return_sequences=False))(x)
    x = Dense(32, activation='relu')(x)
    outp = Dense(6, activation='sigmoid')(x)

    model = Model(inputs=inp, outputs=outp)
    model.compile(loss='binary_crossentropy',
                  optimizer=RMSprop(clipvalue=1, clipnorm=1),
                  metrics=['accuracy'])
    model.save_weights('cache/cudnngru-model-weights.h5')

    print_step('Making KFold for CV')
    kf = StratifiedKFold(n_splits=5, shuffle=True, random_state=2017)

    i = 1
    cv_scores = []
    pred_train = np.zeros((train_df.shape[0], 6))
    pred_full_test = np.zeros((test_df.shape[0], 6))
    for dev_index, val_index in kf.split(x_train, y_train[:, 0]):
        print_step('Started fold ' + str(i))
        model.load_weights('cache/cudnngru-model-weights.h5')
        dev_X, val_X = x_train[dev_index], x_train[val_index]
        dev_y, val_y = y_train[dev_index, :], y_train[val_index, :]
Пример #7
0
                   include_top=False,
                   input_tensor=Input(shape=(128, 128, 3)))

print("[INFO] surgering model...")
top_model = FCHeadNet.build(base_model, 17, 256)

for layer in base_model.layers:
    layer.trainable = False
model = Model(inputs=base_model.input, outputs=top_model)

print("[INFO] compiling model...")
opt_name = args['optimizer_1'].lower()
if opt_name not in opts: opt_name = opts[0]
if opt_name == 'sgd': opt = SGD(lr=args['lrt_1'])
elif opt_name == 'adam': opt = Adam(lr=args['lrt_1'])
else: opt = RMSprop(lr=args['lrt_1'])
model.compile(loss="categorical_crossentropy",
              optimizer=opt,
              metrics=["accuracy"])

print("[INFO] training top layers...")
aug = ImageDataGenerator(rotation_range=10,
                         width_shift_range=0.1,
                         height_shift_range=0.1,
                         horizontal_flip=True,
                         fill_mode="nearest")
H = model.fit_generator(aug.flow(trainX, trainY, batch_size=64),
                        validation_data=(testX, testY),
                        epochs=args['epochs_1'],
                        steps_per_epoch=len(trainX) // 64,
                        verbose=1)
import matplotlib.pyplot as plt
import keras
from keras.applications.inception_v3 import InceptionV3, preprocess_input
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import SGD, RMSprop, Adagrad

IM_WIDTH, IM_HEIGHT = 299, 299  #Fixed size for InceptionV3
DEFAULT_EPOCHS = 100
DEFAULT_BATCHES = 10
FC_SIZE = 1024
NB_LAYERS_TO_FREEZE = 169

sgd = SGD(lr=1e-7, decay=0.5, momentum=1, nesterov=True)
rms = RMSprop(lr=1e-7, rho=0.9, epsilon=1e-08, decay=0.0)
ada = Adagrad(lr=1e-7, epsilon=1e-08, decay=0.0)
optimizer = sgd


def generate_timestamp():
    timestring = time.strftime("%Y_%m_%d-%H_%M_%S")
    print("Time stamp generated: " + timestring)
    return timestring


timestr = generate_timestamp()


def is_valid_file(parser, arg):
    if not os.path.isfile(arg):
Пример #9
0
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(784, )))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))

model.summary()

model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])

history = ImportanceTraining(model, forward_batch_size=1024).fit(
    x_train,
    y_train,
    batch_size=batch_size,
    epochs=epochs,
    verbose=1,
    validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
Пример #10
0
                  2,
                  2,
                  input_shape=(imageSize, imageSize, 3),
                  activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

#################### Summary of the Model ###############################

model.summary()

#################### Compiling the Model ################################
optimizer = RMSprop(lr=0.0001, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(loss='categorical_crossentropy',
              optimizer=optimizer,
              metrics=['accuracy'])

#################### Defining the Checkpoints ###########################
l_r = ReduceLROnPlateau(monitor='val_acc',
                        factor=0.5,
                        patience=3,
                        verbose=1,
                        min_lr=0.000001)

wigth = ModelCheckpoint(weightFile, monitor='val_categorical_accuracy')
callbacks = [wigth, l_r]

datagen = ImageDataGenerator(featurewise_center=True,
Пример #11
0
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer=RMSprop(lr=0.0001),
              metrics=['accuracy'])

model.load_weights("model.h5")

test_data_generator = ImageDataGenerator(rescale=1. / 255)

test_generator = test_data_generator.flow_from_directory(
    "./temp-spectrograms",
    target_size=(IMAGE_WIDTH, IMAGE_HEIGHT),
    batch_size=1,
    class_mode="binary",
    shuffle=False)

filenames = test_generator.filenames
nb_samples = len(filenames)
    model_out_file = 'Pretrain/%s_DMF4_%s_%d.h5' % (args.dataset, args.layers, time())

    # Loading data
    t1 = time()
    dataset = Dataset(args.path + args.dataset)
    train, testRatings, testNegatives = dataset.trainMatrix, dataset.testRatings, dataset.testNegatives
    num_users, num_items = train.shape
    print("Load data done [%.1f s]. #user=%d, #item=%d, #train=%d, #test=%d"
          % (time() - t1, num_users, num_items, train.nnz, len(testRatings)))

    # Build model
    model = get_model(num_users, num_items, layers, reg_layers)
    if learner.lower() == "adagrad":
        model.compile(optimizer=Adagrad(lr=learning_rate), loss='binary_crossentropy')
    elif learner.lower() == "rmsprop":
        model.compile(optimizer=RMSprop(lr=learning_rate), loss='binary_crossentropy')
    elif learner.lower() == "adam":
        model.compile(optimizer=Adam(lr=learning_rate), loss='binary_crossentropy')
    else:
        model.compile(optimizer=SGD(lr=learning_rate), loss='binary_crossentropy')

    # Check Init performance
    t1 = time()
    (hits, ndcgs) = evaluate_model(model, testRatings, testNegatives, topK, evaluation_threads)
    hr, ndcg = np.array(hits).mean(), np.array(ndcgs).mean()
    print('Init: HR = %.4f, NDCG = %.4f [%.1f]' % (hr, ndcg, time() - t1))

    # Train model
    best_hr, best_ndcg, best_iter = hr, ndcg, -1
    for epoch in range(epochs):
        t1 = time()
Пример #13
0
def train_on_subjset(all_subjects, model_file_name):
    print "start ----------{}-------".format(model_file_name)

    parser = argparse.ArgumentParser()
    parser.add_argument("-start_sub_idx",
                        help="first sub",
                        type=int,
                        default=0)
    parser.add_argument("-end_sub_idx",
                        help="first sub",
                        type=int,
                        default=len(all_subjects))
    # parser.add_argument("start_sub_idx", help="first sub",
    #                     type=int, default=len(all_subjects))
    # parser.add_argument("last_sub_idx", help="last sub",
    #                 type=int, default=len(all_subjects))

    args = parser.parse_args()
    start_idx = args.start_sub_idx
    end_idx = args.end_sub_idx

    import h5py
    f = h5py.File(model_file_name, 'r+')
    if 'optimizer_weights' in f:
        del f['optimizer_weights']
    f.close()
    only_p300_model_1 = keras.models.load_model(model_file_name)
    original_wights = only_p300_model_1.get_weights()

    for experiment_counter, subject in enumerate(
            all_subjects[start_idx:end_idx]):

        print "start subject:{}".format(subject)

        file_name = os.path.join(data_base_dir, subject)
        all_data_per_char, target_per_char, train_mode_per_block, all_data_per_char_as_matrix, target_per_char_as_matrix = create_data_rep_training(
            file_name, -240, 760, downsampe_params=8)

        for rep_per_sub, cross_validation_indexes in enumerate(
                list(
                    cross_validation.KFold(len(train_mode_per_block) / 10,
                                           n_folds=4,
                                           random_state=42,
                                           shuffle=True))):
            train_data_all_subject = []
            test_data_all_subject = []

            train_tags_all_subject = []
            test_tags_all_subject = []
            batch_size = 20
            select = 1
            train_as_p300 = False
            train_indexes = train_mode_per_block == 1
            validation_indexes = train_mode_per_block == 2
            test_indexes = train_mode_per_block != 1

            if train_as_p300:

                data_generator_batch = triplet_data_generator_no_dict(
                    all_data_per_char_as_matrix[train_indexes],
                    target_per_char_as_matrix[train_indexes],
                    batch_size=batch_size,
                    select=select,
                    debug_mode=False)
            else:
                # cross_validation_indexes = list(cross_validation.KFold(len(train_mode_per_block)/10, n_folds=4,
                #                                                               random_state=42, shuffle=True))

                def flatten_repetitions(data_to_flatten):
                    return np.reshape(
                        np.reshape(data_to_flatten.T * 10,
                                   (-1, 1)) + np.arange(10), (-1))

                train_indexes = flatten_repetitions(
                    cross_validation_indexes[0])
                test_indexes = flatten_repetitions(cross_validation_indexes[1])

                # data_generator_batch = simple_data_generator_no_dict(all_data_per_char_as_matrix[train_indexes],
                #                                                   target_per_char_as_matrix[train_indexes], shuffle_data=False)
                #
                # test_data_generator_batch = simple_data_generator_no_dict(all_data_per_char_as_matrix[train_indexes],
                #                                                      target_per_char_as_matrix[train_indexes],
                #                                                      shuffle_data=False)

                train_data_all_subject.append(
                    np.asarray(
                        all_data_per_char_as_matrix[train_indexes]).astype(
                            np.float32))
                test_data_all_subject.append(
                    np.asarray(
                        all_data_per_char_as_matrix[test_indexes]).astype(
                            np.float32))

                train_tags_all_subject.append(
                    target_per_char_as_matrix[train_indexes])
                test_tags_all_subject.append(
                    target_per_char_as_matrix[test_indexes])

            eeg_sample_shape = (25, 55)
            # keras.models.load_model(model_file_name)  #

            #

            only_p300_model_1.set_weights(
                original_wights
            )  #=   get_only_P300_model_LSTM_CNN(eeg_sample_shape)

            only_p300_model_1.summary()

            from keras.optimizers import RMSprop

            only_p300_model_1.compile(
                optimizer=RMSprop(),
                loss='binary_crossentropy',
                metrics=['accuracy'],
            )
            model = only_p300_model_1
            print "after compile"

            # model = LDA()
            train_data = stats.zscore(np.vstack(train_data_all_subject),
                                      axis=1)
            train_tags = np.vstack(train_tags_all_subject).flatten()

            test_data = stats.zscore(np.vstack(test_data_all_subject), axis=1)
            test_tags = np.vstack(test_tags_all_subject).flatten()

            accuracy_train, auc_score_train = predict_using_model(
                model,
                test_data.reshape(test_data.shape[0] * test_data.shape[1],
                                  test_data.shape[2], test_data.shape[3]),
                test_tags)
            #
            print "{} before train accuracy_test {}:{}, auc_score_test:{} ".format(
                subject, rep_per_sub, accuracy_train, auc_score_train)

            accuracy_train, auc_score_train = predict_using_model(
                model,
                train_data.reshape(train_data.shape[0] * train_data.shape[1],
                                   train_data.shape[2], train_data.shape[3]),
                train_tags)

            print "{} before train  accuracy_train {}:{}, auc_score_train:{} ".format(
                subject, rep_per_sub, accuracy_train, auc_score_train)

            # model.optimizer.lr.set_value(0.0001)
            # for i in range(1):
            #     model.fit(train_data.reshape(train_data.shape[0] * train_data.shape[1],
            #                                  train_data.shape[2], train_data.shape[3]), train_tags,
            #               verbose=1, nb_epoch=2, batch_size=600, shuffle=True)
            #
            #     accuracy_train, auc_score_train = predict_using_model(model,
            #                                                           test_data.reshape(test_data.shape[0] * test_data.shape[1],
            #                                                                             test_data.shape[2], test_data.shape[3]),
            #                                                           test_tags)
            #
            #     print "{} after train accuracy_test {}:{}, auc_score_test:{} ".format(subject, rep_per_sub, accuracy_train, auc_score_train)
            #
            #     accuracy_train, auc_score_train = predict_using_model(model,
            #                                                           train_data.reshape(
            #                                                               train_data.shape[0] * train_data.shape[1],
            #                                                               train_data.shape[2], train_data.shape[3]), train_tags)
            #
            #     print "{} after train accuracy_train {}:{}, auc_score_train:{} ".format(subject, rep_per_sub, accuracy_train, auc_score_train)
            #
            # # model.save(r"c:\temp\{}.h5".format(model_file_name,overwrite=True))

            print "end ----------{}-------".format(file_name)

    pass
Пример #14
0

def eigen_reg(weight_matrix):
    eigenvalue, _ = K.tf.linalg.eigh(weight_matrix)
    eigenvalue = K.variable(eigenvalue)
    return K.sum(
        K.cast_to_floatx(l1_lambda) *
        K.abs(K.ones_like(eigenvalue) - eigenvalue))


print('Evaluate Model {}...'.format(model_name))
model = Sequential()
model.add(SimpleRNN(hidden_units, input_shape=x_train.shape[1:]))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
rmsprop = RMSprop(lr=learning_rate)
model.compile(loss='categorical_crossentropy',
              optimizer=rmsprop,
              metrics=['accuracy'])

train_log = keras.callbacks.CSVLogger(
    os.path.join('expr', model_name, 'training.log'))


class ParamLogger(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        logging.basicConfig(filename=os.path.join('expr', model_name,
                                                  'params_recorder.log'),
                            level=logging.INFO)

    def on_batch_end(self, batch, logs={}):
Пример #15
0

train_features, train_labels = extract_features(train_dir, 2000)
validation_features, validation_labels = extract_features(validation_dir, 1000)
test_features, test_labels = extract_features(test_dir, 1000)

train_features = np.reshape(train_features, (2000, 4 * 4 * 215))
validation_features = np.reshape(validation_features, (1000, 4 * 4 * 215))
test_features = np.reshape(test_features, (1000, 4 * 4 * 215))

model = Sequential()
model.add(Dense(156, activation='relu', input_dim=4 * 4 * 512))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer=RMSprop(lr=2e-5),
              loss='binary_crossentropy',
              metrics=['acc'])
history = model.fit(train_features,
                    train_labels,
                    epochs=10,
                    batch_size=20,
                    validation_data=(validation_features, validation_labels))

acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(1, len(acc) + 1)
Пример #16
0
# Setup environment
env = environment.env

img_rows, img_cols = 64, 64
img_channels = 4  # We stack 4 frames

state_size = (img_rows, img_cols, img_channels)
action_size = environment.action_size
value_size = 1

STEPS = 200
batch_size = 1 * STEPS

lr = 7e-4  # (7 * 10^-4) = 0.0007
optimizer = RMSprop(lr=lr, epsilon=1e-5, decay=0.99, clipvalue=0.5)
actor_model = Network.actor_network(state_size, action_size, optimizer)
critic_model = Network.critic_network(state_size, value_size, optimizer)

agent = A2CAgent(actor_model,
                 critic_model,
                 state_size,
                 action_size,
                 value_size,
                 observe=0,
                 batch_size=batch_size,
                 gamma=.99)
try:
    agent.load_weights("savepoint/CarRacing-v0-220episode")
except Exception as error:
    print(error.strerror)
def get_unet_1024(input_shape=(1024, 1024, 3), num_classes=1):
    inputs = Input(shape=input_shape)
    # 1024

    down0b = Conv2D(8, (3, 3), padding='same')(inputs)
    down0b = BatchNormalization()(down0b)
    down0b = Activation('relu')(down0b)
    down0b = Conv2D(8, (3, 3), padding='same')(down0b)
    down0b = BatchNormalization()(down0b)
    down0b = Activation('relu')(down0b)
    down0b_pool = MaxPooling2D((2, 2), strides=(2, 2))(down0b)
    # 512

    down0a = Conv2D(16, (3, 3), padding='same')(down0b_pool)
    down0a = BatchNormalization()(down0a)
    down0a = Activation('relu')(down0a)
    down0a = Conv2D(16, (3, 3), padding='same')(down0a)
    down0a = BatchNormalization()(down0a)
    down0a = Activation('relu')(down0a)
    down0a_pool = MaxPooling2D((2, 2), strides=(2, 2))(down0a)
    # 256

    down0 = Conv2D(32, (3, 3), padding='same')(down0a_pool)
    down0 = BatchNormalization()(down0)
    down0 = Activation('relu')(down0)
    down0 = Conv2D(32, (3, 3), padding='same')(down0)
    down0 = BatchNormalization()(down0)
    down0 = Activation('relu')(down0)
    down0_pool = MaxPooling2D((2, 2), strides=(2, 2))(down0)
    # 128

    down1 = Conv2D(64, (3, 3), padding='same')(down0_pool)
    down1 = BatchNormalization()(down1)
    down1 = Activation('relu')(down1)
    down1 = Conv2D(64, (3, 3), padding='same')(down1)
    down1 = BatchNormalization()(down1)
    down1 = Activation('relu')(down1)
    down1_pool = MaxPooling2D((2, 2), strides=(2, 2))(down1)
    # 64

    down2 = Conv2D(128, (3, 3), padding='same')(down1_pool)
    down2 = BatchNormalization()(down2)
    down2 = Activation('relu')(down2)
    down2 = Conv2D(128, (3, 3), padding='same')(down2)
    down2 = BatchNormalization()(down2)
    down2 = Activation('relu')(down2)
    down2_pool = MaxPooling2D((2, 2), strides=(2, 2))(down2)
    # 32

    down3 = Conv2D(256, (3, 3), padding='same')(down2_pool)
    down3 = BatchNormalization()(down3)
    down3 = Activation('relu')(down3)
    down3 = Conv2D(256, (3, 3), padding='same')(down3)
    down3 = BatchNormalization()(down3)
    down3 = Activation('relu')(down3)
    down3_pool = MaxPooling2D((2, 2), strides=(2, 2))(down3)
    # 16

    down4 = Conv2D(512, (3, 3), padding='same')(down3_pool)
    down4 = BatchNormalization()(down4)
    down4 = Activation('relu')(down4)
    down4 = Conv2D(512, (3, 3), padding='same')(down4)
    down4 = BatchNormalization()(down4)
    down4 = Activation('relu')(down4)
    down4_pool = MaxPooling2D((2, 2), strides=(2, 2))(down4)
    # 8

    center = Conv2D(1024, (3, 3), padding='same')(down4_pool)
    center = BatchNormalization()(center)
    center = Activation('relu')(center)
    center = Conv2D(1024, (3, 3), padding='same')(center)
    center = BatchNormalization()(center)
    center = Activation('relu')(center)
    # center

    up4 = UpSampling2D((2, 2))(center)
    up4 = concatenate([down4, up4], axis=3)
    up4 = Conv2D(512, (3, 3), padding='same')(up4)
    up4 = BatchNormalization()(up4)
    up4 = Activation('relu')(up4)
    up4 = Conv2D(512, (3, 3), padding='same')(up4)
    up4 = BatchNormalization()(up4)
    up4 = Activation('relu')(up4)
    up4 = Conv2D(512, (3, 3), padding='same')(up4)
    up4 = BatchNormalization()(up4)
    up4 = Activation('relu')(up4)
    # 16

    up3 = UpSampling2D((2, 2))(up4)
    up3 = concatenate([down3, up3], axis=3)
    up3 = Conv2D(256, (3, 3), padding='same')(up3)
    up3 = BatchNormalization()(up3)
    up3 = Activation('relu')(up3)
    up3 = Conv2D(256, (3, 3), padding='same')(up3)
    up3 = BatchNormalization()(up3)
    up3 = Activation('relu')(up3)
    up3 = Conv2D(256, (3, 3), padding='same')(up3)
    up3 = BatchNormalization()(up3)
    up3 = Activation('relu')(up3)
    # 32

    up2 = UpSampling2D((2, 2))(up3)
    up2 = concatenate([down2, up2], axis=3)
    up2 = Conv2D(128, (3, 3), padding='same')(up2)
    up2 = BatchNormalization()(up2)
    up2 = Activation('relu')(up2)
    up2 = Conv2D(128, (3, 3), padding='same')(up2)
    up2 = BatchNormalization()(up2)
    up2 = Activation('relu')(up2)
    up2 = Conv2D(128, (3, 3), padding='same')(up2)
    up2 = BatchNormalization()(up2)
    up2 = Activation('relu')(up2)
    # 64

    up1 = UpSampling2D((2, 2))(up2)
    up1 = concatenate([down1, up1], axis=3)
    up1 = Conv2D(64, (3, 3), padding='same')(up1)
    up1 = BatchNormalization()(up1)
    up1 = Activation('relu')(up1)
    up1 = Conv2D(64, (3, 3), padding='same')(up1)
    up1 = BatchNormalization()(up1)
    up1 = Activation('relu')(up1)
    up1 = Conv2D(64, (3, 3), padding='same')(up1)
    up1 = BatchNormalization()(up1)
    up1 = Activation('relu')(up1)
    # 128

    up0 = UpSampling2D((2, 2))(up1)
    up0 = concatenate([down0, up0], axis=3)
    up0 = Conv2D(32, (3, 3), padding='same')(up0)
    up0 = BatchNormalization()(up0)
    up0 = Activation('relu')(up0)
    up0 = Conv2D(32, (3, 3), padding='same')(up0)
    up0 = BatchNormalization()(up0)
    up0 = Activation('relu')(up0)
    up0 = Conv2D(32, (3, 3), padding='same')(up0)
    up0 = BatchNormalization()(up0)
    up0 = Activation('relu')(up0)
    # 256

    up0a = UpSampling2D((2, 2))(up0)
    up0a = concatenate([down0a, up0a], axis=3)
    up0a = Conv2D(16, (3, 3), padding='same')(up0a)
    up0a = BatchNormalization()(up0a)
    up0a = Activation('relu')(up0a)
    up0a = Conv2D(16, (3, 3), padding='same')(up0a)
    up0a = BatchNormalization()(up0a)
    up0a = Activation('relu')(up0a)
    up0a = Conv2D(16, (3, 3), padding='same')(up0a)
    up0a = BatchNormalization()(up0a)
    up0a = Activation('relu')(up0a)
    # 512

    up0b = UpSampling2D((2, 2))(up0a)
    up0b = concatenate([down0b, up0b], axis=3)
    up0b = Conv2D(8, (3, 3), padding='same')(up0b)
    up0b = BatchNormalization()(up0b)
    up0b = Activation('relu')(up0b)
    up0b = Conv2D(8, (3, 3), padding='same')(up0b)
    up0b = BatchNormalization()(up0b)
    up0b = Activation('relu')(up0b)
    up0b = Conv2D(8, (3, 3), padding='same')(up0b)
    up0b = BatchNormalization()(up0b)
    up0b = Activation('relu')(up0b)
    # 1024

    classify = Conv2D(num_classes, (1, 1), activation='sigmoid')(up0b)

    model = Model(inputs=inputs, outputs=classify)

    model.compile(optimizer=RMSprop(lr=0.0001),
                  loss=bce_dice_loss,
                  metrics=[dice_coeff])

    return model
def get_unet_128(input_shape=(128, 128, 3), num_classes=1):
    inputs = Input(shape=input_shape)
    # 128

    down1 = Conv2D(64, (3, 3), padding='same',
                   kernel_initializer='he_normal')(inputs)
    down1 = BatchNormalization()(down1)
    down1 = Activation('relu')(down1)
    down1 = Conv2D(64, (3, 3), padding='same',
                   kernel_initializer='he_normal')(down1)
    down1 = BatchNormalization()(down1)
    down1 = Activation('relu')(down1)
    down1_pool = MaxPooling2D((2, 2), strides=(2, 2))(down1)
    # 64

    down2 = Conv2D(128, (3, 3), padding='same',
                   kernel_initializer='he_normal')(down1_pool)
    down2 = BatchNormalization()(down2)
    down2 = Activation('relu')(down2)
    down2 = Conv2D(128, (3, 3), padding='same',
                   kernel_initializer='he_normal')(down2)
    down2 = BatchNormalization()(down2)
    down2 = Activation('relu')(down2)
    down2_pool = MaxPooling2D((2, 2), strides=(2, 2))(down2)
    # 32

    down3 = Conv2D(256, (3, 3), padding='same',
                   kernel_initializer='he_normal')(down2_pool)
    down3 = BatchNormalization()(down3)
    down3 = Activation('relu')(down3)
    down3 = Conv2D(256, (3, 3), padding='same',
                   kernel_initializer='he_normal')(down3)
    down3 = BatchNormalization()(down3)
    down3 = Activation('relu')(down3)
    down3_pool = MaxPooling2D((2, 2), strides=(2, 2))(down3)
    # 16

    down4 = Conv2D(512, (3, 3), padding='same',
                   kernel_initializer='he_normal')(down3_pool)
    down4 = BatchNormalization()(down4)
    down4 = Activation('relu')(down4)
    down4 = Conv2D(512, (3, 3), padding='same',
                   kernel_initializer='he_normal')(down4)
    down4 = BatchNormalization()(down4)
    down4 = Activation('relu')(down4)
    down4_pool = MaxPooling2D((2, 2), strides=(2, 2))(down4)
    # 8

    center = Conv2D(1024, (3, 3),
                    padding='same',
                    kernel_initializer='he_normal')(down4_pool)
    center = BatchNormalization()(center)
    center = Activation('relu')(center)
    center = Conv2D(1024, (3, 3),
                    padding='same',
                    kernel_initializer='he_normal')(center)
    center = BatchNormalization()(center)
    center = Activation('relu')(center)
    # center

    up4 = UpSampling2D((2, 2))(center)
    up4 = concatenate([down4, up4], axis=3)
    up4 = Conv2D(512, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up4)
    up4 = BatchNormalization()(up4)
    up4 = Activation('relu')(up4)
    up4 = Conv2D(512, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up4)
    up4 = BatchNormalization()(up4)
    up4 = Activation('relu')(up4)
    up4 = Conv2D(512, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up4)
    up4 = BatchNormalization()(up4)
    up4 = Activation('relu')(up4)
    # 16

    up3 = UpSampling2D((2, 2))(up4)
    up3 = concatenate([down3, up3], axis=3)
    up3 = Conv2D(256, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up3)
    up3 = BatchNormalization()(up3)
    up3 = Activation('relu')(up3)
    up3 = Conv2D(256, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up3)
    up3 = BatchNormalization()(up3)
    up3 = Activation('relu')(up3)
    up3 = Conv2D(256, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up3)
    up3 = BatchNormalization()(up3)
    up3 = Activation('relu')(up3)
    # 32

    up2 = UpSampling2D((2, 2))(up3)
    up2 = concatenate([down2, up2], axis=3)
    up2 = Conv2D(128, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up2)
    up2 = BatchNormalization()(up2)
    up2 = Activation('relu')(up2)
    up2 = Conv2D(128, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up2)
    up2 = BatchNormalization()(up2)
    up2 = Activation('relu')(up2)
    up2 = Conv2D(128, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up2)
    up2 = BatchNormalization()(up2)
    up2 = Activation('relu')(up2)
    # 64

    up1 = UpSampling2D((2, 2))(up2)
    up1 = concatenate([down1, up1], axis=3)
    up1 = Conv2D(64, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up1)
    up1 = BatchNormalization()(up1)
    up1 = Activation('relu')(up1)
    up1 = Conv2D(64, (3, 3), padding='same')(up1)
    up1 = BatchNormalization()(up1)
    up1 = Activation('relu')(up1)
    up1 = Conv2D(64, (3, 3), padding='same',
                 kernel_initializer='he_normal')(up1)
    up1 = BatchNormalization()(up1)
    up1 = Activation('relu')(up1)
    # 128

    classify = Conv2D(num_classes, (1, 1), activation='sigmoid')(up1)

    model = Model(inputs=inputs, outputs=classify)

    model.compile(optimizer=RMSprop(lr=0.0001),
                  loss=bce_dice_loss,
                  metrics=[dice_coeff])

    return model
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator
import numpy as np

# набор CIFAR_10 содержит 60K изображений 32x32 с 3 каналами
IMG_CHANNELS = 3
IMG_ROWS = 32
IMG_COLS = 32
# константы

BATCH_SIZE = 128
NB_EPOCH = 50
NB_CLASSES = 10
VERBOSE = 1
VALIDATION_SPLIT = 0.2
OPTIM = RMSprop()

# загрузить набор данных
(X_train, y_train), (X_test, y_test) = cifar10.load_data()

NUM_TO_AUGMENT = 5

print('X_train shape:', X_train.shape)
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')

# Теперь применим унитарное кодирование и нормируем изобра- жения:
# преобразовать к категориальному виду
Y_train = np_utils.to_categorical(y_train, NB_CLASSES)
Y_test = np_utils.to_categorical(y_test, NB_CLASSES)
def main(argv=None):
    '''
    '''
    main.__doc__ = __doc__
    argv = sys.argv if argv is None else sys.argv.extend(argv)
    desc = main.__doc__  # .format(os.path.basename(__file__))
    # CLI parser
    args = parser_(desc)
    mgpu = 0 if getattr(args, 'mgpu', None) is None else args.mgpu

    checkpt = getattr(args, 'checkpt', None)
    checkpt_flag = False if checkpt is None else True
    filepath = checkpt
    # print('CHECKPT:', checkpt)

    gdev_list = get_available_gpus(mgpu or 1)
    ngpus = len(gdev_list)

    batch_size_1gpu = 32
    batch_size = batch_size_1gpu * ngpus
    num_classes = 1000
    epochs = args.epochs
    data_augmentation = args.aug

    logdevp = args.logdevp

    datadir = getattr(args, 'datadir', None)

    # The data, shuffled and split between train and test sets:
    (x_train, y_train), (x_test,
                         y_test) = synthesize_imagenet_dataset(num_classes)
    train_samples = x_train.shape[0]
    test_samples = y_test.shape[0]
    steps_per_epoch = train_samples // batch_size
    print('train_samples:', train_samples)
    print('batch_size:', batch_size)
    print('steps_per_epoch:', steps_per_epoch)
    # validations_steps = test_samples // batch_size
    print(x_train.shape[0], 'train samples')
    print(x_test.shape[0], 'test samples')

    # The capacity variable controls the maximum queue size
    # allowed when prefetching data for training.
    capacity = 10000

    # min_after_dequeue is the minimum number elements in the queue
    # after a dequeue, which ensures sufficient mixing of elements.
    # min_after_dequeue = 3000

    # If `enqueue_many` is `False`, `tensors` is assumed to represent a
    # single example.  An input tensor with shape `[x, y, z]` will be output
    # as a tensor with shape `[batch_size, x, y, z]`.
    #
    # If `enqueue_many` is `True`, `tensors` is assumed to represent a
    # batch of examples, where the first dimension is indexed by example,
    # and all members of `tensors` should have the same size in the
    # first dimension.  If an input tensor has shape `[*, x, y, z]`, the
    # output will have shape `[batch_size, x, y, z]`.
    # enqueue_many = True

    # Force input pipeline to CPU:0 to avoid data operations ending up on GPU
    # and resulting in a slow down for multigpu case due to comm overhead.
    with tf.device('/cpu:0'):
        # if no augmentation can go directly from numpy arrays
        # x_train_batch, y_train_batch = tf.train.shuffle_batch(
        #     tensors=[x_train, y_train],
        #     # tensors=[x_train, y_train.astype(np.int32)],
        #     batch_size=batch_size,
        #     capacity=capacity,
        #     min_after_dequeue=min_after_dequeue,
        #     enqueue_many=enqueue_many,
        #     num_threads=8)

        # NOTE: This bakes the whole dataset into the TF graph and for larger
        # datasets it fails on "ValueError: GraphDef cannot be larger than 2GB".
        # TODO: Load the a large dataset via queue from RAM/disk.

        input_images = tf.constant(x_train.reshape(train_samples, -1))
        print('train_samples', train_samples)
        print('input_images', input_images.shape)
        image, label = tf.train.slice_input_producer([input_images, y_train],
                                                     shuffle=True)
        # If using num_epochs=epochs have to:
        #     sess.run(tf.local_variables_initializer())
        #     and maybe also: sess.run(tf.global_variables_initializer())
        image = tf.reshape(image, x_train.shape[1:])
        print('image', image.shape)

        test_images = tf.constant(x_test.reshape(test_samples, -1))
        test_image, test_label = tf.train.slice_input_producer(
            [test_images, y_test], shuffle=False)
        test_image = tf.reshape(test_image, x_train.shape[1:])

        if data_augmentation:
            print('Using real-time data augmentation.')
            # Randomly flip the image horizontally.
            distorted_image = tf.image.random_flip_left_right(image)

            # Because these operations are not commutative, consider
            # randomizing the order their operation.
            # NOTE: since per_image_standardization zeros the mean and
            # makes the stddev unit, this likely has no effect see
            # tensorflow#1458.
            distorted_image = tf.image.random_brightness(distorted_image,
                                                         max_delta=63)
            distorted_image = tf.image.random_contrast(distorted_image,
                                                       lower=0.2,
                                                       upper=1.8)

            # Subtract off the mean and divide by the variance of the
            # pixels.
            image = tf.image.per_image_standardization(distorted_image)

            # Do this for testing as well if standardizing
            test_image = tf.image.per_image_standardization(test_image)

        # Use tf.train.batch if slice_input_producer shuffle=True,
        # otherwise use tf.train.shuffle_batch. Not sure which way is faster.
        x_train_batch, y_train_batch = tf.train.batch([image, label],
                                                      batch_size=batch_size,
                                                      capacity=capacity,
                                                      num_threads=8)

        print('x_train_batch:', x_train_batch.shape)

        # x_train_batch, y_train_batch = tf.train.shuffle_batch(
        #     tensors=[image, label],
        #     batch_size=batch_size,
        #     capacity=capacity,
        #     min_after_dequeue=min_after_dequeue,
        #     num_threads=8)

        x_test_batch, y_test_batch = tf.train.batch(
            [test_image, test_label],
            # TODO: shouldn't it be: batch_size=batch_size???
            batch_size=train_samples,
            capacity=capacity,
            num_threads=8,
            name='test_batch',
            shared_name='test_batch')

    x_train_input = KL.Input(tensor=x_train_batch)

    print('x_train_input', x_train_input)

    gauge = SamplesPerSec(batch_size)
    callbacks = [gauge]

    if _DEVPROF or logdevp:  # or True:
        # Setup Keras session using Tensorflow
        config = tf.ConfigProto(allow_soft_placement=True,
                                log_device_placement=True)
        # config.gpu_options.allow_growth = True
        tfsess = tf.Session(config=config)
        KB.set_session(tfsess)

    model_init = make_model(x_train_input, num_classes)
    x_train_out = model_init.output
    # model_init.summary()

    lr = 0.0001 * ngpus
    if ngpus > 1:
        model = make_parallel(model_init, gdev_list)
    else:
        # Must re-instantiate model per API below otherwise doesn't work.
        model_init = Model(inputs=[x_train_input], outputs=[x_train_out])
        model = model_init

    opt = RMSprop(lr=lr, decay=1e-6)
    # Let's train the model using RMSprop
    model.compile(loss='categorical_crossentropy',
                  optimizer=opt,
                  metrics=['accuracy'],
                  target_tensors=[y_train_batch])

    print_mgpu_modelsummary(model)  # will print non-mgpu model as well

    if checkpt_flag:
        checkpoint = ModelCheckpoint(filepath,
                                     monitor='acc',
                                     verbose=1,
                                     save_best_only=True)
        callbacks = [checkpoint]

    # Start the queue runners.
    sess = KB.get_session()
    # sess.run([tf.local_variables_initializer(),
    #           tf.global_variables_initializer()])
    tf.train.start_queue_runners(sess=sess)

    # Fit the model using data from the TFRecord data tensors.
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess, coord)

    val_in_train = False  # not sure how the validation part works during fit.

    start_time = time.time()
    model.fit(
        # validation_data=(x_test_batch, y_test_batch)
        # if val_in_train else None,  # validation data is not used???
        # validation_steps=validations_steps if val_in_train else None,
        validation_steps=val_in_train,
        steps_per_epoch=steps_per_epoch,
        epochs=epochs,
        callbacks=callbacks)
    elapsed_time = time.time() - start_time
    print('[{}] finished in {} ms'.format('TRAINING',
                                          int(elapsed_time * 1000)))
    gauge.print_results()

    weights_file = checkptfile  # './saved_cifar10_wt.h5'
    if not checkpt_flag:  # empty list
        model.save_weights(checkptfile)

    # Clean up the TF session.
    coord.request_stop()
    coord.join(threads)

    KB.clear_session()

    # Second Session. Demonstrate that the model works
    # test_model = make_model(x_test.shape[1:], num_classes,
    #                         weights_file=weights_file)
    test_model = make_model(x_test.shape[1:], num_classes)
    test_model.load_weights(weights_file)
    test_model.compile(loss='categorical_crossentropy',
                       optimizer=opt,
                       metrics=['accuracy'])

    if data_augmentation:
        x_proccessed = sess.run(x_test_batch)
        y_proccessed = sess.run(y_test_batch)
        loss, acc = test_model.evaluate(x_proccessed, y_proccessed)
    else:
        loss, acc = test_model.evaluate(x_test, y_test)

    print('\nTest loss: {0}'.format(loss))
    print('\nTest accuracy: {0}'.format(acc))
'''

from __future__ import print_function
from keras.optimizers import SGD, RMSprop

from cnn_functions import rate_scheduler, train_model_sample
from model_zoo import feature_net_61x61 as the_model

import os
import datetime
import numpy as np

batch_size = 256
n_classes = 3
n_epoch = 25

model = the_model(n_channels = 2, n_features = 3, reg = 1e-5, drop=0.5)
dataset = "HeLa_all_61x61"
direc_save = "/home/nquach/DeepCell2/trained_networks/"
direc_data = "/home/nquach/DeepCell2/training_data_npz/"
optimizer = RMSprop(lr = 0.001, rho = 0.95, epsilon = 1e-8)
lr_sched = rate_scheduler(lr = 0.001, decay = 0.95)
expt = "feature_net_61x61_dropout"

iterate = 3
train_model_sample(model = model, dataset = dataset, optimizer = optimizer, 
	expt = expt, it = iterate, batch_size = batch_size, n_epoch = n_epoch,
	direc_save = direc_save, 
	direc_data = direc_data, 
	lr_sched = lr_sched,
	rotate = True, flip = True, shear = 0)
Пример #22
0
 X_hat_One_DUDE[k_max*0+k-1,:]=x_dude_hat
 
 ### 1-D N-DUDE ###
 C,Y = N_DUDE.make_data_for_One_NN_DUDE(Z[i*n:(i+1)*n],k,L_new[i*alpha_size:(i+1)*alpha_size,],nb_classes,n)
 
 model=Sequential()
 model.add(Dense(40,input_dim=2*k*nb_classes,init='he_normal'))
 model.add(Activation('relu'))
 model.add(Dense(40,init='he_normal'))
 model.add(Activation('relu'))
 model.add(Dense(40,init='he_normal'))
 model.add(Activation('relu'))
 model.add(Dense(3,init='he_normal'))
 model.add(Activation('softmax'))
 
 rms=RMSprop(lr=0.001, rho=0.9, epsilon=1e-06,clipnorm=1.5)
 adagrad=Adagrad(clipnorm=1.5)
 adam=Adam()
 adadelta=Adadelta()
 sgd=SGD(lr=0.01,decay=1e-6,momentum=0.95, nesterov=True, clipnorm=1.0)
 
 model.compile(loss='poisson', optimizer=adam)
 model.fit(C,Y,nb_epoch=10,batch_size=128,show_accuracy=False, verbose=0)
 
 pred_class=model.predict_classes(C, batch_size=128, verbose=0)
 s_nn_hat=hstack((zeros(k),pred_class,zeros(k)))
 x_nn_hat=N_DUDE.denoise_with_s(z[i],s_nn_hat,k)
 error_nn=N_DUDE.error_rate(x,x_nn_hat)
 
 print '1-D N-DUDE Pre-trained =', error_nn
  
def main(config): 
    use_data_augmentation = True
    # This is the main configuration object
    training_params = {
        # Name of the split created
        'split': 'name_of_split',
        # Label: 'verb' or 'object'
        'label': 'verb',
        # Execute a quick run: 1 batch for training and 2 videos for test
        'toy_execution': False,
        # If the evaluation is already done and saved, whether to repeat it
        'redo_evaluation': False,
        # Oversample minority classes
        'oversampling': False,
        # Warm up: do 'warmup_epochs' epochs with learnign rate 'warmup_lr'
        'use_warmup': False,
        'warmup_epochs': 3,
        'warmup_lr': 0.01,
        # From 0 to 1, percentage of offset at the beginning and end to sample
        'frame_sampling_offset': 0.,
        # Number of times to run the experiment (averaged at the end)
        'runs': 3,
        'epochs': 100,
        # Skip connection from last layer before ConvLSTM to output hidden
        # states of the ConvLSTM. It requires a 1x1 conv with a number of
        # channels equal to the number of hidden units of the ConvLSTM
        'skip_connect': False,
        # Number of timesteps
        'sequence_length': 25,
        'learning_rate': 0.0001,
        'batch_size': 16,
        # Number of layers to freeze, starting from 0
        # 142 to freeze everything except for the last conv block
        # 0 would set all layers as trainable
        # -1 to freeze all
        'last_layer_to_freeze_conv': 142,
        'optimizer': 'adam',
        # Maximum value to clip the gradient (to avoid large changes)
        'gradient_clipvalue': 0.,
        # Criterion to use for early stopping and also to choose the best model
        'stop_criterion': 'val_f1_metric',
        # Patience for early stopping
        'patience': 10,
        # Number of hidden states used in the ConvLSTM, i.e., number of 
        # output channels
        'num_convlstms': 1,
        'convlstm_hidden': 256,
        'convlstm_add_initial_state': False,
        'apply_conv_betweenconvlstm': False,
        'apply_conv_afterconvlstm': False,
        'last_layer_to_freeze': 0,
        'non_uniform_sampling': False,
        # Normalise input to the ConvLSTM with L2 Normalisation
        'convlstm_normalise_input': False,
        'dropout_rate': 0.,
        'convlstm_dropout_rate': 0.,
        'convlstm_recurrent_dropout_rate': 0.,
        'spatial_dropout_rate': 0.,
        'use_average_pool': True,
        'use_data_augmentation': use_data_augmentation,
        'random_horizontal_flipping': True,
        'random_corner_cropping': True,
        'random_lighting': False,
        # Apply class weighting in the loss function using the training set
        # class distribution as a prior
        'apply_class_weighting': True,
        # Regularisation L1/L2 in the loss. If both are used then L1_L2
        # regularisation is used (keras)
        'l1_reg_beta': 0.,
        'l2_reg_beta': 0.,
        # Add a 1x1 conv after the last conv block but before the non local
        # block in order to reduce the number of channels (ch)
        'add_1x1conv': True,
        'add_1x1conv_ch': 256,
        'min_frames': -1,
        # Activates debug mode: inputs to the network are saved in the folder
        # pointed out by 'debug_folder' below
        'debug_mode': False,
        'debug_folder': 'debug_folder',
        'visualisation_mode': False
    }

    # Name of the experiment (e.g. split_R_verb_detector)
    exp_name = 'split_{}_{}_detector'.format(
        training_params['split'], training_params['label']
    )

    root_path = config['split_path'] + training_params['split'] + '/'

    if training_params['label'] == 'verb':
        training_params['num_classes'] = (
             len(open(root_path + config['train_verbs_file'], 
                 'r').readlines())) 
        training_params['train_classes_file'] = (
            root_path + config['train_verbs_file']
        )
        training_params['val_classes_file'] = (
            root_path + config['val_verbs_file']
        )
        training_params['test_classes_file'] = (
            root_path + config['test_verbs_file']
        )

    elif training_params['label'] == 'object':
        training_params['num_classes'] = (
             len(open(root_path + config['train_objects_file'], 
                 'r').readlines())) 
        training_params['train_classes_file'] = (
            root_path + config['train_objects_file']
        )
        training_params['val_classes_file'] = (
            root_path + config['val_objects_file']
        )
        training_params['test_classes_file'] = (
            root_path + config['test_objects_file']
        )

    init_time = time.time()  

    # For reproducibility
    tf.set_random_seed(1)
    os.environ['PYTHONHASHSEED'] = '1'
    seed(1)
    rn.seed(1)
    
    # Path to folders to save plots and checkpoints
    checkpoints_folder = (config['project_folder'] +
        config['checkpoints_folder'] + 
        '{}/{}/'.format(training_params['split'], exp_name)
    )
    plots_folder = (config['project_folder'] + config['plots_folder'] +
        '{}/{}/'.format(training_params['split'], exp_name)
    )

    # Create any necessary folder
    if not os.path.exists(plots_folder): 
        os.makedirs(plots_folder)
    if not os.path.exists(checkpoints_folder): 
        os.makedirs(checkpoints_folder) 

    # Save training parameters
    with open(plots_folder + 'training_params.json', 'w') as fp:
        json.dump(training_params, fp, indent=4)
    
    # ===============================================================
    # LOAD THE DATA
    # ===============================================================

    # Compute number of videos from each set: train, validation and test
    train_file = root_path + config['train_file']
    val_file = root_path + config['val_file']
    test_file = root_path + config['test_file']
    nb_videos_train = num_sequences(config, training_params, 'train', 
                                    'training', train_file)
    nb_videos_val = num_sequences(config, training_params, 'val',
                                 'training', val_file)
    nb_videos_test = num_sequences(config, training_params, 'test',
                                   'training', test_file) 

    # Compute number of mini-batches for each set
    # Add an extra mini-batch in case that the number of samples
    # is not divisible by the mini-batch size
    nb_batches_train = nb_videos_train // training_params['batch_size']
    if nb_videos_train % training_params['batch_size'] > 0:
        nb_batches_train += 1
    nb_batches_val = nb_videos_val // training_params['batch_size']
    if nb_videos_val % training_params['batch_size'] > 0:
        nb_batches_val += 1
    nb_batches_test = nb_videos_test // training_params['batch_size']
    if nb_videos_test % training_params['batch_size'] > 0:
        nb_batches_test += 1  

    # Necessary to load the model
    custom_objects = {'f1_metric': f1_metric}
    
    if training_params['use_data_augmentation']:
        print('train: using data augmentation')

    # Instantiate the generators of batches for training and validation
    train_generator = BatchGenerator(config, 'train', train_file,
                                     training_params, nb_batches_train)
    val_generator = BatchGenerator(config, 'val', val_file, 
                                   training_params, nb_batches_val)

    total_videos = float(nb_videos_train+nb_videos_val+nb_videos_test)
    
    if training_params['apply_class_weighting']:
        print('Class weighting applied')
    print('Number of videos to => train: {}, val: {}, test: {}'.format(
        nb_videos_train, nb_videos_val, nb_videos_test)
        )
    print('% of videos to => train: {}, val: {}, test: {}'.format(
        nb_videos_train/total_videos*100, nb_videos_val/total_videos*100,
        nb_videos_test/total_videos*100)
    )
    
    if not os.path.exists(plots_folder + 'results.json'):
        all_run_results = dict()
    
    # Vectors to accumulate the results of each run
    accuracy_by_input, accuracy_by_video = dict(), dict()
    f1_by_input, f1_by_video = dict(), dict()

    # ===============================================================
    # EXECUTE THE N RUNS OF THE EXPERIMENT
    # ===============================================================
    verbose = 1
    if training_params['runs'] > 1:
        verbose = 0

    classes_val, indices_val = get_classes_ordered(
        training_params['val_classes_file']
    )
    # Compute train labels to obtain class weights (for the loss function)
    labels_by_video, _ = load_labels(
        config, training_params, 'val', val_file,
        training_params['val_classes_file']
    )
    plot_class_distribution(plots_folder, labels_by_video, classes_val, 'val')
    del labels_by_video
    gc.collect()

    classes_test, indices_test = get_classes_ordered(
        training_params['test_classes_file']
    )
    labels_by_video, _ = load_labels(
        config, training_params, 'test', test_file,
        training_params['test_classes_file']
    )
    plot_class_distribution(plots_folder, labels_by_video, classes_test, 'test')
    del labels_by_video
    gc.collect()

    classes_train, indices_train = get_classes_ordered(
        training_params['train_classes_file']
    )
    labels_by_video, indices_by_video = load_labels(
        config, training_params, 'train', 
        train_file, training_params['train_classes_file']
    )
    plot_class_distribution(plots_folder, labels_by_video,
                            classes_train, 'train')

    if training_params['apply_class_weighting']:
        class_weights = compute_class_weight('balanced',
                                             np.unique(indices_by_video),
                                             indices_by_video)
        plot_weights_distribution(plots_folder, class_weights,
                                 classes_train, 'train')
    
    histories = []
    for run in range(training_params['runs']):
        print('EXECUTING RUN {} ----------------------------------'.format(run))
        run_folder = plots_folder + 'run_{}/'.format(run)
        if not os.path.exists(run_folder):
            os.makedirs(run_folder)
        
        save_best_weights_file = (checkpoints_folder + 
            'best_weights_{}.h5'.format(run) 
        ) 
 
        if os.path.exists(plots_folder + 'results.json'):
            with open(plots_folder + 'results.json', 'r') as json_file:
                all_run_results = json.load(json_file)
        if not 'run_{}'.format(run) in all_run_results:
            all_run_results['run_{}'.format(run)] = dict()

        training_skipped = False
        # If this run has already been computed, skip training
        if not 'training_result' in all_run_results['run_{}'.format(run)]:
            model = deploy_network(config, training_params)
            
            if training_params['epochs'] > 0:
                clipvalue = None
                if training_params['gradient_clipvalue'] > 0.:
                    clipvalue = training_params['gradient_clipvalue']
                    print('Clipping gradient to {}'.format(
                        training_params['gradient_clipvalue']
                    ))

                if training_params['optimizer'] == 'adam':
                    print('Using Adam optimizer')
                    optimizer = Adam(lr=training_params['learning_rate'],
                            beta_1=0.9, beta_2=0.999, epsilon=1e-08,
                            clipvalue=clipvalue)
                elif training_params['optimizer'] == 'sgd':
                    print('Using SGD optimizer')
                    optimizer = SGD(lr=training_params['learning_rate'],
                                    momentum=0.9, decay=1e-6, nesterov=True, 
                                    clipvalue=clipvalue)
                elif training_params['optimizer'] == 'rmsprop':
                    print('Using RMSprop optimizer')
                    optimizer = RMSprop(lr=training_params['learning_rate'])
                
                metric_list = config['metrics'][1:] + [f1_metric]
                model.compile(optimizer=optimizer,
                              loss='categorical_crossentropy',
                              metrics=metric_list)
                model.summary()

                print('Exp {}, run {}'.format(exp_name, run))

                apply_cw = training_params['apply_class_weighting'] 
                # Optional warmup training
                if training_params['use_warmup']:
                    warmup_epochs = training_params['warmup_epochs']
                    history = model.fit_generator(generator=train_generator,
                                            validation_data=val_generator,
                                            epochs=warmup_epochs,
                                            max_queue_size=10,
                                            workers=2, 
                                            verbose=1,
                                            class_weight=(class_weights
                                                if apply_cw
                                                else None),
                                            shuffle=False,
                                            use_multiprocessing=False)

                # Type of criterion for the ModelCheckpoint and EarlyStopping
                # depending on the metric used for the EarlStopping
                if training_params['stop_criterion'] == 'val_loss':
                    mode = 'min'
                else:
                    mode = 'max'
                c = ModelCheckpoint(str(save_best_weights_file),
                                    monitor=training_params['stop_criterion'], 
                                    save_best_only=True, 
                                    save_weights_only=False, 
                                    mode=mode,
                                    period=1)
                e = EarlyStopping(monitor=training_params['stop_criterion'],
                                min_delta=0,
                                patience=training_params['patience'],
                                verbose=0,
                                mode=mode,
                                baseline=None)
                callbacks = [c, e]

                train_time = time.time()
                steps = None
                if training_params['toy_execution']:
                    steps = 1
                history = model.fit_generator(generator=train_generator,
                                            steps_per_epoch=steps,
                                            validation_data=val_generator,
                                            validation_steps=steps,
                                            epochs=training_params['epochs'],
                                            max_queue_size=10,
                                            workers=2, 
                                            verbose=1,
                                            class_weight=(class_weights
                                                if apply_cw
                                                else None),
                                            shuffle=False,
                                            use_multiprocessing=False,
                                            callbacks=callbacks)
            
                # Save the history of training 
                histories.append(history.history)
                print('TRAINING PHASE ENDED')
                metric = training_params['stop_criterion']
                # Depending on the metric to stop the training, choose whether
                # the minimum or maximum value must be chosen
                if metric == 'val_loss':
                    func = np.argmin
                else:
                    func = np.argmax
                best_epoch = func(history.history[metric])

                # Save results to the dictionary
                k1, k2 = 'run_{}'.format(run), 'training_result'
                all_run_results[k1][k2] = dict()
                all_run_results[k1][k2]['best_epoch'] = best_epoch
                all_run_results[k1][k2][
                    'best_epoch_val_loss'] = history.history[
                                                'val_loss'][best_epoch]
                all_run_results[k1][k2][
                    'best_epoch_val_acc'] = history.history[
                                                'val_acc'][best_epoch]
                all_run_results[k1][k2][
                    'best_epoch_val_f1'] = history.history[
                                                'val_f1_metric'][best_epoch]
                # Save intermediate result
                with open(plots_folder + 'results.json', 'w') as f:
                    json.dump(all_run_results, f, indent=4)
                print('Time to train for {} epochs: {}s'.format(
                    training_params['epochs'], time.time()-train_time))
        else:
            training_skipped = True
                                
        # TEST ========================
        print('='*20)
        print('TEST PHASE')
        print('training_skipped', training_skipped)
        # If training was not skipped, save the histories (loss, accuracy and
        # f1 per epoch, per run)
        if not training_skipped:
            save_history(run_folder, history.history)
            del model
        # If training was skipped, load the history of this run
        else:
            histories.append(load_history(run_folder, run))

        # Load the best model for evaluation
        model = load_model(str(save_best_weights_file),
                           custom_objects=custom_objects)
        print('Loaded the checkpoint at {}'.format(save_best_weights_file))
    
        class_list = classes_train
        print('Exp {}, run {}'.format(exp_name, run))
        res_dict = dict()
        for mode in ['train', 'val', 'test']:
            # If the evaluation was already saved and 'redo_evaluation' is not
            # set to True
            if (
                ('evaluation_{}'.format(mode) in 
                    all_run_results['run_{}'.format(run)]) and
                not training_params['redo_evaluation']
            ):
                if not mode in accuracy_by_video:
                	accuracy_by_video[mode] = []
                if not mode in f1_by_video:
                    f1_by_video[mode] = []
                k1, k2 = 'run_{}'.format(run), 'evaluation_{}'.format(mode)
                _f1_by_video = all_run_results[k1][k2]['f1']
                _accuracy_by_video = all_run_results[k1][k2]['accuracy']
                accuracy_by_video[mode].append(_accuracy_by_video/100.)
                #f1_by_input[mode].append(_f1_by_input)
                f1_by_video[mode].append(_f1_by_video/100.)
                print('{}: Accuracy per video: {}, '.format(
                        mode, _accuracy_by_video) +
                      'Macro-F1 per video: {}'.format( _f1_by_video)
                )
                continue

            if training_params['use_data_augmentation']:
                print('{}: using data augmentation'.format(mode))
            
            #if not results_loaded:
            if mode == 'train':
                if training_params['oversampling']:
                    nb_videos_train = num_sequences(config, training_params, 
                                                    'train', 'evaluation',
                                                    train_file)
                nb_videos = nb_videos_train
                generator = load_gaze_plus_sequences(config, 'train',
                                                     train_file,
                                                     training_params)
                classes_train, indices_train = get_classes_ordered(
                    training_params['train_classes_file']
                )
            elif mode == 'val':
                nb_videos = nb_videos_val
                generator = load_gaze_plus_sequences(config, 'val',
                                                     val_file,
                                                     training_params) 
                classes_train, indices_train = get_classes_ordered(
                    training_params['train_classes_file']
                )
            elif mode == 'test':
                nb_videos = nb_videos_test
                generator = load_gaze_plus_sequences(config, 'test',
                                                     test_file,
                                                     training_params) 
                classes_test, indices_test = get_classes_ordered(
                    training_params['train_classes_file']
                )
                            
            if training_params['toy_execution']:
                nb_videos = 2

            predictions_by_video, ground_truth_by_video = [], []
            length_of_videos = dict()
            predictions_by_class = []
            for _ in range(training_params['num_classes']):
                predictions_by_class.append([])
            info = dict()           
            
            # Process video by video
            print('Processing {}, {} videos'.format(mode, nb_videos))
            for i in tqdm(range(nb_videos)):
                batch_x, batch_y, video_name, length = generator.next()
                predictions = model.predict(batch_x)[0]

                # Dictionary to save results by length of video
                if not length in length_of_videos:
                    length_of_videos[length] = []

                # Save class predicted by the model and ground truth
                predicted = np.argmax(predictions,0)
                predictions_by_video.append(predicted)
                ground_truth_by_video.append(batch_y)
            
                # Save prediction by class
                predictions_by_class[batch_y].append(predicted)

                # Save results by video
                info[video_name] = dict()
                info[video_name]['ground_truth_index'] = batch_y
                info[video_name]['ground_truth_class'] = class_list[batch_y]
                info[video_name]['prediction_index'] = predicted
                info[video_name]['prediction_softmax'] = predictions[0]
                info[video_name]['prediction_class'] = class_list[predicted]
                info[video_name]['length'] = length
                info[video_name]['classes'] = class_list
            
            ground_truth_by_video = np.squeeze(np.stack(ground_truth_by_video))
            predictions_by_video = np.squeeze(np.stack(predictions_by_video))

            cm_by_video = confusion_matrix(ground_truth_by_video,
                                        predictions_by_video,
                                        labels=range(
                                            training_params['num_classes']
                                        ))
            _accuracy_by_video = accuracy_score(ground_truth_by_video,
                                                predictions_by_video)
            _f1_by_video = f1_score(ground_truth_by_video, predictions_by_video,
                                    average='macro')

            k1, k2 = 'run_{}'.format(run), 'evaluation_{}'.format(mode)
            all_run_results[k1][k2] = dict()
            all_run_results[k1][k2]['num_videos'] = nb_videos
            all_run_results[k1][k2]['accuracy'] = _accuracy_by_video*100.
            all_run_results[k1][k2]['f1'] = _f1_by_video*100.

            print('{}: Accuracy per video: {}, Macro-F1 per video: {}'.format(
                mode, _accuracy_by_video, _f1_by_video)
            )

            plot_confusion_matrix(
                cm_by_video, class_list,
                run_folder + '_normalized_by_video_{}_{}_{}.pdf'.format(
                    mode, exp_name, run),
                normalize=True,
                title='Normalized confusion matrix for {} set'.format(mode),
                cmap='coolwarm'
            )
            plot_confusion_matrix(
                cm_by_video, class_list,
                run_folder + '_by_video_{}_{}_{}.pdf'.format(
                    mode, exp_name, run),
                normalize=False, 
                title='Confusion matrix for {} set'.format(mode),
                cmap='coolwarm'
            )
          
            # Compute and save results by class                
            for i in range(len(predictions_by_class)):
                if len(predictions_by_class[i]) > 0:
                    pred = predictions_by_class[i]
                    acc = accuracy_score([i]*len(pred),pred)
                    f1 = f1_score([i]*len(pred),pred, average='macro')
                    predictions_by_class[i] = [acc, f1,
                                            len(predictions_by_class[i])]    
                else:
                    predictions_by_class[i] = [0., 0.,
                                            len(predictions_by_class[i])]
            save_results(run_folder, mode, predictions_by_class,
                         class_list, run)

            # Save general info
            save_in_csv(run_folder + '{}_run{}_evaluation_info.csv'.format(
                mode,run), info)
        
            if not mode in accuracy_by_video:
                accuracy_by_video[mode] = []
                f1_by_video[mode] = []

            accuracy_by_video[mode].append(_accuracy_by_video)
            f1_by_video[mode].append(_f1_by_video)

            del generator
            gc.collect()

            with open(plots_folder + 'results.json', 'w') as f:
                json.dump(all_run_results, f, indent=4)
        
        # END OF THE EVALUATION ===========================================
 
        del model
        gc.collect()
        K.clear_session()
        tf.set_random_seed(1)

    # END OF ALL THE RUNS ===========================================
    if not training_skipped: 
        del val_generator, train_generator
        gc.collect()
    
    plot_training_info(plots_folder,
                       exp_name, 
                       config['metrics'] + ['f1_metric'],
                       True,
                       histories)
    # ===============================================================
    # SHOW THE AVERAGED RESULTS
    # ===============================================================

    results_dict = dict()
    print('='*20)
    results_file = open(plots_folder + 'results.txt', 'w')
    for mode in ['train', 'val', 'test']:
        res_msg = '='*20 + '\n'
        res_msg += '{}: AVERAGE RESULTS OF {} RUNS\n'.format(
            mode, training_params['runs'])
        res_msg += '='*20 + '\n'

        results_dict[mode] = dict()
        results_dict[mode]['accuracy_by_video'] = accuracy_by_video[mode]
        results_dict[mode]['f1_by_video'] = f1_by_video[mode]

        res_msg += 'ACCURACY: {:.2f} (-+{:.2f}), MACRO F1: {:.2f} (-+{:.2f})\n'.format(
            np.mean(accuracy_by_video[mode])*100, np.std(accuracy_by_video[mode])*100,
            np.mean(f1_by_video[mode])*100, np.std(f1_by_video[mode])*100
            )

        res_msg += 'RESULTS PER RUN\n'
        res_msg += '----------------\n'
        res_msg += '\nAccuracy by video:\n'
        res_msg += ', '.join(str(x) for x in accuracy_by_video[mode])
        res_msg += '\nMacro F1 by video:\n'
        res_msg += ', '.join(str(x) for x in f1_by_video[mode])
        res_msg += '\n'
        print(res_msg)
        results_file.write(res_msg)
    results_file.close()

    res_msg = '\n\nTime for training and evaluation of every run: {}s'.format(time.time()-init_time)
    
    final_results = dict()
    for run in range(training_params['runs']):
        k1 = 'run_{}'.format(run)
        final_results[k1] = dict()
        for mode in ['train', 'val', 'test']:
            final_results[k1][mode] = dict()
            final_results[k1][mode]['accuracies'] = [x*100 for x in accuracy_by_video[mode]]
            final_results[k1][mode]['f1s'] = [x*100 for x in f1_by_video[mode]]
    
    with open(plots_folder + 'overall_results.json', 'w') as f:
        json.dump(final_results, f, indent=4)
Пример #24
0
    labels = []

    for i, image_file in enumerate(images):
        image, label = read_image(image_file)
        data[i] = image.T
        labels.append(label)
    return data, labels


x_train, y_train = prep_data(train_images)
x_test, y_shit = prep_data(test_images)

##############
# CNN模型构造##
##############
optimizer = RMSprop(lr=1e-4)
objective = 'binary_crossentropy'

# 建造模型
model = Sequential()

model.add(
    Convolution2D(32,
                  3,
                  3,
                  border_mode='same',
                  input_shape=(3, ROWS, COLS),
                  activation='relu'))
model.add(Convolution2D(32, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
Пример #25
0
#Define the model achitecture
model = Sequential()
model.add(
    Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

rms = RMSprop()
#The function to optimize is the cross entropy between the true label and the output (softmax) of the model
model.compile(loss='categorical_crossentropy',
              optimizer=rms,
              metrics=["accuracy"])

#Make the model learn
model.fit(X, y, epochs=nb_epoch, verbose=2, validation_data=(X_test, Y_test))

#Evaluate how the model does on the test set
score = model.evaluate(X_test, Y_test, verbose=0)

print('Test score:', score[0])
print('Test accuracy:', score[1])
Пример #26
0
epsilon = .8
gamma = .8

# Recipe of deep reinforcement learning model
model = Sequential()
model.add(
    Convolution2D(16,
                  nb_row=3,
                  nb_col=3,
                  input_shape=(3, 480, 640),
                  activation='relu'))
model.add(Convolution2D(16, nb_row=3, nb_col=3, activation='relu'))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(3))
model.compile(RMSprop(), 'MSE')
model.summary()

#################
# RELOAD A MODEL
#################
# model = model_from_json(open('model.json').read())
# model.load_weights('model.h5')

exp_replay = experience_replay(batch_size)
next(exp_replay)  # Start experience-replay coroutine

for i in range(nb_epochs):
    ep = episode()
    S, reward = next(ep)  # Start coroutine of single entire episode
    loss = 0.
Пример #27
0
    x_train_rgb[i] = get_photo_gray(x_train[i])  # 转换成灰度

x_train_rgb = x_train_rgb.reshape(x_train_rgb.shape[0], -1) / 255.0
y_train = np_utils.to_categorical(y_train, num_classes=10)

model = Sequential()
model.add(Dense(1024, input_dim=1024))  # 全连接层
model.add(Activation('relu'))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dense(10))  # 全连接层
model.add(Activation('softmax'))

rmsprop = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)  # RMSprop 优化

model.compile(optimizer=rmsprop, loss='categorical_crossentropy', metrics=['accuracy'])

tbCallBack = TensorBoard(log_dir='./logs',  # log 目录
                         histogram_freq=0,  # 按照何等频率(epoch)来计算直方图,0为不计算
                         batch_size=32,  # 用多大量的数据计算直方图
                         write_graph=True,  # 是否存储网络结构图
                         write_grads=True,  # 是否可视化梯度直方图
                         write_images=True,  # 是否可视化参数
                         embeddings_freq=0,
                         embeddings_layer_names=None,
                         embeddings_metadata=None)

model.fit(x_train_rgb, y_train, epochs=12, batch_size=128, callbacks=[tbCallBack])  # 结果acc=0.1 flat后的数据acc=0.19
Пример #28
0
        X_test /= 255
        y_train = keras.utils.to_categorical(y_train, 512)
        y_test = keras.utils.to_categorical(y_test, 512)
        i_shape = 784
        filt = 512
        loss_func = 'categorical_crossentropy'
    batch_size = 128
    epochs = 20
    scores = {}
    for activation in [None, 'sigmoid', 'tanh', 'relu']:
        model = Sequential()
        model.add(Dense(filt, activation=activation, input_shape=(i_shape, )))
        model.add(Flatten())
        #         model.add(Dense(num_classes, activation = 'softmax'))
        model.compile(loss=loss_func,
                      optimizer=RMSprop(lr=0.04),
                      metrics=['accuracy'])
        history = model.fit(X_train,
                            y_train,
                            batch_size=batch_size,
                            epochs=epochs,
                            verbose=1,
                            validation_data=(X_test, y_test))

        score = model.evaluate(X_test, y_test, verbose=100)
        scores[activation] = score[1]

        plt.plot(history.history['val_accuracy'])

        plt.title('model loss')
    plt.ylabel('loss')
_________________________________________________________________
max_pooling1d_1 (MaxPooling1 (None, None, 32)          0         
_________________________________________________________________
conv1d_2 (Conv1D)            (None, None, 32)          5152      
_________________________________________________________________
gru_1 (GRU)                  (None, 32)                6240      
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 33        
=================================================================
Total params: 13,697
Trainable params: 13,697
Non-trainable params: 0
_________________________________________________________________
'''

model.compile(optimizer=RMSprop(), loss='mae')
history = model.fit_generator(train_gen,
                              steps_per_epoch=500,
                              epochs=20,
                              validation_data=val_gen,
                              validation_steps=val_steps)

# plot
import matplotlib.pyplot as plt

loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(len(loss))

plt.figure()
Пример #30
0
    params += _params
    regularizers += _regularizers
    constraints += _consts
    updates += _updates
    
print('parameters:')
print(params)
print('regularizers:')
print(regularizers)
print('constrains:')
print(constraints)
print('updates:')
print(updates)

'''updates'''
optimizer = RMSprop()
_updates = optimizer.get_updates(params, constraints, train_loss)
updates += _updates

print('after RMSprop, updates:')
for update in updates:
    print(update)

train_ins = [X_train, y, weights]
test_ins = [X_test, y, weights]
predict_ins = [X_test]

'''Get functions'''
_train = K.function(train_ins, [train_loss], updates=updates)
_train_with_acc = K.function(train_ins, [train_loss, train_accuracy], updates=updates)
_predict = K.function(predict_ins, [y_test], updates=state_updates)
    dataset = Dataset(args.path + args.dataset)
    train, testRatings, testNegatives = dataset.trainMatrix, dataset.testRatings, dataset.testNegatives
    num_users, num_items = train.shape
    print("Load data done [%.1f s]. #user=%d, #item=%d, #train=%d, #test=%d" %
          (time() - t1, num_users, num_items, train.nnz, len(testRatings)))

    # Build model
    model = get_model(num_users, num_items, num_factors, regs)
    for i in range(len(model.layers)):
        print(model.get_layer(index=i).output)

    if learner.lower() == "adagrad":
        model.compile(optimizer=Adagrad(lr=learning_rate),
                      loss='binary_crossentropy')
    elif learner.lower() == "rmsprop":
        model.compile(optimizer=RMSprop(lr=learning_rate),
                      loss='binary_crossentropy')
    elif learner.lower() == "adam":
        model.compile(optimizer=Adam(lr=learning_rate),
                      loss='binary_crossentropy')
    else:
        model.compile(optimizer=SGD(lr=learning_rate),
                      loss='binary_crossentropy')
    print(model.summary())

    # Init performance
    t1 = time()
    (hits, ndcgs) = evaluate_model(model, testRatings, testNegatives, topK,
                                   evaluation_threads)
    hr, ndcg = np.array(hits).mean(), np.array(ndcgs).mean()
    #mf_embedding_norm = np.linalg.norm(model.get_layer('user_embedding').get_weights())+np.linalg.norm(model.get_layer('item_embedding').get_weights())
Пример #32
0
    def adversarial_model(self):
        if self.AM:
            return self.AM
        optimizer = RMSprop(lr=0.0001, decay=3e-8)
        # self.AM = Sequential()
        # self.AM.add(self.generator())
        # self.AM.add(self.discriminator())
        #
        #
        # # self.AM.add(self.generator())
        # # self.AM.add(self.discriminator_model())
        #
        # self.AM.compile(loss='binary_crossentropy', optimizer=optimizer,
        #                 metrics=['accuracy'])
        # return self.AM

        # am = Add()(inputs=(self.generator(),self.discriminator()))

        #
        # am_model.compile(loss='binary_crossentropy', optimizer=optimizer,
        #                 metrics=['accuracy'])
        """        print(type(self.discriminator()(inputs)))
        merge = conc()([self.generator().outputs,self.discriminator().inputs])

        hidden1 = Dense(10, activation='relu')(merge)
        output = Dense(1, activation='sigmoid')(hidden1)

        self.AM = Model(inputs=self.generator().inputs, outputs=output)

        self.AM.summary()
        """

        # gen_inputs, gen_outputs = self.generator(input_output_return=True)
        # dis_inputs, dis_outputs = self.discriminator(input_output_return=True)
        #
        # adv_input_image_dense = Dense(512, activation='relu')(gen_inputs[0])
        # adv_input_label_rotation_dense = Dense(512, activation='relu')(gen_inputs[1])
        # adv_input_label_lightning_dense = Dense(512, activation='relu')(gen_inputs[2])
        #
        # adv_merged_inputs = Add()([adv_input_image_dense, adv_input_label_rotation_dense, adv_input_label_lightning_dense])

        gen = self.generator()
        dis = self.discriminator()(gen.output)
        # print(dis.input)
        # print(type(dis.input))
        #
        # dis.input = gen.output
        #
        # print(dis.input)
        # print(type(dis.input))

        # adv_top_input = gen.generator_input_denses
        #
        # adv_top_merged_input = Add()(adv_top_input)
        #
        # x1 = Dense(gen.depth, activation='relu')(adv_top_merged_input)
        #
        # adv_medium_merged_input = Add()([x1,dis.inp])
        #
        # # x2 = Dense(gen.depth, activation='relu')(adv_medium_merged_input)
        #
        # self.AM = Model(inputs=adv_top_input, outputs=dis.outputs)

        self.AM = Model(inputs=gen.inputs, outputs=dis)
        self.AM.compile(loss='binary_crossentropy',
                        optimizer=optimizer,
                        metrics=['accuracy'])

        return self.AM
Пример #33
0
    def __init__(self):
        rng = numpy.random.RandomState(23455)

        self.X1 = T.tensor4('X1', dtype='float32')
        self.X2 = T.tensor4('X2', dtype='float32')
        self.Y = T.ivector('Y')

        self.layer0 = Layer.ConvMaxPool2Layer(
            rng,
            input1=self.X1,
            input2=self.X2,
            filter_shape=[25, 3, 5, 5],
            poolsize=[2, 2]
        )

        self.layer1 = Layer.ConvMaxPool2Layer(
            rng,
            input1=self.layer0.output1,
            input2=self.layer0.output2,
            filter_shape=[25, 25, 3, 3],
            poolsize=[2, 2]
        )

        self.layer2 = Layer.SecretLayer(
            rng,
            input1=self.layer1.output1,
            input2=self.layer1.output2,
            filter_shape=[25, 25, 5, 5]
        )

        # self.layer3 = Layer.MultiConvMaxPoolLayer(
        #     rng,
        #     input=self.layer2.results,
        #     filter_shape=[25, 25, 3, 3],
        #     poolsize=(2, 2)
        # )

        self.layer3 = Layer.LocalCovLayerDropout(
            rng,
            input=self.layer2.results,
            n_in=18*9*25,
            n_out=200
        )

        self.layer4 = Layer.HiddenLayerDropout(
            rng,
            train_input=self.layer3.train_output,
            test_input=self.layer3.test_output,
            # n_in=25*24*3,
            n_in=800,
            n_out=200
        )
        # self.layer2 = Layer.ConvMaxPoolLayer(
        #     rng,
        #     input=T.abs_(self.layer1.output1 - self.layer1.output2),
        #     filter_shape=[25, 25, 3, 3],
        #     poolsize=[2, 2]
        # )
        #
        # self.layer3 = Layer.HiddenLayer(
        #     rng,
        #     input=self.layer2.output,
        #     n_in=25*18*5,
        #     n_out=500
        # )

        # self.layer5 = Layer.LogisticRegression(self.layer4.output, 500, 2)
        # self.cost = self.layer5.negative_log_likelihood(self.Y)

        self.layer5 = Layer.LogisticRegressionDropout(
            train_input=self.layer4.train_output,
            test_input=self.layer4.test_output,
            n_in=200,
            n_out=2
        )
        self.cost = self.layer5.negative_log_likelihood_train(self.Y)

        self.params = self.layer5.params + self.layer4.params + self.layer3.params + self.layer2.params + self.layer1.params + self.layer0.params
        self.grads = T.grad(self.cost, self.params)

        # learning_rate = numpy.float32(0.01)
        # updates = [
        #     (param_i, param_i - learning_rate * grad_i)
        #     for param_i, grad_i in zip(params, grads)
        # ]

        constraints_list = []
        for param in self.params:
            constraints_list.append(identity())

        rms = RMSprop()
        self.updates = rms.get_updates(self.params, constraints_list, self.cost)
Пример #34
0
print('\ncreate model...')
model = Sequential()  # stack of layers
#model.add(tf.keras.layers.Flatten())
model.add(Dense(num_hidden, activation='relu', input_shape=(num_input, )))
model.add(Dropout(0.2))
model.add(Dense(num_hidden, activation='relu'))
model.add(Dropout(0.2))  #regularization technic by removing some nodes
model.add(
    Dense(num_classes, activation='softmax')
)  # last layer always has softmax(except for regession problems and  binary- 2 classes where sigmoid is enough)
# Prints a string summary of the  neural network.')
model.summary()
model.compile(
    loss=
    'categorical_crossentropy',  # measure how accurate the model during training
    optimizer=RMSprop(
    ),  #this is how model is updated based on data and loss function
    metrics=['accuracy'])

print('\ntrain model...')
history = model.fit(
    x_train,
    y_train,
    batch_size=batch_size,
    epochs=epochs,
    validation_data=(x_test, y_test),
    verbose=1
    # , callbacks=[early_stop, PrintDot()]#Early stopping is a useful technique to prevent overfitting.
)

print('\nplot_accuracy_loss_vs_time...')
history_dict = history.history
Пример #35
0
Enc = Dense(2, activation='tanh')(EncInput)
print(Enc)
encode = Model(EncInput, Enc)

##Decoder
DecInput = Input(shape=(latent_dim))
Dec = Dense(input_dim, activation='sigmoid')(DecInput)
print(Dec)
decode = Model(DecInput, Dec)

##Autoencoder
autoencoder = Model(EncInput, decode(Enc))

#Try different learning rates, batch sizes, dropout layer (?), add another layer (if more data)?
autoencoder.compile(loss='binary_crossentropy',
                    optimizer=RMSprop(learning_rate=0.00013))

# ==== autoencoder

#Activation functions


def sigmoid(x):
    if not isinstance(x, np.ndarray):
        print("Wrong parameter of sigmoid function")
        return False
    sigm = 1.0 / (1 + np.exp(-x))
    return sigm


# def tanh(x):
Пример #36
0
model.add(Dropout(0.25))
model.add(Conv2D(64, kernel_size=(3, 3)))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))

#Train the model

t1 = dt.now()
model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=RMSprop(lr=0.0001, decay=1e-6),
              metrics=['accuracy'])
model_checkpoints = callbacks.ModelCheckpoint(
    '/content/gdrive/My Drive/CNNProject/SampleOut_2018-12-03_23-22-30.624946/10_Layer6_E20_B128_F64_K55.py_weights_{epoch:02d}_{val_loss:.2f}_Proj.h5',
    monitor='val_loss',
    verbose=1,
    save_best_only=True,
    save_weights_only=False,
    mode='auto',
    period=1)

#Training
model_log = model.fit(x_train,
                      y_train,
                      batch_size=batch_size,
                      epochs=epochs,
Пример #37
0
def main():
    train = pd.read_csv(args.folds_csv)
    MODEL_PATH = os.path.join(args.models_dir, args.network + args.alias)
    folds = [int(f) for f in args.fold.split(',')]

    print('Training Model:', args.network + args.alias)

    for fold in folds:

        K.clear_session()
        print(
            '***************************** FOLD {} *****************************'
            .format(fold))

        if fold == 0:
            if os.path.isdir(MODEL_PATH):
                raise ValueError('Such Model already exists')
            os.system("mkdir {}".format(MODEL_PATH))

        # Train/Validation sampling
        df_train = train[train.fold != fold].copy().reset_index(drop=True)
        df_valid = train[train.fold == fold].copy().reset_index(drop=True)

        # Train on pseudolabels only
        if args.pseudolabels_dir != '':
            pseudolabels = pd.read_csv(args.pseudolabels_csv)
            df_train = pseudolabels.sample(
                frac=1, random_state=13).reset_index(drop=True)

        # Keep only non-black images
        ids_train, ids_valid = df_train[
            df_train.unique_pixels > 1].id.values, df_valid[
                df_valid.unique_pixels > 1].id.values

        print('Training on {} samples'.format(ids_train.shape[0]))
        print('Validating on {} samples'.format(ids_valid.shape[0]))

        # Initialize model
        weights_path = os.path.join(MODEL_PATH,
                                    'fold_{fold}.hdf5'.format(fold=fold))

        # Get the model
        model, preprocess = get_model(args.network,
                                      input_shape=(args.input_size,
                                                   args.input_size, 3),
                                      freeze_encoder=args.freeze_encoder)

        # LB metric threshold
        def lb_metric(y_true, y_pred):
            return Kaggle_IoU_Precision(
                y_true,
                y_pred,
                threshold=0 if args.loss_function == 'lovasz' else 0.5)

        model.compile(optimizer=RMSprop(lr=args.learning_rate),
                      loss=make_loss(args.loss_function),
                      metrics=[lb_metric])

        if args.pretrain_weights is None:
            print('No weights passed, training from scratch')
        else:
            wp = args.pretrain_weights.format(fold)
            print('Loading weights from {}'.format(wp))
            model.load_weights(wp, by_name=True)

        # Get augmentations
        augs = get_augmentations(args.augmentation_name,
                                 p=args.augmentation_prob)

        # Data generator
        dg = SegmentationDataGenerator(input_shape=(args.input_size,
                                                    args.input_size),
                                       batch_size=args.batch_size,
                                       augs=augs,
                                       preprocess=preprocess)

        train_generator = dg.train_batch_generator(ids_train)
        validation_generator = dg.evaluation_batch_generator(ids_valid)

        # Get callbacks
        callbacks = get_callback(args.callback,
                                 weights_path=weights_path,
                                 fold=fold)

        # Fit the model with Generators:
        model.fit_generator(
            generator=ThreadsafeIter(train_generator),
            steps_per_epoch=ids_train.shape[0] // args.batch_size * 2,
            epochs=args.epochs,
            callbacks=callbacks,
            validation_data=ThreadsafeIter(validation_generator),
            validation_steps=np.ceil(ids_valid.shape[0] / args.batch_size),
            workers=args.num_workers)

        gc.collect()
Пример #38
0
cost = layer4.negative_log_likelihood(Y)

params = layer4.params + layer3.params + layer2.params + layer1.params + layer0.params
grads = T.grad(cost, params)

# learning_rate = numpy.float32(0.01)
# updates = [
#     (param_i, param_i - learning_rate * grad_i)
#     for param_i, grad_i in zip(params, grads)
# ]

constraints_list = []
for param in params:
    constraints_list.append(identity())

rms = RMSprop()
updates = rms.get_updates(params, constraints_list, cost)

def read_image(address):
    img = Image.open(open(address))
    img = numpy.asarray(img, dtype='float32') / 256.
    # put image in 4D tensor of shape (1, 3, height, width)
    img = img.transpose(2, 0, 1).reshape(1, 3, 128, 48)
    return img


# img1 = read_image('/home/austin/Documents/Datasets/VIPeR/cam_a/001_45.bmp')
# img2 = read_image('/home/austin/Documents/Datasets/VIPeR/cam_b/091_90.bmp')
# f = theano.function([X1, X2, Y], [cost, layer2.similarity])
# y = numpy.asarray([-1], dtype='int32')
# [tmp, sim] = f(img1, img2, y)