Ejemplo n.º 1
0
    X_test, Y_test, test_reps = valid_generator.get_data()

    y_test = np.argmax(Y_test, axis=1)

    if 'EmgLstmNet' in PARAMS_MODEL['name']:
        model = MODEL(input_shape=(None, 10),
                      classes=train_generator.n_classes,
                      **PARAMS_MODEL['extra'])
    else:
        model = MODEL(input_shape=train_generator.dim,
                      classes=train_generator.n_classes,
                      **PARAMS_MODEL['extra'])
    model.summary()

    if PARAMS_TRAINING['optimizer'] == 'adam':
        optimizer = optimizers.Adam(lr=PARAMS_TRAINING['l_rate'],
                                    epsilon=0.001)
    elif PARAMS_TRAINING['optimizer'] == 'sgd':
        optimizer = optimizers.SGD(lr=PARAMS_TRAINING['l_rate'], momentum=0.9)

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

    train_callbacks = []
    if LOGGING_ENABLE:
        tensorboardCallback = MyTensorboard(log_dir=LOGGING_TESNORBOARD_FILE +
                                            "/{}".format(subject),
                                            batch_size=100,
                                            histogram_freq=5)
        train_callbacks.append(tensorboardCallback)
    lrScheduler = MyLRScheduler(**PARAMS_TRAINING['l_rate_schedule'])
def save_bottlebeck_features():
    np.random.seed(2929)

    vgg_model = applications.VGG16(weights='imagenet',
                                   include_top=False,
                                   input_shape=(150, 150, 3))
    print('Model loaded.')

    #initialise top model
    top_model = Sequential()
    top_model.add(Flatten(input_shape=vgg_model.output_shape[1:]))
    top_model.add(Dense(256, activation='relu'))
    top_model.add(Dropout(0.5))
    top_model.add(Dense(1, activation='sigmoid'))

    model = Model(inputs=vgg_model.input, outputs=top_model(vgg_model.output))

    model.trainable = True

    model.summary()

    #Total of 20 layers. The classification is considered as one layer
    #Therefore, intermediate is 19 layers
    #0, 4[:4], 3[:7], 4[:11], 4[:15], 4[:19] (Group 0, 1, 2, 3, 4, 5)
    #0 -> All trainable
    #5 -> All non-trainable except classification layer
    #Always keep layer 20 trainable because it is classification layer
    #layer_count = 1
    for layer in model.layers[:7]:
        layer.trainable = False
    #print("NO-Top: Layer is %d trainable" %layer_count)
    #layer_count = layer_count + 1

    model.summary()

    train_datagen = ImageDataGenerator(rescale=1. / 255)
    test_datagen = ImageDataGenerator(rescale=1. / 255)

    train_generator = train_datagen.flow_from_directory(
        train_data_dir,
        target_size=(img_height, img_width),
        batch_size=batch_size,
        class_mode='binary')

    validation_generator = test_datagen.flow_from_directory(
        validation_data_dir,
        target_size=(img_height, img_width),
        batch_size=batch_size,
        class_mode='binary')

    sgd = optimizers.Adam(
        lr=1e-6
    )  #optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

    model.compile(loss="binary_crossentropy",
                  optimizer=sgd,
                  metrics=['accuracy'])

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

    history = model.fit_generator(
        train_generator,
        steps_per_epoch=nb_train_samples // batch_size,
        epochs=epochs,
        validation_data=validation_generator,
        validation_steps=nb_validation_samples // batch_size,
        verbose=1)

    history_dict = history.history

    #Plotting the training and validation loss
    history_dict = history.history
    loss_values = history_dict['loss']
    val_loss_values = history_dict['val_loss']
    epochs_0 = range(1, len(history_dict['acc']) + 1)
    plt.plot(epochs_0, loss_values, 'bo', label='Training loss')
    plt.plot(epochs_0, val_loss_values, 'b', label='Validation loss')
    plt.title(
        'ADvsNM_32_VGG16_Freeze_data3_group2 - Training and validation loss')
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.legend()
    #plt.show()
    plt.savefig('ADvsNM_32_VGG16_Freeze_data3_group2_loss.png')
    plt.close()

    #Plotting the training and validation accuracy
    acc_values = history_dict['acc']
    val_acc_values = history_dict['val_acc']
    plt.plot(epochs_0, acc_values, 'bo', label='Training acc')
    plt.plot(epochs_0, val_acc_values, 'b', label='Validation acc')
    plt.title(
        'ADvsNM_32_VGG16_Freeze_data3_group2 - Training and validation accuracy'
    )
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.legend()
    #plt.show()
    plt.savefig('ADvsNM_32_VGG16_Freeze_data3_group2_acc.png')
    plt.close()
         unroll=True,
         recurrent_activation='hard_sigmoid',
         bias_initializer='RandomNormal',
         implementation=1))
model.add(
    LSTM(500,
         dropout=0.2,
         recurrent_dropout=0.3,
         unroll=True,
         recurrent_activation='hard_sigmoid',
         bias_initializer='RandomNormal',
         implementation=1))
model.add(Dense(2, activation='softmax', bias_initializer='RandomNormal'))
optimizerx = optimizers.Adam(lr=0.001,
                             beta_1=0.9,
                             beta_2=0.999,
                             epsilon=None,
                             decay=0.0,
                             amsgrad=False)
model.compile(loss='poisson', optimizer=optimizerx, metrics=['accuracy'])
print(model.summary())
model.fit(trainx, trainy, batch_size=32, epochs=20, verbose=5)

model_json = model.to_json()
with open("models/model9.json", "w") as json_file:
    json_file.write(model_json)
model.save_weights("models/model9.h5")

score, acc = model.evaluate(Valx, Valy, verbose=2, batch_size=4)
print("Logloss score : %.2f" % (score))
print("Validation set accuracy: %.2f" % (acc))
Ejemplo n.º 4
0
train_datagen = utils.DroneDataGenerator(rotation_range=0.2,
                                         rescale=1. / 255,
                                         width_shift_range=0.2,
                                         height_shift_range=0.2)

train_data_generator = train_datagen.flow_from_directory(TRAIN_DATA_PATH)
test_data_generator = train_datagen.flow_from_directory(TEST_DATA_PATH)

model = cnn_models.resnet8(700, 500, 1, 1)

# Serialize model into json
json_model_path = os.path.join(OUTPUT_PATH, "model.json")
utils.modelToJson(model, json_model_path)

optimizer = optimizers.Adam(decay=1e-5)

model.alpha = tf.Variable(1, trainable=False, name='alpha', dtype=tf.float32)
#model.beta  = tf.Variable(0, trainable=False, name='beta', dtype=tf.float32)

# Initialize number of samples for hard-mining
model.k_mse = tf.Variable(32, trainable=False, name='k_mse', dtype=tf.int32)
#model.k_entropy = tf.Variable(32, trainable=False, name='k_entropy', dtype=tf.int32)

model.compile(
    loss=[utils.hard_mining_mse(model.k_mse)],
    #utils.hard_mining_entropy(model.k_entropy)],
    optimizer=optimizer,
    loss_weights=[model.alpha])
#loss_weights=[model.alpha, model.beta])
Ejemplo n.º 5
0
classifier.add(MaxPooling2D(pool_size=(2, 2)))

#Adding 3rd Concolution Layer
classifier.add(Convolution2D(64, 3, 3, activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))

#Step 3 - Flattening
classifier.add(Flatten())

#Step 4 - Full Connection
classifier.add(Dense(256, activation='relu'))
classifier.add(Dropout(0.5))
classifier.add(Dense(3, activation='softmax'))

#Compiling The CNN
classifier.compile(optimizer=optimizers.Adam(lr=0.0005),
                   loss='categorical_crossentropy',
                   metrics=['accuracy'])

#Part 2 Fittting the CNN to the image
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1. / 255,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1. / 255)

training_set = train_datagen.flow_from_directory('mydata/training_set',
                                                 target_size=(64, 64),
                                                 batch_size=2,
        1,
        init='normal',
        activation=None,
    ))  # (yaw,pitch,roll) 예측

    #Compile model
    learning_rate = 0.05
    epochs = 10
    decay_rate = learning_rate / epochs

    from keras.callbacks import EarlyStopping

    early_stopping = EarlyStopping()  # 개선여지 없을때 조기종료
    adam = optimizers.Adam(lr=learning_rate,
                           beta_1=0.9,
                           beta_2=0.999,
                           epsilon=None,
                           decay=0.0,
                           amsgrad=False)

    model.compile(loss='mse', optimizer='adam')
    hist_256 = model.fit(x_train_stack,
                         y_train,
                         validation_data=(x_test_stack, y_test),
                         batch_size=512,
                         epochs=epochs,
                         verbose=2)

model.save('C:/Users/admin/Desktop/My_CNN_model_0827.h5')

print('My_CNN_model.h5저장완료')
Ejemplo n.º 7
0
def train(
    G,
    layer_size: List[int],
    num_samples: List[int],
    batch_size: int = 100,
    num_epochs: int = 10,
    learning_rate: float = 0.001,
    dropout: float = 0.0,
):
    """
    Train the GraphSAGE model on the specified graph G
    with given parameters.

    Args:
        G: NetworkX graph file
        layer_size: A list of number of hidden units in each layer of the GraphSAGE model
        num_samples: Number of neighbours to sample at each layer of the GraphSAGE model
        batch_size: Size of batch for inference
        num_epochs: Number of epochs to train the model
        learning_rate: Initial Learning rate
        dropout: The dropout (0->1)
    """

    # Split links into train/test
    print("Using '{}' method to sample negative links".format(
        args.edge_sampling_method))

    # From the original graph, extract E_test and the reduced graph G_test:
    edge_splitter_test = EdgeSplitter(G)
    # Randomly sample a fraction p=0.1 of all positive links, and same number of negative links, from G, and obtain the
    # reduced graph G_test with the sampled links removed:
    G_test, edge_ids_test, edge_labels_test = edge_splitter_test.train_test_split(
        p=0.1,
        keep_connected=True,
        method=args.edge_sampling_method,
        probs=args.edge_sampling_probs,
    )

    # From G_test, extract E_train and the reduced graph G_train:
    edge_splitter_train = EdgeSplitter(G_test, G)
    # Randomly sample a fraction p=0.1 of all positive links, and same number of negative links, from G_test, and obtain the
    # further reduced graph G_train with the sampled links removed:
    G_train, edge_ids_train, edge_labels_train = edge_splitter_train.train_test_split(
        p=0.1,
        keep_connected=True,
        method=args.edge_sampling_method,
        probs=args.edge_sampling_probs,
    )

    # G_train, edge_ds_train, edge_labels_train will be used for model training
    # G_test, edge_ds_test, edge_labels_test will be used for model testing

    # Convert G_train and G_test to StellarGraph objects (undirected, as required by GraphSAGE) for ML:
    G_train = sg.StellarGraph(G_train, node_features="feature")
    G_test = sg.StellarGraph(G_test, node_features="feature")

    # Mapper feeds link data from sampled subgraphs to GraphSAGE model
    # We need to create two mappers: for training and testing of the model
    train_gen = GraphSAGELinkGenerator(G_train,
                                       batch_size,
                                       num_samples,
                                       name="train").flow(edge_ids_train,
                                                          edge_labels_train,
                                                          shuffle=True)

    test_gen = GraphSAGELinkGenerator(G_test,
                                      batch_size,
                                      num_samples,
                                      name="test").flow(
                                          edge_ids_test, edge_labels_test)

    # GraphSAGE model
    graphsage = GraphSAGE(layer_sizes=layer_size,
                          generator=train_gen,
                          bias=True,
                          dropout=dropout)

    # Construct input and output tensors for the link prediction model
    x_inp, x_out = graphsage.build()

    # Final estimator layer
    prediction = link_classification(
        output_dim=1,
        output_act="sigmoid",
        edge_embedding_method=args.edge_embedding_method)(x_out)

    # Stack the GraphSAGE and prediction layers into a Keras model, and specify the loss
    model = keras.Model(inputs=x_inp, outputs=prediction)
    model.compile(
        optimizer=optimizers.Adam(lr=learning_rate),
        loss=losses.binary_crossentropy,
        metrics=[metrics.binary_accuracy],
    )

    # Evaluate the initial (untrained) model on the train and test set:
    init_train_metrics = model.evaluate_generator(train_gen)
    init_test_metrics = model.evaluate_generator(test_gen)

    print("\nTrain Set Metrics of the initial (untrained) model:")
    for name, val in zip(model.metrics_names, init_train_metrics):
        print("\t{}: {:0.4f}".format(name, val))

    print("\nTest Set Metrics of the initial (untrained) model:")
    for name, val in zip(model.metrics_names, init_test_metrics):
        print("\t{}: {:0.4f}".format(name, val))

    # Train model
    print("\nTraining the model for {} epochs...".format(num_epochs))
    history = model.fit_generator(train_gen,
                                  epochs=num_epochs,
                                  validation_data=test_gen,
                                  verbose=2,
                                  shuffle=False)

    # Evaluate and print metrics
    train_metrics = model.evaluate_generator(train_gen)
    test_metrics = model.evaluate_generator(test_gen)

    print("\nTrain Set Metrics of the trained model:")
    for name, val in zip(model.metrics_names, train_metrics):
        print("\t{}: {:0.4f}".format(name, val))

    print("\nTest Set Metrics of the trained model:")
    for name, val in zip(model.metrics_names, test_metrics):
        print("\t{}: {:0.4f}".format(name, val))

    # Save the trained model
    save_str = "_n{}_l{}_d{}_r{}".format(
        "_".join([str(x) for x in num_samples]),
        "_".join([str(x) for x in layer_size]),
        dropout,
        learning_rate,
    )
    model.save("graphsage_link_pred" + save_str + ".h5")
Ejemplo n.º 8
0
 def _compile(self):
     self.model.compile(loss=losses.mean_squared_error,
                        optimizer=optimizers.Adam(),
                        metrics=['accuracy'])
Ejemplo n.º 9
0
    x = K.reshape(x, (b_size * 64 * 64, num_classes))
    x = K.softmax(x)
    x = K.reshape(x, (b_size, 64, 64, num_classes))
    return x


def resize_image(x):
    x = K.resize_images(x, 4, 4, "channels_last")
    return x


model.add(Activation(custom_softmax))
model.add(Lambda(resize_image))

# sgd = optimizers.SGD(lr=10, momentum=0.0, decay=0, nesterov=False)
opt = optimizers.Adam(lr=1E-4, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
model.compile(optimizer=opt, loss=custom_crossentrophy)

model.summary()
model.load_weights("../weights/implementation2-95.h5")

save_every_n_epoch = 5

# for i in range(n_epochs // save_every_n_epoch):
#     model.fit_generator(image_processing.image_generator_hist(list_dir, images_dir_name, b_size),
#                      steps_per_epoch=len(list_dir)//b_size, epochs=save_every_n_epoch)
#     model.save_weights("../weights/implementation2-" + str(i * save_every_n_epoch) + ".h5")
#
#     # make validation
#     loss = model.evaluate_generator(image_processing.image_generator_hist(None, "../test_set", b_size), 2)
#     print("Validation loss:", loss)
Ejemplo n.º 10
0
print("LivDet2013 Loaded")

for list_ in train_data:
    print(len(list_))
# train_data = np.array(train_data)
# train_data = train_data.astype('float32')/255

model = VGG16(include_top=True, weights=None, classes=1000)
model.layers.pop()
model.layers[-1].outbound_nodes = []
inp = model.input
opt = model.layers[-1].output
opt2 = Dense(250, activation='sigmoid')(opt)  #intialization?
model = Model(input=inp, output=opt2)

adam = optimizers.Adam(lr=0.000001, beta_1=0.9, beta_2=0.999)
sgd = optimizers.SGD(lr=0.1, momentum=0.9, decay=0.0, nesterov=False)
model.compile(optimizer=adam, loss=loss_function)

iterations = 10000
losses = []
min_losses = []

for i in range(1, iterations + 1):
    print("iteration:", i)
    (anchors, examples) = prepare_batch(train_data)
    y_true = model.predict(examples)
    loss = model.train_on_batch(anchors, y_true)
    print(loss)
    losses.append(loss)
    if i % 50 == 0:
Ejemplo n.º 11
0
def main():
    V_data = sio.loadmat('V_train.mat')
    V_data = V_data['V_train']
    V_data = np.array(V_data)
    I_data = sio.loadmat('I_train.mat')
    I_data = I_data['I_train']
    I_data = np.array(I_data)
    IrrT_data = sio.loadmat('IrrT_train.mat')
    IrrT_data = IrrT_data['IrrT_train']
    IrrT_data = np.array(IrrT_data)
    label = sio.loadmat('label_train.mat')
    label = label['label_train']

    # shuffle
    index = np.arange(0, len(label))

    random.shuffle(index)

    # label data process
    label = label.reshape(-1)
    label = np_utils.to_categorical(label, num_classes=13)
    label = label[index]

    # Irr&T data process
    IrrT_data = IrrT_data.reshape((IrrT_data.shape[0], IrrT_data.shape[1]))
    IrrT_data[:, 0] = IrrT_data[:, 0] / 775.29
    IrrT_data[:, 1] = IrrT_data[:, 1] / 51.98
    IrrT_data = IrrT_data[index]

    # V&I dataprocess
    V_data = np.array(V_data, dtype='float32') / (13 * 37.78)
    I_data = np.array(I_data, dtype='float32') / 9.12
    V_data = V_data.reshape((V_data.shape[0], V_data.shape[1], 1))
    I_data = I_data.reshape((I_data.shape[0], I_data.shape[1], 1))
    V_data = V_data[index]
    I_data = I_data[index]

    input_V = Input(shape=(1000, 1), name='input_V')
    input_I = Input(shape=(1000, 1), name='input_I')
    input_IrrT = Input(shape=(2, ), name='input_IrrT')
    model_input = [input_V, input_I, input_IrrT]

    IV_train = concatenate([input_V, input_I])

    Conv_Model = Conv1D(filters=32,
                        kernel_size=2,
                        activation='relu',
                        kernel_initializer=initializers.he_normal(),
                        name='Conv1')(IV_train)
    Conv_Model = BatchNormalization(name='bn_conv1')(Conv_Model)
    Conv_Model = MaxPooling1D(pool_size=2, strides=2)(Conv_Model)

    ##网上找的
    # X = convolutional_block(Conv_Model, k_size=3, filters=[32, 32, 64], stage=2, block='a', s=1)
    # X = identity_block(X, 3, [32, 32, 64], stage=2, block='b')
    # X = identity_block(X, 3, [32, 32, 64], stage=2, block='c')
    # # Stage 3
    # X = convolutional_block(X, k_size=3, filters=[64, 64, 256], stage=3, block='a', s=2)
    # X = identity_block(X, 3, [64, 64, 256], stage=3, block='b')
    # X = identity_block(X, 3, [64, 64, 256], stage=3, block='c')
    # X = identity_block(X, 3, [64, 64, 256], stage=3, block='d')
    # # Stage 4
    # X = convolutional_block(X, k_size=3, filters=[128, 128, 512], stage=4, block='a', s=2)
    # X = identity_block(X, 3, [128, 128, 512], stage=4, block='b')
    # X = identity_block(X, 3, [128, 128, 512], stage=4, block='c')
    # X = identity_block(X, 3, [128, 128, 512], stage=4, block='d')
    # X = identity_block(X, 3, [128, 128, 512], stage=4, block='e')
    # X = identity_block(X, 3, [128, 128, 512], stage=4, block='f')
    # # Stage 5
    # X = convolutional_block(X, k_size=3, filters=[256, 256, 1024], stage=5, block='a', s=2)
    # X = identity_block(X, 3, [256, 256, 1024], stage=5, block='b')
    # X = identity_block(X, 3, [256, 256, 1024], stage=5, block='c')
    #
    # X = AveragePooling1D(pool_size=2)(X)

    ###自己搭的感觉效果还行,就是过拟合有点严重,本来只在输出添加池化的,结果显存不够,只好在中间插入池化层来减小显存占用
    X = res_Conv_block(Conv_Model, k_size=9, input_filter=32, output_filter=64)
    X = MaxPooling1D(pool_size=2, strides=2)(X)
    X = res_Conv_block(X, k_size=7, input_filter=64, output_filter=128)
    X = MaxPooling1D(pool_size=2, strides=2)(X)
    X = res_Conv_block(X, k_size=5, input_filter=128, output_filter=256)
    X = MaxPooling1D(pool_size=2, strides=2)(X)
    X = res_Conv_block(X, k_size=3, input_filter=256, output_filter=512)
    X = MaxPooling1D(pool_size=2, strides=2)(X)

    ###
    # X = Conv1D(filters=64, kernel_size=4, activation='relu',
    #                     kernel_initializer=initializers.he_normal())(Conv_Model)
    # X = MaxPooling1D(pool_size=2, strides=2)(X)
    # X = Conv1D(filters=128, kernel_size=8, activation='relu',
    #                     kernel_initializer=initializers.he_normal())(X)
    # X = MaxPooling1D(pool_size=2, strides=2)(X)
    # X = Conv1D(filters=256, kernel_size=6, activation='relu',
    #                     kernel_initializer=initializers.he_normal())(X)
    # X = MaxPooling1D(pool_size=2, strides=2)(X)
    # X = Conv1D(filters=512, kernel_size=6, activation='relu',
    #                     kernel_initializer=initializers.he_normal())(X)
    # X = MaxPooling1D(pool_size=2, strides=2)(X)
    # X = BatchNormalization(epsilon=1e-06, momentum=0.9)(X)
    X = BatchNormalization(epsilon=1e-06, momentum=0.9)(X)
    X = Dropout(0.7)(X)
    X = Flatten()(X)

    X = concatenate([X, input_IrrT], axis=1)

    Fc_Model = Dense(128, activation='relu')(X)
    Fc_Model = Dense(64, activation='relu')(Fc_Model)
    Fc_Out = Dense(13,
                   kernel_regularizer=regularizers.l2(0.0015),
                   activation='softmax',
                   name='Fc_Out')(Fc_Model)

    model = Model(inputs=model_input, outputs=[Fc_Out])
    model.compile(loss='categorical_crossentropy',
                  optimizer=optimizers.Adam(lr=1e-4),
                  metrics=['accuracy'])

    model.fit({
        'input_V': V_data,
        'input_I': I_data,
        'input_IrrT': IrrT_data
    }, {'Fc_Out': label},
              epochs=200,
              batch_size=32,
              validation_split=0.2)

    model.save('CNNonly.h5')
Ejemplo n.º 12
0
inp = Input(shape=(maxlen, ))
x = Embedding(max_features, embed_size)(inp)
x = Flatten()(x)

agei = Input(shape=(153, ))

conc = concatenate([x, agei])

dens = Dense(128)(conc)
dens = Dense(3)(dens)
acti = Activation('softmax')(dens)

model = Model(inputs=[inp, agei], outputs=acti)

model.load_weights('models/my_model_weights.h5')
optimizer = optimizers.Adam(lr=1e-4)
model.compile(loss='categorical_crossentropy',
              optimizer=optimizer,
              metrics=['accuracy'])
#####________________-

#removeing names infromt of nodes

vals = [
    'Top0', 'Top1', 'Top2', 'Top3', 'Middle0', 'Middle1', 'Middle2', 'Base0',
    'Base1'
]
for i in ['0', '1', '2', '3']:
    print(i)
    for val in vals:
        perumes_old[i] = perumes_old[i].apply(lambda x: x.replace(val, ''))
Ejemplo n.º 13
0
def train(model, data, args):
    """
    Training a CapsuleNet
    :param model: the CapsuleNet model
    :param data: a tuple containing training and testing data, like `((x_train, y_train), (x_test, y_test))`
    :param args: arguments
    :return: The trained model
    """
    # unpacking the data
    (x_train, y_train), (x_test, y_test) = data

    # callbacks
    log = callbacks.CSVLogger(args.save_dir + '/log.csv')
    tb = callbacks.TensorBoard(log_dir=args.save_dir + '/tensorboard-logs',
                               batch_size=args.batch_size,
                               histogram_freq=int(args.debug))
    checkpoint = callbacks.ModelCheckpoint(args.save_dir +
                                           '/weights-{epoch:02d}.h5',
                                           monitor='val_capsnet_acc',
                                           save_best_only=True,
                                           save_weights_only=True,
                                           verbose=1)
    lr_decay = callbacks.LearningRateScheduler(
        schedule=lambda epoch: args.lr * (args.lr_decay**epoch))

    # compile the model
    model.compile(optimizer=optimizers.Adam(lr=args.lr),
                  loss=[margin_loss, 'mse'],
                  loss_weights=[1., args.lam_recon],
                  metrics={'capsnet': 'accuracy'})
    """
    # Training without data augmentation:
    model.fit([x_train, y_train], [y_train, x_train], batch_size=args.batch_size, epochs=args.epochs,
              validation_data=[[x_test, y_test], [y_test, x_test]], callbacks=[log, tb, checkpoint, lr_decay])
    """

    # Begin: Training with data augmentation ---------------------------------------------------------------------#
    def train_generator(x, y, batch_size, shift_fraction=0.):
        train_datagen = ImageDataGenerator(
            width_shift_range=shift_fraction,
            height_shift_range=shift_fraction)  # shift up to 2 pixel for MNIST
        generator = train_datagen.flow(x, y, batch_size=batch_size)
        while 1:
            x_batch, y_batch = generator.next()
            yield ([x_batch, y_batch], [y_batch, x_batch])

    # Training with data augmentation. If shift_fraction=0., also no augmentation.
    model.fit_generator(
        generator=train_generator(x_train, y_train, args.batch_size,
                                  args.shift_fraction),
        steps_per_epoch=int(y_train.shape[0] / args.batch_size),
        epochs=args.epochs,
        validation_data=[[x_test, y_test], [y_test, x_test]],
        callbacks=[log, tb, checkpoint, lr_decay])
    # End: Training with data augmentation -----------------------------------------------------------------------#

    model.save_weights(args.save_dir + '/trained_model.h5')
    print('Trained model saved to \'%s/trained_model.h5\'' % args.save_dir)

    from utils import plot_log
    plot_log(args.save_dir + '/log.csv', show=True)

    return model
Ejemplo n.º 14
0
def runTrain(opts, sampleNumLimit=25):
    description = 'Triplet_Model'
    print(description)
    print("with parameters, Alpha: %s, Batch_size: %s, Embedded_size: %s, Epoch_num: %s, sampleNumLimit: %s"%(alpha, batch_size, emb_size, number_epoch, sampleNumLimit))
    source = os.path.basename(opts.input).split('.')[0]
    '''
    # ================================================================================
    # This part is to prepare the files' index for geenrating triplet examples
    # and formulating each epoch inputs
    '''
    allData, allLabel, label2IdDict, Id2Label = getClsIdDict(opts.input, sampleNumLimit, int(opts.data_dim))
    all_traces = allData[:, :, np.newaxis]
    print("Load traces with ", all_traces.shape)
    print("Total size allocated on RAM : ", str(all_traces.nbytes / 1e6) + ' MB')

    num_classes = len(list(label2IdDict.keys()))
    print("number of classes: " + str(num_classes))

    print('building positive pairs...')
    Xa_train, Xp_train = build_positive_pairs(range(0, num_classes), label2IdDict)
    # Gather the ids of all network traces that are used for training
    # This just union of two sets set(A) | set(B)
    all_traces_train_idx = list(set(Xa_train) | set(Xp_train))
    print("X_train Anchor: ", Xa_train.shape)
    print("X_train Positive: ", Xp_train.shape)


    # Training the Triplet Model
    #shared_conv2 = DF(input_shape=(5000,1), emb_size=emb_size)
    input_shape = (allData.shape[1], 1)
    print('input shape is: ', input_shape)
    shared_conv2 = DF_model.DF(input_shape=input_shape, emb_size=emb_size)

    anchor = Input(input_shape, name='anchor')
    positive = Input(input_shape, name='positive')
    negative = Input(input_shape, name='negative')

    a = shared_conv2(anchor)
    p = shared_conv2(positive)
    n = shared_conv2(negative)

    # The Dot layer in Keras now supports built-in Cosine similarity using the normalize = True parameter.
    # From the Keras Docs:
    # keras.layers.Dot(axes, normalize=True)
    # normalize: Whether to L2-normalize samples along the dot product axis before taking the dot product.
    #  If set to True, then the output of the dot product is the cosine proximity between the two samples.
    pos_sim = Dot(axes=-1, normalize=True)([a, p])
    neg_sim = Dot(axes=-1, normalize=True)([a, n])

    # customized loss
    loss = Lambda(cosine_triplet_loss, output_shape=(1,))([pos_sim, neg_sim])
    model_triplet = Model(inputs=[anchor, positive, negative], outputs=loss)
    print(model_triplet.summary())
    if opts.plotModel:
        from keras.utils import plot_model
        plot_model(model_triplet, to_file='triplet_model.png', dpi=200)
        sys.exit(1)

    # opt = optimizers.SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True)
    opt = optimizers.Adam(lr=0.001)
    model_triplet.compile(loss=identity_loss, optimizer=opt)
    print('finish compliation model')

    logpath = os.path.join(ResDir, 'Training_Log_{}.csv'.format(description))
    csv_logger = CSVLogger(logpath, append=True, separator=';')

    # At first epoch we don't generate hard triplets
    start = time.time()
    gen_hard = SemiHardTripletGenerator(Xa_train, Xp_train, batch_size, all_traces, all_traces_train_idx, Id2Label, None)
    print('finish generate first batch of data, start training...')
    for epoch in range(number_epoch):
        model_triplet.fit_generator(generator=gen_hard.next_train(),
                                    steps_per_epoch=Xa_train.shape[0] // batch_size,    # // 的意思是整除
                                    epochs=1,
                                    verbose=1,
                                    callbacks=[csv_logger])
        gen_hard = SemiHardTripletGenerator(Xa_train, Xp_train, batch_size, all_traces, all_traces_train_idx, Id2Label, shared_conv2)
        # For no semi-hard triplet
        #gen_hard = SemiHardTripletGenerator(Xa_train, Xp_train, batch_size, all_traces, all_traces_train_idx, None)
    end = time.time()
    time_last = end - start

    print('finishing training, train time is: {:f}'.format(time_last))
    modelPath = os.path.join(modelDir, 'triplet_{}_{}.h5'.format(source, sampleNumLimit))
    shared_conv2.save(modelPath)
    print('model save to path {}'.format(modelPath))
    return modelPath, time_last
Ejemplo n.º 15
0
                  activation='tanh',
                  input_dim=x_train.shape[1]))
        model.add(
            Dense(units=int(NP.round(x_train.shape[1] / 1)),
                  activation='tanh'))
        model.add(
            Dense(units=int(NP.round(x_train.shape[1] / 1)),
                  activation='tanh'))
        model.add(
            Dense(units=int(NP.round(x_train.shape[1] / 1)),
                  activation='tanh'))
        model.add(Dense(units=y_train.shape[1], activation='linear'))

        Adam = optimizers.Adam(lr=5e-4,
                               decay=0,
                               beta_1=0.9,
                               beta_2=0.999,
                               epsilon=1e-8)

        model.compile(loss='mean_squared_error',
                      optimizer=Adam,
                      metrics=['mae'])
        """
        ----------------------------------------
        Model Training
        ----------------------------------------
        """
        trained = model.fit(x_train,
                            y_train,
                            validation_split=0,
                            shuffle=False,
def class_percent_2buckRange(y_true, y_pred): # percent of times the prediction is within 2 buckets of true value
    return K.cast(K.equal(K.argmax(y_true, axis=-1),K.argmax(y_pred, axis=-1)),K.floatx()) +     K.cast(K.equal(K.cast(K.argmax(y_true, axis=-1), K.floatx()), K.cast(K.argmax(y_pred, axis=-1),K.floatx())-1.0), K.floatx()) +     K.cast(K.equal(K.cast(K.argmax(y_true, axis=-1), K.floatx()), K.cast(K.argmax(y_pred, axis=-1),K.floatx())+1.0), K.floatx()) +     K.cast(K.equal(K.cast(K.argmax(y_true, axis=-1), K.floatx()), K.cast(K.argmax(y_pred, axis=-1),K.floatx())-2.0), K.floatx()) +     K.cast(K.equal(K.cast(K.argmax(y_true, axis=-1), K.floatx()), K.cast(K.argmax(y_pred, axis=-1),K.floatx())+2.0), K.floatx())    

# For reference, from keras documentation: https://github.com/keras-team/keras/blob/master/keras/losses.py
#def class_categorical_accuracy(y_true, y_pred):
    #return K.cast(K.equal(K.argmax(y_true, axis=-1),K.argmax(y_pred, axis=-1)),K.floatx())


# #### Configure model loss and optimization function

# In[45]:


# Define Optimizer
if optimizer_type == 'adam':
    model_optimizer = optimizers.Adam(lr = learning_rate) #, decay, beta_1, beta_2 are HPs
elif optimizer_type == 'rmsprop':
    model_optimizer = optimizers.RMSprop(lr = learning_rate) #, decay, rho
elif optimizer_type == 'gradient':
    model_optimizer = optimizers.SGD(lr = learning_rate) #, decay, momentum

# Compile model with appropriate loss function
if speed_bucket_size != 'none_use_regression': # if performing classification, ALWAYS use cross-entropy loss
    model.compile(loss ='categorical_crossentropy', optimizer=model_optimizer, metrics=['accuracy',class_percent_1buckRange,class_percent_2buckRange, class_mae, class_mse]) # class_percent_1buckLow,class_percent_1buckHigh,class_percent_2buckLow, class_percent_2buckHigh,'class_mape'
else:                                          # if performing regression, use mean squared error or mean absolute error
    if loss_function == 'categorical_crossentropy': raise NameError('Are you sure you want to use cross entropy loss with a regression tasks!?')
    model.compile(loss = loss_function, optimizer=model_optimizer, metrics=['mse','mae']) # options: 'mse','mae', 'mape'


# #### Train!
Ejemplo n.º 17
0
def main(args):

    train_imgs, val_imgs = make_seq_dataset(args.root_dir, args.direction,
                                            True, args.steer_threshold,
                                            args.drop_low_angles,
                                            args.steer_correction,
                                            args.window_len, args.lookahead)

    print(train_imgs.shape)
    #plt.plot(val_imgs[:,-1,1])
    #plt.show()

    if args.num_samples > 0:
        train_imgs = train_imgs[:args.num_samples]
        val_imgs = val_imgs[:1000]

    train_gen = seq_generator(train_imgs, args.batch_size, args.augmentation,
                              args.output, args.mode)
    val_gen = seq_generator(val_imgs, args.batch_size, False, args.output,
                            args.mode)

    num_outputs = 1 if args.output == 'angle' else 3
    num_inputs = args.window_len if args.mode == 'concat' else args.window_len - 1
    model = get_lstm_model(num_outputs, args.l2reg, num_inputs)
    """
    model.load_weights("finalcnn-0.179.h5")

    print(model.predict(x.reshape(-1, 480, 640, 3)).reshape(4,4))

    seq_model =  Sequential()

    return
    """
    adam = optimizers.Adam(lr=args.lr,
                           beta_1=0.9,
                           beta_2=0.999,
                           epsilon=1e-08,
                           decay=0.0)
    model.compile(loss="mse", optimizer=adam, metrics=[angle_loss])

    callbacks_list = []
    history_object = model.fit_generator(
        train_gen,
        steps_per_epoch=(len(train_imgs) / args.batch_size),
        validation_data=val_gen,
        validation_steps=(len(val_imgs) / args.batch_size),
        epochs=args.num_epochs,
        verbose=1,
        callbacks=callbacks_list)

    if args.save_model != 'None':
        model_json = model.to_json()
        with open("model.json", "w") as json_file:
            json_file.write(model_json)
        model.save_weights("{}.h5".format(args.save_model))

    pred = []
    real = []
    full_imgs, fnames = make_full_dataset(args.root_dir, args.direction, True,
                                          args.steer_threshold,
                                          args.drop_low_angles,
                                          args.steer_correction,
                                          args.window_len, args.lookahead)
    full_gen = seq_generator(full_imgs, args.batch_size, args.augmentation,
                             args.output, args.mode)

    print("Full imgs shape: ", full_imgs.shape)
    for ix in range(int(len(full_imgs) / args.batch_size)):
        inp, _real = next(full_gen)
        _pred = model.predict(inp)
        #print(_pred[:,0].shape, _real.shape)
        real.extend(_real)
        pred.extend(_pred[:, 0])

    pred = np.array(pred)
    real = np.array(real)
    print("Mean Error: ", np.sqrt(np.mean((pred - real)**2)))

    plt.figure(figsize=(16, 9))
    plt.plot(pred, label='Predicted')
    plt.plot(real, label='Actual')
    plt.legend()
    plt.savefig('pred_baseline.png')
    #plt.show()

    print(len(fnames), pred.shape, real.shape)
    df = pd.DataFrame()
    df['fnames'] = fnames[:len(real)]
    df['angle'] = real
    df['pred'] = pred
    df.to_csv('results_baseline.csv')

    print(history_object.history['val_loss'])
    print(history_object.history['loss'])
Ejemplo n.º 18
0
def eval():
    """
    Checks for keras checkpoints in a tensorflow dir and evaluates losses and given metrics. 
    Also creates visualization and writes everything to tensorboard.
    """

    # create config object
    cfg = load_dict(CONFIG)

    # open files with images and ground truths files with full path names
    with open(img_file) as imgs:
        img_names = imgs.read().splitlines()
    imgs.close()

    # if multigpu support, adjust batch size
    if GPUS > 1:
        cfg.BATCH_SIZE = GPUS * cfg.BATCH_SIZE

    # if a number for steps was given
    if STEPS is not None:
        nbatches_valid = STEPS
    else:
        nbatches_valid, mod = divmod(len(img_names), cfg.BATCH_SIZE)

    # set gpu to use if no multigpu
    # hide the other gpus so tensorflow only uses this one
    os.environ['CUDA_VISIBLE_DEVICES'] = CUDA_VISIBLE_DEVICES

    # tf config and session
    config = tf.ConfigProto(allow_soft_placement=True)
    sess = tf.Session(config=config)
    K.set_session(sess)

    # Variables to visualize losses (as metrics) for tensorboard
    loss_var = tf.Variable(initial_value=0,
                           trainable=False,
                           name='val_loss',
                           dtype=tf.float32)

    loss_without_regularization_var = tf.Variable(
        initial_value=0,
        trainable=False,
        name='val_loss_without_regularization',
        dtype=tf.float32)

    conf_loss_var = tf.Variable(initial_value=0,
                                trainable=False,
                                name='val_conf_loss',
                                dtype=tf.float32)

    class_loss_var = tf.Variable(initial_value=0,
                                 trainable=False,
                                 name='val_class_loss',
                                 dtype=tf.float32)

    bbox_loss_var = tf.Variable(initial_value=0,
                                trainable=False,
                                name='val_bbox_loss',
                                dtype=tf.float32)

    # create placeholders for metrics. Variables get assigned these.
    loss_placeholder = tf.placeholder(loss_var.dtype, shape=())
    loss_without_regularization_placeholder = tf.placeholder(
        loss_without_regularization_var.dtype, shape=())
    conf_loss_placeholder = tf.placeholder(conf_loss_var.dtype, shape=())
    class_loss_placeholder = tf.placeholder(class_loss_var.dtype, shape=())
    bbox_loss_placeholder = tf.placeholder(bbox_loss_var.dtype, shape=())

    # we have to create the assign ops here and call the assign ops with a feed dict, otherwise memory leak
    loss_assign_ops = [
        loss_var.assign(loss_placeholder),
        loss_without_regularization_var.assign(
            loss_without_regularization_placeholder),
        conf_loss_var.assign(conf_loss_placeholder),
        class_loss_var.assign(class_loss_placeholder),
        bbox_loss_var.assign(bbox_loss_placeholder)
    ]

    tf.summary.scalar("loss", loss_var)
    tf.summary.scalar("loss_without_regularization",
                      loss_without_regularization_var)
    tf.summary.scalar("conf_loss", conf_loss_var)
    tf.summary.scalar("class_loss", class_loss_var)
    tf.summary.scalar("bbox_loss", bbox_loss_var)

    # variables for images to visualize
    images_with_boxes = tf.Variable(initial_value=np.zeros(
        (cfg.VISUALIZATION_BATCH_SIZE, cfg.IMAGE_HEIGHT, cfg.IMAGE_WIDTH, 3)),
                                    name="image",
                                    dtype=tf.float32)

    update_placeholder = tf.placeholder(images_with_boxes.dtype,
                                        shape=images_with_boxes.get_shape())

    update_images = images_with_boxes.assign(update_placeholder)

    tf.summary.image("images",
                     images_with_boxes,
                     max_outputs=cfg.VISUALIZATION_BATCH_SIZE)

    # variables for precision recall and mean average precision
    precisions = []
    recalls = []
    APs = []  # mean average precision
    f1s = []

    # placeholders as above
    precision_placeholders = []
    recall_placeholders = []
    prmap_assign_ops = []
    AP_placeholders = []
    f1_placeholders = []

    # add variables, placeholders and assign ops for each class
    for i, name in enumerate(cfg.CLASS_NAMES):

        # print("Creating tensorboard plots for " + name)
        precisions.append(
            tf.Variable(initial_value=0,
                        trainable=False,
                        name="precision/" + name,
                        dtype=tf.float32))

        recalls.append(
            tf.Variable(initial_value=0,
                        trainable=False,
                        name="recall/" + name,
                        dtype=tf.float32))

        f1s.append(
            tf.Variable(initial_value=0,
                        trainable=False,
                        name="f1/" + name,
                        dtype=tf.float32))

        APs.append(
            tf.Variable(initial_value=0,
                        trainable=False,
                        name="AP/" + name,
                        dtype=tf.float32))

        precision_placeholders.append(
            tf.placeholder(dtype=precisions[i].dtype,
                           shape=precisions[i].shape))

        recall_placeholders.append(
            tf.placeholder(dtype=recalls[i].dtype, shape=recalls[i].shape))

        AP_placeholders.append(
            tf.placeholder(dtype=APs[i].dtype, shape=APs[i].shape))

        f1_placeholders.append(
            tf.placeholder(dtype=f1s[i].dtype, shape=f1s[i].shape))

        prmap_assign_ops.append(precisions[i].assign(
            precision_placeholders[i]))
        prmap_assign_ops.append(recalls[i].assign(recall_placeholders[i]))
        prmap_assign_ops.append(APs[i].assign(AP_placeholders[i]))
        prmap_assign_ops.append(f1s[i].assign(f1_placeholders[i]))

    #same for mean average precision

    mAP = tf.Variable(initial_value=0,
                      trainable=False,
                      name="mAP",
                      dtype=tf.float32)

    mAP_placeholder = tf.placeholder(mAP.dtype, shape=())

    prmap_assign_ops.append(mAP.assign(mAP_placeholder))

    tf.summary.scalar("mAP", mAP)

    for i, name in enumerate(cfg.CLASS_NAMES):
        tf.summary.scalar("precision/" + name, precisions[i])
        tf.summary.scalar("recall/" + name, recalls[i])
        tf.summary.scalar("AP/" + name, APs[i])
        tf.summary.scalar("f1/" + name, f1s[i])

    merged = tf.summary.merge_all()

    if STARTWITH is None:
        #check for tensorboard dir and delete old stuff
        if tf.gfile.Exists(tensorboard_dir):
            tf.gfile.DeleteRecursively(tensorboard_dir)
        tf.gfile.MakeDirs(tensorboard_dir)

    writer = tf.summary.FileWriter(tensorboard_dir)

    #instantiate model
    squeeze = SqueezeDet(cfg)

    #dummy optimizer for compilation
    sgd = optimizers.SGD(lr=cfg.LEARNING_RATE,
                         decay=0,
                         momentum=cfg.MOMENTUM,
                         nesterov=False,
                         clipnorm=cfg.MAX_GRAD_NORM)

    adam = optimizers.Adam(lr=0.0001, clipnorm=cfg.MAX_GRAD_NORM)

    if GPUS > 1:
        #parallelize model
        model = multi_gpu_model(squeeze.model, gpus=GPUS)
        model.compile(optimizer=sgd,
                      loss=[squeeze.loss],
                      metrics=[
                          squeeze.bbox_loss, squeeze.class_loss,
                          squeeze.conf_loss,
                          squeeze.loss_without_regularization
                      ])

    else:
        # compile model from squeeze object, loss is not a function of model directly
        if OPTIMIZER == "adam":
            print("adam")
            squeeze.model.compile(optimizer=adam,
                                  loss=[squeeze.loss],
                                  metrics=[
                                      squeeze.bbox_loss, squeeze.class_loss,
                                      squeeze.conf_loss,
                                      squeeze.loss_without_regularization
                                  ])
        else:
            print("sgd")
            squeeze.model.compile(optimizer=sgd,
                                  loss=[squeeze.loss],
                                  metrics=[
                                      squeeze.bbox_loss, squeeze.class_loss,
                                      squeeze.conf_loss,
                                      squeeze.loss_without_regularization
                                  ])

        model = squeeze.model
    # models already evaluated
    evaluated_models = set()

    # get the best ckpts for test set

    best_val_loss_ckpt = None
    best_val_loss = np.inf
    best_mAP_ckpt = None
    best_mAP = -np.inf
    time_out_counter = 0

    with open(gt_val_dir, 'r') as g:
        data = json.load(g)
    g.close()
    print("File read")
    print('STEPS ', nbatches_valid)

    # use this for saving metrics to a csv
    f = open(log_dir_name + "\\metrics.csv", "w")

    header = "epoch;regularized;loss;bbox;class;conf;"

    for i, name in enumerate(cfg.CLASS_NAMES):
        header += name +"_precision;" \
                  + name +"_recall;" \
                  + name + "_AP;" \
                  + name + "_f1;"

    header += "\n"
    f.write(header)

    # listening for new checkpoints
    while 1:

        current_model = None

        #go through checkpoint dir
        for ckpt in sorted(os.listdir(checkpoint_dir)):

            if STARTWITH is not None:
                if ckpt < STARTWITH:
                    evaluated_models.add(ckpt)

            #if model hasn't been evaluated
            if ckpt not in evaluated_models:

                #string for csv
                line = ""

                #add epoch to csv
                line += str(len(evaluated_models) + 1) + ";"

                print("Evaluating model {}".format(ckpt))

                #load this ckpt
                current_model = ckpt
                try:
                    squeeze.model.load_weights(checkpoint_dir + "\\" + ckpt)

                # sometimes model loading files, because the file is still locked, so wait a little bit
                except OSError as e:
                    print(e)
                    time.sleep(10)
                    squeeze.model.load_weights(checkpoint_dir + "\\" + ckpt)

                # create 2 validation generators, one for metrics and one for object detection evaluation
                # we have to reset them each time to have the same data, otherwise we'd have to use batch size one.
                val_generator_1 = generator_from_data_path(img_names,
                                                           data,
                                                           base_val,
                                                           config=cfg)
                val_generator_2 = generator_from_data_path(img_names,
                                                           data,
                                                           base_val,
                                                           config=cfg)

                # create a generator for the visualization of bounding boxes
                vis_generator = visualization_generator_from_data_path(
                    img_names, data, base_val, config=cfg)

                print("  Evaluate losses...")
                # compute losses of whole val set
                losses = model.evaluate_generator(val_generator_1,
                                                  steps=nbatches_valid,
                                                  max_queue_size=10,
                                                  use_multiprocessing=False)

                # manually add losses to tensorboard
                sess.run(
                    loss_assign_ops, {
                        loss_placeholder: losses[0],
                        loss_without_regularization_placeholder: losses[4],
                        conf_loss_placeholder: losses[3],
                        class_loss_placeholder: losses[2],
                        bbox_loss_placeholder: losses[1]
                    })

                #print losses
                print("  Losses:")
                print(
                    "  Loss with regularization: {}\n\tval loss:{}\n\tbbox_loss:{}\n\tclass_loss:{}\n\tconf_loss:{}"
                    .format(losses[0], losses[4], losses[1], losses[2],
                            losses[3]))

                line += "{};{};{};{};{};".format(losses[0], losses[4],
                                                 losses[1], losses[2],
                                                 losses[3])

                #save model with smallest loss
                if losses[4] < best_val_loss:
                    best_val_loss = losses[4]
                    best_val_loss_ckpt = current_model

                #compute precision recall and mean average precision
                precision, recall, f1, AP, boxes, classes = evaluate(
                    model=model,
                    generator=val_generator_2,
                    steps=nbatches_valid,
                    config=cfg)

                # print("boxes ",len(boxes))
                # print("classes ",classes)

                #create feed dict for visualization
                prmap_feed_dict = {}
                for i, name in enumerate(cfg.CLASS_NAMES):

                    prmap_feed_dict[precision_placeholders[i]] = precision[i]
                    prmap_feed_dict[recall_placeholders[i]] = recall[i]
                    prmap_feed_dict[AP_placeholders[i]] = AP[i, 1]
                    prmap_feed_dict[f1_placeholders[i]] = f1[i]

                    line += "{};{};{};{}".format(precision[i], recall[i],
                                                 AP[i, 1], f1[i])

                prmap_feed_dict[mAP_placeholder] = np.mean(AP[:, 1], axis=0)

                #save model with biggest mean average precision
                if np.mean(AP[:, 1], axis=0) > best_mAP:
                    best_mAP = np.mean(AP[:, 1], axis=0)
                    best_mAP_ckpt = current_model

                # run loss assign ops for tensorboard
                sess.run(prmap_assign_ops, prmap_feed_dict)

                # create visualization
                imgs = visualize(model=model,
                                 generator=vis_generator,
                                 config=cfg)

                # update op for images
                sess.run(update_images, {update_placeholder: imgs})

                # write everything to tensorboard
                writer.add_summary(merged.eval(session=sess),
                                   len(evaluated_models))

                # writer.flush()
                f.write(line + "\n")
                f.flush()

                #mark as evaluated
                evaluated_models.add(ckpt)

                #reset timeout
                time_out_counter = 0

            #if all ckpts have been evaluated on val set end
            if len(evaluated_models) == EPOCHS:
                break

        #if all ckpts have been evaluated on val set end
        if len(evaluated_models) == EPOCHS:
            print("Evaluated all checkpoints")
            break

        #no new model found
        if current_model is None:

            #when timeout has been reached, abort
            if time_out_counter == TIMEOUT:
                print("timeout")
                break

            print("Waiting for new checkpoint....")
            time.sleep(60)
            time_out_counter += 1

    f.close()

    #evaluate best ckpts on test set

    #list of ckpts for test set evaluation
    ckpts = [best_val_loss_ckpt, best_mAP_ckpt]

    print("Lowest loss: {} at checkpoint {}".format(best_val_loss,
                                                    best_val_loss_ckpt))
    print("Highest mAP: {} at checkpoint {}".format(best_mAP, best_mAP_ckpt))

    #evaluate on test set
    if TESTING:

        ckpts = set(ckpts)

        #get test images and gt
        with open(img_file_test) as imgs:
            img_names_test = imgs.read().splitlines()
        imgs.close()

        #if a number for steps was given
        if steps is not None:
            nbatches_test = steps

        #again create Variables to visualize losses for tensorboard, but this time for test set
        test_loss_var = tf.Variable(initial_value=0,
                                    trainable=False,
                                    name='test_loss',
                                    dtype=tf.float32)

        test_loss_without_regularization_var = tf.Variable(
            initial_value=0,
            trainable=False,
            name='test_loss_without_regularization',
            dtype=tf.float32)

        test_conf_loss_var = tf.Variable(initial_value=0,
                                         trainable=False,
                                         name='test_conf_loss',
                                         dtype=tf.float32)

        test_class_loss_var = tf.Variable(initial_value=0,
                                          trainable=False,
                                          name='test_class_loss',
                                          dtype=tf.float32)

        test_bbox_loss_var = tf.Variable(initial_value=0,
                                         trainable=False,
                                         name='test_bbox_loss',
                                         dtype=tf.float32)

        #we have to create the assign ops here and call the assign ops with a feed dictg, otherwise memory leak
        test_loss_placeholder = tf.placeholder(loss_var.dtype, shape=())
        test_loss_without_regularization_placeholder = tf.placeholder(
            loss_without_regularization_var.dtype, shape=())
        test_conf_loss_placeholder = tf.placeholder(conf_loss_var.dtype,
                                                    shape=())
        test_class_loss_placeholder = tf.placeholder(class_loss_var.dtype,
                                                     shape=())
        test_bbox_loss_placeholder = tf.placeholder(bbox_loss_var.dtype,
                                                    shape=())

        test_loss_assign_ops = [
            test_loss_var.assign(test_loss_placeholder),
            test_loss_without_regularization_var.assign(
                test_loss_without_regularization_placeholder),
            test_conf_loss_var.assign(test_conf_loss_placeholder),
            test_class_loss_var.assign(test_class_loss_placeholder),
            test_bbox_loss_var.assign(test_bbox_loss_placeholder)
        ]

        tf.summary.scalar("test/loss", loss_var, collections=["test"])
        tf.summary.scalar("test/loss_without_regularization",
                          loss_without_regularization_var,
                          collections=["test"])
        tf.summary.scalar("test/conf_loss",
                          conf_loss_var,
                          collections=["test"])
        tf.summary.scalar("test/class_loss",
                          class_loss_var,
                          collections=["test"])
        tf.summary.scalar("test/bbox_loss",
                          bbox_loss_var,
                          collections=["test"])

        #variables for precision recall and mean average precision
        precisions = []
        recalls = []
        APs = []
        f1s = []

        precision_placeholders = []
        recall_placeholders = []
        AP_placeholders = []
        f1_placeholders = []
        prmap_assign_ops = []

        for i, name in enumerate(cfg.CLASS_NAMES):

            precisions.append(
                tf.Variable(initial_value=0,
                            trainable=False,
                            name="test/precision/" + name,
                            dtype=tf.float32))

            recalls.append(
                tf.Variable(initial_value=0,
                            trainable=False,
                            name="test/recall/" + name,
                            dtype=tf.float32))

            f1s.append(
                tf.Variable(initial_value=0,
                            trainable=False,
                            name="test/f1/" + name,
                            dtype=tf.float32))

            APs.append(
                tf.Variable(initial_value=0,
                            trainable=False,
                            name="test/AP/" + name,
                            dtype=tf.float32))

            precision_placeholders.append(
                tf.placeholder(dtype=precisions[i].dtype,
                               shape=precisions[i].shape))

            recall_placeholders.append(
                tf.placeholder(dtype=recalls[i].dtype, shape=recalls[i].shape))
            AP_placeholders.append(
                tf.placeholder(dtype=APs[i].dtype, shape=APs[i].shape))

            f1_placeholders.append(
                tf.placeholder(dtype=f1s[i].dtype, shape=f1s[i].shape))

            prmap_assign_ops.append(precisions[i].assign(
                precision_placeholders[i]))
            prmap_assign_ops.append(recalls[i].assign(recall_placeholders[i]))
            prmap_assign_ops.append(APs[i].assign(AP_placeholders[i]))
            prmap_assign_ops.append(f1s[i].assign(f1_placeholders[i]))

        test_mAP = tf.Variable(initial_value=0,
                               trainable=False,
                               name="mAP",
                               dtype=tf.float32)

        mAP_placeholder = tf.placeholder(test_mAP.dtype, shape=())

        prmap_assign_ops.append(test_mAP.assign(mAP_placeholder))

        tf.summary.scalar("test/mAP", mAP, collections=["test"])
        tf.summary.scalar("test/precision/" + name,
                          precisions[i],
                          collections=["test"])
        tf.summary.scalar("test/recall/" + name,
                          recalls[i],
                          collections=["test"])
        tf.summary.scalar("test/AP/" + name, APs[i], collections=["test"])
        tf.summary.scalar("test/f1/" + name, f1s[i], collections=["test"])

        merged = tf.summary.merge_all(key="test")

        #check for tensorboard dir and delete old stuff
        if tf.gfile.Exists(tensorboard_dir_test):
            tf.gfile.DeleteRecursively(tensorboard_dir_test)
        tf.gfile.MakeDirs(tensorboard_dir_test)

        writer = tf.summary.FileWriter(tensorboard_dir_test)

        i = 1

        #go through given checkpoints
        for ckpt in ckpts:

            print("Evaluating model {} on test data".format(ckpt))

            #load this ckpt
            current_model = ckpt
            squeeze.model.load_weights(checkpoint_dir + "/" + ckpt)

            # create 2 validation generators, one for metrics and one for object detection evaluation
            # we have to reset them each time to have the same data
            val_generator_1 = generator_from_data_path(img_names_test,
                                                       gt_test_dir,
                                                       base_test,
                                                       config=cfg)
            val_generator_2 = generator_from_data_path(img_names_test,
                                                       gt_test_dir,
                                                       base_test,
                                                       config=cfg)
            # create a generator for the visualization of bounding boxes

            print("  Evaluate losses...")
            #compute losses of whole val set
            losses = model.evaluate_generator(val_generator_1,
                                              steps=nbatches_test,
                                              max_queue_size=10,
                                              use_multiprocessing=False)

            #manually add losses to tensorboard
            sess.run(
                loss_assign_ops, {
                    loss_placeholder: losses[0],
                    loss_without_regularization_placeholder: losses[4],
                    conf_loss_placeholder: losses[3],
                    class_loss_placeholder: losses[2],
                    bbox_loss_placeholder: losses[1]
                })

            print("  Losses:")
            print(
                "  Loss with regularization: {}   val loss:{} \n     bbox_loss:{} \n     class_loss:{} \n     conf_loss:{}"
                .format(losses[0], losses[4], losses[1], losses[2], losses[3]))

            #compute precision recall and mean average precision
            precision, recall, f1, AP, boxes, classes = evaluate(
                model=model,
                generator=val_generator_2,
                steps=nbatches_test,
                config=cfg)

            #create feed dict for visualization
            prmap_feed_dict = {}
            for i, name in enumerate(cfg.CLASS_NAMES):
                prmap_feed_dict[precision_placeholders[i]] = precision[i]
                prmap_feed_dict[recall_placeholders[i]] = recall[i]
                prmap_feed_dict[AP_placeholders[i]] = AP[i, 1]
                prmap_feed_dict[f1_placeholders[i]] = f1[i]

            prmap_feed_dict[mAP_placeholder] = np.mean(AP[:, 1], axis=0)
            sess.run(prmap_assign_ops, prmap_feed_dict)

            #write everything to tensorboard
            writer.add_summary(merged.eval(session=sess), i)
            writer.flush()
            i += 1
Ejemplo n.º 19
0
headModel = Dense(1024, activation='relu')(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(512, activation='relu')(headModel)
headModel = Dropout(0.2)(headModel)
headModel = Dense(256, activation='relu')(headModel)
headModel = Dense(50, activation='softmax')(headModel)'''
 
model = Model(inputs=baseModel.input, outputs=predictions)
model.summary()

keras_callbacks   = [
      EarlyStopping(monitor='val_loss', verbose=1,patience=3, mode='min')
]

from keras import optimizers 
model.compile(loss ='categorical_crossentropy',optimizer = optimizers.Adam(lr=0.0001),
              metrics=['accuracy'])

history = model.fit(train_generator,steps_per_epoch = train_generator.n//train_generator.batch_size,
                              validation_data= valid_generator,validation_steps= valid_generator.n//valid_generator.batch_size
                              ,epochs = 50,callbacks=keras_callbacks)

score = model.evaluate(valid_generator, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

predictions = model.predict(valid_generator)

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
Ejemplo n.º 20
0
cvscores = []
Y = to_categorical(Y, num_classes=3)
for train, test in k_fold:

    # create model
    model = Sequential()
    model.add(Dense(100, input_dim=2048, activation='relu'))
    model.add(layers.BatchNormalization())
    model.add(Dense(50, activation='relu'))
    model.add(layers.Dropout(0.4))
    model.add(Dense(3, activation='softmax'))

    # Compile model
    adam = optimizers.Adam(lr=0.0001,
                           beta_1=0.9,
                           beta_2=0.999,
                           epsilon=2e-11,
                           decay=0.0,
                           amsgrad=False)
    model.compile(loss='categorical_crossentropy',
                  optimizer=adam,
                  metrics=['accuracy'])
    # Fit the model
    model.fit(X[train],
              Y[train],
              epochs=500,
              batch_size=75,
              validation_split=0.1,
              verbose=2)
    # evaluate the model
    scores = model.evaluate(X[test], Y[test], verbose=2)
    #scores = model.cross_val_score(f,X[test],Y[test])
def EB_NN(data_path, result_path, n_epoch, input_dim):
    # load data
    X, Y = load_data(data_path)

    # num_data = len(X)
    # train_test_split = int(0.8 * num_data)
    #
    # day_train = np.array(X[0:train_test_split])
    # Y_train = np.array(Y[0:train_test_split])
    #
    # day_test = np.array(X[train_test_split:])
    # Y_test = np.array(Y[train_test_split:])

    day_train = np.array(X[0])
    Y_train = np.array(Y[0])

    day_test = np.array(X[1])
    Y_test = np.array(Y[1])
    """
        Some items don't have enough data
    """
    print("%s Train data %d. Test data %d" %
          (product, len(day_train), len(day_test)))
    logging.info("%s Train data %d. Test data %d" %
                 (product, len(day_train), len(day_test)))
    # if len(day_train) < 10 or len(day_test) < 10:
    #     print("%s data is not enough." % product)
    #     logging.info("%s data is not enough." % product)
    #     return

    print("day:", day_train.shape, "Y:", Y_train.shape)

    # build
    model_name = result_path
    if os.path.isfile(model_name):
        print("Loading previous model ......")
        model = load_model(model_name)

    else:
        print("Creating new model ......")
        model = Sequential()
        model.add(Dense(64, activation="relu", input_dim=input_dim))
        model.add(Dense(64, activation="relu"))
        # model.add(Flatten())
        model.add(Dropout(0.9))
        model.add(Dense(2, activation="sigmoid"))

        adam = optimizers.Adam(lr=0.01)
        model.compile(loss='binary_crossentropy',
                      optimizer=adam,
                      metrics=['accuracy'])

    # model Compile
    # model_name = result_path + 'model2_price_move_predict.hdf5'
    checkpointer = ModelCheckpoint(filepath=model_name,
                                   monitor='val_loss',
                                   verbose=1,
                                   save_best_only=True)
    earlystopper = EarlyStopping(monitor='val_loss', patience=20, verbose=1)

    # outmodel = open(result_path + 'model2_price_move_predict.json', 'w')
    # outmodel.write(model.to_json())
    # outmodel.close()

    # train
    history = model.fit(
        day_train,
        Y_train,
        epochs=n_epoch,
        batch_size=1,
        # callbacks=[checkpointer],
        validation_split=0)

    print(history.history)

    # only save the final epoch
    model.save(model_name)

    if os.path.isfile(model_name):
        model = load_model(model_name)

    scores = model.evaluate(day_test, Y_test, verbose=1)
    print('Test loss:', scores[0])
    print('Test accuracy:', scores[1])

    probabilities = model.predict(day_test)
    predictions = [np.rint(x) for x in probabilities]

    num = len(probabilities)
    correct = np.sum(predictions == Y_test)
    print(num, correct / 2)
    accuracy = np.mean(predictions == Y_test)
    print("Prediction Accuracy: %.2f%%" % (accuracy * 100))

    # f = open("../data/all/1000/model/EB_NN_result.txt", 'a')
    f = open("../data/all/1000/model/ONE_EB_NN_result.txt", 'a')
    content = '\t'.join([
        str(product),
        str(scores[0]),
        str(scores[1]),
        str(num),
        str(correct / 2)
    ])
    print(content)
    f.write(content)
    f.write('\n')
    f.close()
def get_model():

    model = Sequential()
    if 'model' in locals():
        model.reset_states()

    def identity_block(inputs, kernel_size, filters):

        filters1, filters2, filters3 = filters
        x = Conv1D(filters1,
                   1,
                   use_bias=False,
                   kernel_initializer='he_normal',
                   kernel_regularizer=l2(weight_decay))(inputs)
        x = BatchNormalization(momentum=batch_decay, epsilon=eps)(x)
        x = Activation('relu')(x)
        x = Conv1D(filters2,
                   kernel_size,
                   use_bias=False,
                   kernel_initializer='he_normal',
                   kernel_regularizer=l2(weight_decay),
                   padding='same')(x)
        x = BatchNormalization(momentum=batch_decay, epsilon=eps)(x)
        x = Activation('relu')(x)
        x = Conv1D(filters3,
                   1,
                   use_bias=False,
                   kernel_initializer='he_normal',
                   kernel_regularizer=l2(weight_decay))(x)
        x = BatchNormalization(momentum=batch_decay, epsilon=eps)(x)
        x = add([x, inputs])
        x = Activation('relu')(x)
        return x

    def conv_block(inputs, kernel_size, filters, strides=2):

        filters1, filters2, filters3 = filters
        x = Conv1D(filters1,
                   1,
                   use_bias=False,
                   kernel_initializer='he_normal',
                   kernel_regularizer=l2(weight_decay))(inputs)
        x = BatchNormalization(momentum=batch_decay, epsilon=eps)(x)
        x = Activation('relu')(x)
        x = Conv1D(filters2,
                   kernel_size,
                   strides=strides,
                   use_bias=False,
                   kernel_initializer='he_normal',
                   kernel_regularizer=l2(weight_decay),
                   padding='same')(x)
        x = BatchNormalization(momentum=batch_decay, epsilon=eps)(x)
        x = Activation('relu')(x)
        x = Conv1D(filters3,
                   1,
                   use_bias=False,
                   kernel_initializer='he_normal',
                   kernel_regularizer=l2(weight_decay))(x)
        x = BatchNormalization(momentum=batch_decay, epsilon=eps)(x)
        shortcut = Conv1D(filters3,
                          1,
                          strides=strides,
                          use_bias=False,
                          kernel_initializer='he_normal',
                          kernel_regularizer=l2(weight_decay))(inputs)
        shortcut = BatchNormalization(momentum=batch_decay,
                                      epsilon=eps)(shortcut)
        x = add([x, shortcut])
        x = Activation('relu')(x)
        return x

    inputs = Input(shape=(max_length, 2))

    x = Conv1D(filter1,
               conv_kernel,
               strides=2,
               padding='valid',
               use_bias=False,
               kernel_initializer='he_normal',
               kernel_regularizer=l2(weight_decay))(inputs)
    x = BatchNormalization(momentum=batch_decay, epsilon=eps)(x)
    x = Activation('relu')(x)
    x = MaxPooling1D(3, strides=2)(x)

    x = conv_block(x, block_kernel, [filter1, filter1, filter1 * 4])
    x = identity_block(x, block_kernel, [filter1, filter1, filter1 * 4])
    x = conv_block(x, block_kernel, [filter2, filter2, filter2 * 4])
    # x = identity_block(x,3, [filter2, filter2, filter2*4])

    x = SpatialDropout1D(rate=dropout_rate)(x)
    x = Conv1D(filter2,
               11,
               strides=2,
               padding='valid',
               use_bias=False,
               kernel_initializer='he_normal',
               kernel_regularizer=l2(weight_decay))(x)
    x = Activation('relu')(x)

    x = GlobalAveragePooling1D()(x)
    '''
    # dense to 100 >> final layer >> dense to num_classes
    x = Dense(100, kernel_regularizer = l2(weight_decay),
              bias_regularizer = l2(weight_decay), name ='features_hundred')(x)
    final_layer = Model(inputs= inputs, outputs = x)
    x = Dense(num_classes, kernel_regularizer=l2(weight_decay),
              bias_regularizer=l2(weight_decay), name= 'features')(x)
    x = Activation('softmax')(x)
    '''
    x = Dense(num_classes,
              kernel_regularizer=l2(weight_decay),
              bias_regularizer=l2(weight_decay),
              name='features')(x)
    final_layer = Model(inputs=inputs, outputs=x)
    x = Activation('softmax')(x)

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

    # optimizer
    sgd = optimizers.SGD(lr=learning_rate, momentum=momentum)
    adagrad = optimizers.Adagrad()
    adam = optimizers.Adam(lr=learning_rate)

    # compiler
    model.compile(loss='categorical_crossentropy',
                  optimizer=sgd,
                  metrics=['accuracy'])

    return model, final_layer
Ejemplo n.º 23
0
    def get_model(self):
        lrelu = custom_function.lrelu()
        inputs = Input(shape=(self.time_step, 20, 27, 2), name='grid_input')
        layer1 = ConvLSTM2D(filters=16,
                            kernel_size=3,
                            strides=1,
                            padding='same',
                            return_sequences=True,
                            activation=lrelu,
                            dropout=0.2,
                            name='convlstm2d_1')(inputs)
        # layer1 = BatchNormalization()(layer1)

        if self.is_seasonal_circle:
            sc_input = Input(shape=(1, ), dtype='int32')
            sc_layer = Embedding(12, 3 * 20 * 27 * 16,
                                 input_length=1)(sc_input)
            sc_layer = Reshape((3, 20, 27, 16))(sc_layer)
            layer1 = concatenate([layer1, sc_layer], axis=4)

        layer2 = ConvLSTM2D(filters=32,
                            kernel_size=3,
                            strides=1,
                            padding='same',
                            return_sequences=True,
                            activation=lrelu,
                            dropout=0.2,
                            name='convlstm2d_2')(layer1)
        # print(layer1.get_shape().as_list())
        # layer2 = BatchNormalization()(layer2)
        layer3 = ConvLSTM2D(filters=32,
                            kernel_size=3,
                            strides=1,
                            padding='same',
                            return_sequences=True,
                            activation=lrelu,
                            dropout=0.2,
                            name='convlstm2d_3')(layer2)
        # layer3 = BatchNormalization()(layer3)
        predictions = ConvLSTM2D(filters=2,
                                 padding='same',
                                 kernel_size=3,
                                 strides=1,
                                 activation='linear',
                                 name='convlstm2d_grid_output')(layer3)
        if self.is_nino_output:
            nino_layer = NinoLayer.get_nino_layer(name='nino_output')
            predictions_ninos = nino_layer(predictions)

        # sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
        adam = optimizers.Adam(learning_rate=0.00005,
                               beta_1=0.9,
                               beta_2=0.999,
                               amsgrad=False)

        if not self.is_seasonal_circle and not self.is_nino_output:
            model = Model(inputs=inputs, outputs=predictions)
            model.compile(optimizer=adam,
                          loss=custom_function.mean_squared_error,
                          metrics=[custom_function.root_mean_squared_error])
        elif self.is_seasonal_circle and not self.is_nino_output:
            model = Model(inputs=[inputs, sc_input], outputs=predictions)
            model.compile(optimizer=adam,
                          loss=custom_function.mean_squared_error,
                          metrics=[custom_function.root_mean_squared_error])
        elif not self.is_seasonal_circle and self.is_nino_output:
            model = Model(inputs=inputs,
                          outputs=[predictions, predictions_ninos])
            model.compile(optimizer=adam,
                          loss=custom_function.mean_squared_error,
                          loss_weights=[0.25, 0.75],
                          metrics=[custom_function.root_mean_squared_error])
        else:
            model = Model(inputs=[inputs, sc_input],
                          outputs=[predictions, predictions_ninos])
            model.compile(optimizer=adam,
                          loss=custom_function.mean_squared_error,
                          loss_weights=[0.25, 0.75],
                          metrics=[custom_function.root_mean_squared_error])
        # model.summary()
        return model
Ejemplo n.º 24
0
def iterate_hyperparas(use_default=False):
    ## initializer, regularization, activation function, learning rate, batch size
    ## some parameters may change during training? (learning rate). ignore this need for now
    options = {}
    # defaults = {}
    # defaults['activation_regularizer'] = None
    # defaults['kernel_regularizer'] = 0.001
    # defaults['activation_regularizer'] = 0.1
    ## initializer
    options['initializer'] = []
    options['initializer'].append(initializers.glorot_normal(seed=None))
    options['initializer'].append(initializers.glorot_uniform(seed=None))
    options['initializer'].append(
        initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None))
    options['initializer'].append(
        initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None))
    options['initializer'].append(
        initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None))
    ## kernel_regularizer
    options['kernel_regularizer'] = []
    options['kernel_regularizer'].append(None)
    options['kernel_regularizer'].append(regularizers.l1(0.0001))
    options['kernel_regularizer'].append(regularizers.l1(0.001))
    options['kernel_regularizer'].append(regularizers.l1(0.01))
    options['kernel_regularizer'].append(regularizers.l1(0.1))
    options['kernel_regularizer'].append(regularizers.l2(0.0001))
    options['kernel_regularizer'].append(regularizers.l2(0.001))
    options['kernel_regularizer'].append(regularizers.l2(0.01))
    options['kernel_regularizer'].append(regularizers.l2(0.1))
    options['kernel_regularizer'].append(regularizers.l1_l2(0.0001))
    options['kernel_regularizer'].append(regularizers.l1_l2(0.001))
    options['kernel_regularizer'].append(regularizers.l1_l2(0.01))
    options['kernel_regularizer'].append(regularizers.l1_l2(0.1))
    ## activity_regularizer
    options['activity_regularizer'] = []
    options['activity_regularizer'].append(None)
    options['activity_regularizer'].append(regularizers.l1(0.0001))
    options['activity_regularizer'].append(regularizers.l1(0.001))
    options['activity_regularizer'].append(regularizers.l1(0.01))
    options['activity_regularizer'].append(regularizers.l1(0.1))
    options['activity_regularizer'].append(regularizers.l2(0.0001))
    options['activity_regularizer'].append(regularizers.l2(0.001))
    options['activity_regularizer'].append(regularizers.l2(0.01))
    options['activity_regularizer'].append(regularizers.l2(0.1))
    options['activity_regularizer'].append(regularizers.l1_l2(0.0001))
    options['activity_regularizer'].append(regularizers.l1_l2(0.001))
    options['activity_regularizer'].append(regularizers.l1_l2(0.01))
    options['activity_regularizer'].append(regularizers.l1_l2(0.1))
    ## bias_regularizer
    options['bias_regularizer'] = []
    options['bias_regularizer'].append(None)
    options['bias_regularizer'].append(regularizers.l1(0.0001))
    options['bias_regularizer'].append(regularizers.l1(0.001))
    options['bias_regularizer'].append(regularizers.l1(0.01))
    options['bias_regularizer'].append(regularizers.l1(0.1))
    options['bias_regularizer'].append(regularizers.l2(0.0001))
    options['bias_regularizer'].append(regularizers.l2(0.001))
    options['bias_regularizer'].append(regularizers.l2(0.01))
    options['bias_regularizer'].append(regularizers.l2(0.1))
    options['bias_regularizer'].append(regularizers.l1_l2(0.0001))
    options['bias_regularizer'].append(regularizers.l1_l2(0.001))
    options['bias_regularizer'].append(regularizers.l1_l2(0.01))
    options['bias_regularizer'].append(regularizers.l1_l2(0.1))
    ## activation
    options['activation'] = []
    options['activation'].append('relu')
    options['activation'].append('elu')
    options['activation'].append('selu')
    options['activation'].append('tanh')
    options['activation'].append('sigmoid')
    ## optimizer and learning rate
    options['optimizer'] = []
    options['optimizer'].append(
        optimizers.SGD(lr=0.001, momentum=0.0, decay=0.0, nesterov=False))
    options['optimizer'].append(
        optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False))
    options['optimizer'].append(
        optimizers.SGD(lr=0.1, momentum=0.0, decay=0.0, nesterov=False))
    options['optimizer'].append(
        optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0))
    options['optimizer'].append(
        optimizers.RMSprop(lr=0.01, rho=0.9, epsilon=None, decay=0.0))
    options['optimizer'].append(
        optimizers.RMSprop(lr=0.1, rho=0.9, epsilon=None, decay=0.0))
    options['optimizer'].append(
        optimizers.Adagrad(lr=0.001, epsilon=None, decay=0.0))
    options['optimizer'].append(
        optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0))
    options['optimizer'].append(
        optimizers.Adagrad(lr=0.1, epsilon=None, decay=0.0))
    options['optimizer'].append(
        optimizers.Adam(lr=0.001,
                        beta_1=0.9,
                        beta_2=0.999,
                        epsilon=None,
                        decay=0.0,
                        amsgrad=False))
    options['optimizer'].append(
        optimizers.Adam(lr=0.01,
                        beta_1=0.9,
                        beta_2=0.999,
                        epsilon=None,
                        decay=0.0,
                        amsgrad=False))
    options['optimizer'].append(
        optimizers.Adam(lr=0.1,
                        beta_1=0.9,
                        beta_2=0.999,
                        epsilon=None,
                        decay=0.0,
                        amsgrad=False))
    options['optimizer'].append(
        optimizers.Nadam(lr=0.002,
                         beta_1=0.9,
                         beta_2=0.999,
                         epsilon=None,
                         schedule_decay=0.004))
    options['optimizer'].append(
        optimizers.Nadam(lr=0.02,
                         beta_1=0.9,
                         beta_2=0.999,
                         epsilon=None,
                         schedule_decay=0.004))
    options['optimizer'].append(
        optimizers.Nadam(lr=0.2,
                         beta_1=0.9,
                         beta_2=0.999,
                         epsilon=None,
                         schedule_decay=0.004))
    ## batch size
    options['batch_size'] = 32
    options['batch_size'] = 128
    options['batch_size'] = 1024
    options['batch_size'] = 8192

    return options
from keras.models import Sequential
from keras.layers import Dense
from keras.models import model_from_json
from keras import optimizers
import numpy as np


json_file = open('model.json','r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
loaded_model.load_weights("model.h5")
adam = optimizers.Adam(lr=0.001, decay =1e-6)
loaded_model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
testY = np.load('groundTruth.npy')
testX = np.load('testData.npy')
score = loaded_model.evaluate(testX,testY,verbose=2)

print('Baseline Error: %.2f%%' %(100-score[1]*100))

output = loaded_model.predict(testX[0:1,:,:,:])

print("Predect Output" , output)

X_test = data_test.drop(['Class'], axis=1).values
Y_test = data_test['Class']

input_size = 29
hidden_sizes = [80, 40, 80]

input_layer = Input(shape=(input_size,))
encoder = Dense(hidden_sizes[0], activation="relu")(input_layer)
encoder = Dense(hidden_sizes[1], activation="relu")(encoder)
decoder = Dense(hidden_sizes[2], activation='relu')(encoder)
decoder = Dense(input_size)(decoder)
deep_ae = Model(inputs=input_layer, outputs=decoder)
print(deep_ae.summary())

optimizer = optimizers.Adam(lr=0.00005)
deep_ae.compile(optimizer=optimizer, loss='mean_squared_error')

tensorboard = TensorBoard(log_dir='./logs/run2/', write_graph=True, write_images=False)

model_file = "model_deep_ae.h5"
checkpoint = ModelCheckpoint(model_file, monitor='loss', verbose=1, save_best_only=True, mode='min')

num_epoch = 50
batch_size = 64
deep_ae.fit(X_train, X_train, epochs=num_epoch, batch_size=batch_size, shuffle=True, validation_data=(X_test, X_test),
            verbose=1, callbacks=[checkpoint, tensorboard])

recon = deep_ae.predict(X_test)

recon_error = np.mean(np.power(X_test - recon, 2), axis=1)
Ejemplo n.º 27
0
finetuning_flag = 1
tensorboard_flag = 0
cam_visualizer_flag = 1
#########################################

############## Reading Images and Labels ################
# SubperdB = Read_SMIC_Images(inputDir, listOfIgnoredSamples, dB, resizedFlag, table, workplace, spatial_size)
SubperdB = Read_Input_Images(inputDir, listOfIgnoredSamples, dB, resizedFlag,
                             table, workplace, spatial_size)

labelperSub = label_matching(workplace, dB, subjects, VidPerSubject)
######################################################################################

########### Model #######################
sgd = optimizers.SGD(lr=0.0001, decay=1e-7, momentum=0.9, nesterov=True)
adam = optimizers.Adam(lr=0.00001)

if train_spatial_flag == 0 and train_temporal_flag == 1:
    data_dim = spatial_size * spatial_size
else:
    data_dim = 4096
temporal_model = Sequential()
temporal_model.add(
    LSTM(2622, return_sequences=True, input_shape=(10, data_dim)))
temporal_model.add(LSTM(1000, return_sequences=False))
temporal_model.add(Dense(128, activation='relu'))
temporal_model.add(Dense(5, activation='sigmoid'))
temporal_model.compile(loss='categorical_crossentropy',
                       optimizer=adam,
                       metrics=[metrics.categorical_accuracy])
#########################################
Ejemplo n.º 28
0
def compiled_tcn(num_feat,  # type: int
                 num_classes,  # type: int
                 nb_filters,  # type: int
                 kernel_size,  # type: int
                 dilations,  # type: List[int]
                 nb_stacks,  # type: int
                 max_len,  # type: int
                 activation='norm_relu',  # type: str
                 use_skip_connections=True,  # type: bool
                 return_sequences=True,
                 regression=False,  # type: bool
                 dropout_rate=0.05,  # type: float
                 name='tcn'  # type: str
                 ):
    # type: (...) -> keras.Model
    """Creates a compiled TCN model for a given task (i.e. regression or classification).

    Args:
        num_feat: A tensor of shape (batch_size, timesteps, input_dim).
        num_classes: The size of the final dense layer, how many classes we are predicting.
        nb_filters: The number of filters to use in the convolutional layers.
        kernel_size: The size of the kernel to use in each convolutional layer.
        dilations: The list of the dilations. Example is: [1, 2, 4, 8, 16, 32, 64].
        nb_stacks : The number of stacks of residual blocks to use.
        max_len: The maximum sequence length, use None if the sequence length is dynamic.
        activation: The activations to use.
        use_skip_connections: Boolean. If we want to add skip connections from input to each residual block.
        return_sequences: Boolean. Whether to return the last output in the output sequence, or the full sequence.
        regression: Whether the output should be continuous or discrete.
        dropout_rate: Float between 0 and 1. Fraction of the input units to drop.
        name: Name of the model. Useful when having multiple TCN.

    Returns:
        A compiled keras TCN.
    """

    dilations = process_dilations(dilations)

    input_layer = Input(shape=(max_len, num_feat))

    x = TCN(nb_filters, kernel_size, nb_stacks, dilations, activation,
            use_skip_connections, dropout_rate, return_sequences, name)(input_layer)

    print('x.shape=', x.shape)

    if not regression:
        # classification
        x = Dense(num_classes)(x)
        x = Activation('softmax')(x)
        output_layer = x
        print(f'model.x = {input_layer.shape}')
        print(f'model.y = {output_layer.shape}')
        model = Model(input_layer, output_layer)

        # https://github.com/keras-team/keras/pull/11373
        # It's now in Keras@master but still not available with pip.
        # TODO To remove later.
        def accuracy(y_true, y_pred):
            # reshape in case it's in shape (num_samples, 1) instead of (num_samples,)
            if K.ndim(y_true) == K.ndim(y_pred):
                y_true = K.squeeze(y_true, -1)
            # convert dense predictions to labels
            y_pred_labels = K.argmax(y_pred, axis=-1)
            y_pred_labels = K.cast(y_pred_labels, K.floatx())
            return K.cast(K.equal(y_true, y_pred_labels), K.floatx())

        adam = optimizers.Adam(lr=0.002, clipnorm=1.)
        model.compile(adam, loss='sparse_categorical_crossentropy', metrics=[accuracy])
        print('Adam with norm clipping.')
    else:
        # regression
        x = Dense(1)(x)
        x = Activation('linear')(x)
        output_layer = x
        print(f'model.x = {input_layer.shape}')
        print(f'model.y = {output_layer.shape}')
        model = Model(input_layer, output_layer)
        adam = optimizers.Adam(lr=0.002, clipnorm=1.)
        model.compile(adam, loss='mean_squared_error')

    return model
Ejemplo n.º 29
0
if __name__ == '__main__':
    # model selection
    AF_model = AFNN(filters=4, image_channels=1, use_bnorm=True)
    AF_model.summary()

    # load the last model in matconvnet style
    initial_epoch = find_LastCheckpoint(model_dir=save_dir)
    if initial_epoch > 0:
        print('resuming by loading epoch %03d' % initial_epoch)
        AF_model = load_model(os.path.join(save_dir,
                                           'model_%03d.hdf5' % initial_epoch),
                              compile=False)

    sgd = optimizers.SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True)
    ad = optimizers.Adam(lr=0.01)
    # compile the model
    AF_model.compile(optimizer=ad,
                     metrics=['accuracy'],
                     loss=losses.categorical_crossentropy)

    # use call back functions
    check_pointer = ModelCheckpoint(os.path.join(save_dir,
                                                 'model_{epoch:03d}.hdf5'),
                                    verbose=1,
                                    save_weights_only=False,
                                    period=args.save_step)
    csv_logger = CSVLogger(os.path.join(save_dir, 'log.csv'),
                           append=True,
                           separator=',')
    lr_scheduler = LearningRateScheduler(lr_schedule)
Ejemplo n.º 30
0
    model.add(Activation("sigmoid"))

    model.add(Conv2D(16, 5, 5, border_mode='valid'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Activation("sigmoid"))
    model.add(Dropout(0.5))

    model.add(Conv2D(120, 1, 1, border_mode='valid'))

    model.add(Flatten())
    model.add(Dense(120))
    model.add(Dense(84))
    model.add(Dense(1))

print("starting training")
my_adam = optimizers.Adam(lr=LEARNING_RATE)
model.compile(loss='mse', optimizer=my_adam)

from keras.callbacks import EarlyStopping

my_callbacks = [
    EarlyStopping(monitor='val_loss',
                  min_delta=0.001,
                  patience=5,
                  verbose=0,
                  mode='auto')
]

history_object = model.fit_generator(
    train_generator,
    steps_per_epoch=len(train_samples) / BATCH_SIZE,