Python keras.callbacks.CSVLogger() Examples
The following are 30
code examples of keras.callbacks.CSVLogger().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
keras.callbacks
, or try the search function
.
Example #1
Source File: fashion_net.py From FashionAI_KeyPoint_Detection_Challenge_Keras with MIT License | 6 votes |
def train(self, category, batchSize=8, epochs=20, lrschedule=False): trainDt = DataGenerator(category, os.path.join("../../data/train/Annotations", "train_split.csv")) trainGen = trainDt.generator_with_mask_ohem( graph=tf.get_default_graph(), kerasModel=self.model, batchSize= batchSize, inputSize=(self.inputHeight, self.inputWidth), nStackNum=self.nStackNum, flipFlag=False, cropFlag=False) normalizedErrorCallBack = NormalizedErrorCallBack("../../trained_models/", category, True) csvlogger = CSVLogger( os.path.join(normalizedErrorCallBack.get_folder_path(), "csv_train_"+self.modelName+"_"+str(datetime.datetime.now().strftime('%H:%M'))+".csv")) xcallbacks = [normalizedErrorCallBack, csvlogger] self.model.fit_generator(generator=trainGen, steps_per_epoch=trainDt.get_dataset_size()//batchSize, epochs=epochs, callbacks=xcallbacks)
Example #2
Source File: main.py From DnCNN-keras with MIT License | 6 votes |
def train(): data = load_train_data() data = data.reshape((data.shape[0],data.shape[1],data.shape[2],1)) data = data.astype('float32')/255.0 # model selection if args.pretrain: model = load_model(args.pretrain, compile=False) else: if args.model == 'DnCNN': model = models.DnCNN() # compile the model model.compile(optimizer=Adam(), loss=['mse']) # use call back functions ckpt = ModelCheckpoint(save_dir+'/model_{epoch:02d}.h5', monitor='val_loss', verbose=0, period=args.save_every) csv_logger = CSVLogger(save_dir+'/log.csv', append=True, separator=',') lr = LearningRateScheduler(step_decay) # train history = model.fit_generator(train_datagen(data, batch_size=args.batch_size), steps_per_epoch=len(data)//args.batch_size, epochs=args.epoch, verbose=1, callbacks=[ckpt, csv_logger, lr]) return model
Example #3
Source File: bidaf.py From bidaf-keras with GNU General Public License v3.0 | 6 votes |
def train_model(self, train_generator, steps_per_epoch=None, epochs=1, validation_generator=None, validation_steps=None, workers=1, use_multiprocessing=False, shuffle=True, initial_epoch=0, save_history=False, save_model_per_epoch=False): saved_items_dir = os.path.join(os.path.dirname(__file__), os.pardir, 'saved_items') if not os.path.exists(saved_items_dir): os.makedirs(saved_items_dir) callbacks = [] if save_history: history_file = os.path.join(saved_items_dir, 'history') csv_logger = CSVLogger(history_file, append=True) callbacks.append(csv_logger) if save_model_per_epoch: save_model_file = os.path.join(saved_items_dir, 'bidaf_{epoch:02d}.h5') checkpointer = ModelCheckpoint(filepath=save_model_file, verbose=1) callbacks.append(checkpointer) history = self.model.fit_generator(train_generator, steps_per_epoch=steps_per_epoch, epochs=epochs, callbacks=callbacks, validation_data=validation_generator, validation_steps=validation_steps, workers=workers, use_multiprocessing=use_multiprocessing, shuffle=shuffle, initial_epoch=initial_epoch) if not save_model_per_epoch: self.model.save(os.path.join(saved_items_dir, 'bidaf.h5')) return history, self.model
Example #4
Source File: training.py From 3D-CNNs-for-Liver-Classification with Apache License 2.0 | 6 votes |
def get_callbacks(model_file, initial_learning_rate=0.0001, learning_rate_drop=0.5, learning_rate_epochs=None, learning_rate_patience=50, logging_file="training.log", verbosity=1, early_stopping_patience=None): callbacks = list() callbacks.append(ModelCheckpoint(model_file,monitor='val_acc', save_best_only=True,verbose=verbosity, save_weights_only=True)) # callbacks.append(ModelCheckpoint(model_file, save_best_only=True, save_weights_only=True)) callbacks.append(CSVLogger(logging_file, append=True)) if learning_rate_epochs: callbacks.append(LearningRateScheduler(partial(step_decay, initial_lrate=initial_learning_rate, drop=learning_rate_drop, epochs_drop=learning_rate_epochs))) else: callbacks.append(ReduceLROnPlateau(factor=learning_rate_drop, patience=learning_rate_patience, verbose=verbosity)) if early_stopping_patience: callbacks.append(EarlyStopping(verbose=verbosity, patience=early_stopping_patience)) return callbacks
Example #5
Source File: va-rnn.py From View-Adaptive-Neural-Networks-for-Skeleton-based-Human-Action-Recognition with MIT License | 5 votes |
def main(rootdir, case, results): train_x, train_y, valid_x, valid_y, test_x, test_y = get_data(args.dataset, case) input_shape = (train_x.shape[1], train_x.shape[2]) num_class = train_y.shape[1] if not os.path.exists(rootdir): os.makedirs(rootdir) filepath = os.path.join(rootdir, str(case) + '.hdf5') saveto = os.path.join(rootdir, str(case) + '.csv') optimizer = Adam(lr=args.lr, clipnorm=args.clip) pred_dir = os.path.join(rootdir, str(case) + '_pred.txt') if args.train: model = creat_model(input_shape, num_class) early_stop = EarlyStopping(monitor='val_acc', patience=15, mode='auto') reduce_lr = ReduceLROnPlateau(monitor='val_acc', factor=0.1, patience=5, mode='auto', cooldown=3., verbose=1) checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='auto') csv_logger = CSVLogger(saveto) if args.dataset=='NTU' or args.dataset == 'PKU': callbacks_list = [csv_logger, checkpoint, early_stop, reduce_lr] else: callbacks_list = [csv_logger, checkpoint] model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy']) model.fit(train_x, train_y, validation_data=[valid_x, valid_y], epochs=args.epochs, batch_size=args.batch_size, callbacks=callbacks_list, verbose=2) # test model = creat_model(input_shape, num_class) model.load_weights(filepath) model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy']) scores = get_activation(model, test_x, test_y, pred_dir, VA=10, par=9) results.append(round(scores, 2))
Example #6
Source File: gan.py From Keras-GAN-Animeface-Character with MIT License | 5 votes |
def train_gan( dataf ) : gen, disc, gan = build_networks() # Uncomment these, if you want to continue training from some snapshot. # (or load pretrained generator weights) #load_weights(gen, Args.genw) #load_weights(disc, Args.discw) logger = CSVLogger('loss.csv') # yeah, you can use callbacks independently logger.on_train_begin() # initialize csv file with h5py.File( dataf, 'r' ) as f : faces = f.get( 'faces' ) run_batches(gen, disc, gan, faces, logger, range(5000)) logger.on_train_end()
Example #7
Source File: fashion_net.py From FashionAI_KeyPoint_Detection_Challenge_Keras with MIT License | 5 votes |
def resume_train(self, category, pretrainModel, modelName, initEpoch, batchSize=8, epochs=20): self.modelName = modelName self.load_model(pretrainModel) refineNetflag = True self.nStackNum = 2 modelPath = os.path.dirname(pretrainModel) trainDt = DataGenerator(category, os.path.join("../../data/train/Annotations", "train_split.csv")) trainGen = trainDt.generator_with_mask_ohem(graph=tf.get_default_graph(), kerasModel=self.model, batchSize=batchSize, inputSize=(self.inputHeight, self.inputWidth), nStackNum=self.nStackNum, flipFlag=False, cropFlag=False) normalizedErrorCallBack = NormalizedErrorCallBack("../../trained_models/", category, refineNetflag, resumeFolder=modelPath) csvlogger = CSVLogger(os.path.join(normalizedErrorCallBack.get_folder_path(), "csv_train_" + self.modelName + "_" + str( datetime.datetime.now().strftime('%H:%M')) + ".csv")) self.model.fit_generator(initial_epoch=initEpoch, generator=trainGen, steps_per_epoch=trainDt.get_dataset_size() // batchSize, epochs=epochs, callbacks=[normalizedErrorCallBack, csvlogger])
Example #8
Source File: DEC.py From DEC-keras with MIT License | 5 votes |
def pretrain(self, x, y=None, optimizer='adam', epochs=200, batch_size=256, save_dir='results/temp'): print('...Pretraining...') self.autoencoder.compile(optimizer=optimizer, loss='mse') csv_logger = callbacks.CSVLogger(save_dir + '/pretrain_log.csv') cb = [csv_logger] if y is not None: class PrintACC(callbacks.Callback): def __init__(self, x, y): self.x = x self.y = y super(PrintACC, self).__init__() def on_epoch_end(self, epoch, logs=None): if int(epochs/10) != 0 and epoch % int(epochs/10) != 0: return feature_model = Model(self.model.input, self.model.get_layer( 'encoder_%d' % (int(len(self.model.layers) / 2) - 1)).output) features = feature_model.predict(self.x) km = KMeans(n_clusters=len(np.unique(self.y)), n_init=20, n_jobs=4) y_pred = km.fit_predict(features) # print() print(' '*8 + '|==> acc: %.4f, nmi: %.4f <==|' % (metrics.acc(self.y, y_pred), metrics.nmi(self.y, y_pred))) cb.append(PrintACC(x, y)) # begin pretraining t0 = time() self.autoencoder.fit(x, x, batch_size=batch_size, epochs=epochs, callbacks=cb) print('Pretraining time: %ds' % round(time() - t0)) self.autoencoder.save_weights(save_dir + '/ae_weights.h5') print('Pretrained weights are saved to %s/ae_weights.h5' % save_dir) self.pretrained = True
Example #9
Source File: training.py From 3DUnetCNN with MIT License | 5 votes |
def get_callbacks(model_file, initial_learning_rate=0.0001, learning_rate_drop=0.5, learning_rate_epochs=None, learning_rate_patience=50, logging_file="training.log", verbosity=1, early_stopping_patience=None): callbacks = list() callbacks.append(ModelCheckpoint(model_file, save_best_only=True)) callbacks.append(CSVLogger(logging_file, append=True)) if learning_rate_epochs: callbacks.append(LearningRateScheduler(partial(step_decay, initial_lrate=initial_learning_rate, drop=learning_rate_drop, epochs_drop=learning_rate_epochs))) else: callbacks.append(ReduceLROnPlateau(factor=learning_rate_drop, patience=learning_rate_patience, verbose=verbosity)) if early_stopping_patience: callbacks.append(EarlyStopping(verbose=verbosity, patience=early_stopping_patience)) return callbacks
Example #10
Source File: train.py From fetch with GNU General Public License v3.0 | 5 votes |
def train(model, epochs, patience, output_path, nproc, train_obj, val_obj): """ :param model: model to train (must be compiled) :type model: Model :param epochs: max number of epochs to train. :type epochs: int :param patience: Stop after these many layers if val. loss doesn't decrease :type patience: int :param output_path: paths to save weights and logs :type output_path: str :param nproc: number of processors for training :type nproc: int :param train_obj: DataGenerator training object for training :type train_obj: DataGenerator :param val_obj: DataGenerator training object for validation :type val_obj: DataGenerator :return: model, history object """ if nproc == 1: use_multiprocessing = False else: use_multiprocessing = True # Callbacks for training and validation ES = EarlyStopping(monitor='val_loss', min_delta=1e-3, patience=patience, verbose=1, mode='min', restore_best_weights=True) CK = ModelCheckpoint(output_path + 'weights.h5', monitor='val_loss', verbose=1, save_best_only=True, save_weights_only=False, mode='min') csv_name = output_path + 'training_log.csv' LO = CSVLogger(csv_name, append=False) callbacks = [ES, CK, LO] train_history = model.fit_generator(generator=train_obj, validation_data=val_obj, epochs=epochs, use_multiprocessing=use_multiprocessing, max_queue_size=10, workers=nproc, shuffle=True, callbacks=callbacks, verbose=1) return model, train_history
Example #11
Source File: train.py From speech-music-detection with MIT License | 5 votes |
def train(train_set, val_set, cfg, config_name, resume, model_path): if not(model_path is None): if resume: print("Loading compiled model: " + model_path) model = keras.models.load_model(model_path, compile=True) else: print("Loading uncompiled model: " + model_path) model = keras.models.load_model(model_path, compile=False) model = compile_model(model, cfg["model"]) else: print("Loading the network..") model = load_model(cfg["model"]) csv_logger = CSVLogger('checkpoint/' + config_name + '-training.log', append=resume) save_ckpt = ModelCheckpoint("checkpoint/weights.{epoch:02d}-{val_loss:.2f}" + config_name + ".hdf5", monitor='val_loss', verbose=1, save_best_only=True, period=1) early_stopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=5, verbose=0, mode='auto') lr_schedule = ReduceLROnPlateau( monitor='val_loss', factor=0.1, patience=3, verbose=1, mode='auto', min_lr=10e-7) callback_list = [save_ckpt, early_stopping, lr_schedule, csv_logger] print("Start the training..") model.fit_generator(train_set, epochs=cfg["nb_epoch"], callbacks=callback_list, validation_data=val_set, workers=cfg["workers"], use_multiprocessing=cfg["use_multiprocessing"], shuffle=True )
Example #12
Source File: mnist_mlp_candle.py From Benchmarks with MIT License | 5 votes |
def initialize_parameters(): mnist_common = mnist.MNIST(mnist.file_path, 'mnist_params.txt', 'keras', prog='mnist_mlp', desc='MNIST example' ) # Initialize parameters gParameters = candle.finalize_parameters(mnist_common) csv_logger = CSVLogger('{}/params.log'.format(gParameters)) return gParameters
Example #13
Source File: textcaps_emnist_bal.py From textcaps with MIT License | 5 votes |
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 """ (x_train, y_train), (x_test, y_test) = data log = callbacks.CSVLogger(args.save_dir + '/log.csv') checkpoint = callbacks.ModelCheckpoint(args.save_dir + '/weights-{epoch:02d}.h5', monitor='val_capsnet_acc', save_best_only=False, save_weights_only=True, verbose=1) lr_decay = callbacks.LearningRateScheduler(schedule=lambda epoch: args.lr * (args.lr_decay ** epoch)) model.compile(optimizer=optimizers.Adam(lr=args.lr), loss=[margin_loss, 'mse'], loss_weights=[1., args.lam_recon], metrics={'capsnet': 'accuracy'}) def train_generator(x, y, batch_size, shift_fraction=0.): train_datagen = ImageDataGenerator(width_shift_range=shift_fraction, height_shift_range=shift_fraction) 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]) 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, shuffle = True, validation_data=[[x_test, y_test], [y_test, x_test]], callbacks=snapshot.get_callbacks(log,model_prefix=model_prefix)) model.save_weights(args.save_dir + '/trained_model.h5') print('Trained model saved to \'%s/trained_model.h5\'' % args.save_dir) return model
Example #14
Source File: mnist_cnn_candle.py From Benchmarks with MIT License | 5 votes |
def initialize_parameters(): mnist_common = mnist.MNIST(mnist.file_path, 'mnist_params.txt', 'keras', prog='mnist_cnn', desc='MNIST CNN example' ) # Initialize parameters gParameters = candle.finalize_parameters(mnist_common) csv_logger = CSVLogger('{}/params.log'.format(gParameters)) return gParameters
Example #15
Source File: training.py From Keras-Brats-Improved-Unet3d with MIT License | 5 votes |
def get_callbacks(model_file, initial_learning_rate=0.0001, learning_rate_drop=0.5, learning_rate_epochs=None, learning_rate_patience=50, logging_file="training.log", verbosity=1, early_stopping_patience=None): callbacks = list() callbacks.append(ModelCheckpoint(model_file, save_best_only=True)) callbacks.append(CSVLogger(logging_file, append=True)) if learning_rate_epochs: callbacks.append(LearningRateScheduler(partial(step_decay, initial_lrate=initial_learning_rate, drop=learning_rate_drop, epochs_drop=learning_rate_epochs))) else: callbacks.append(ReduceLROnPlateau(factor=learning_rate_drop, patience=learning_rate_patience, verbose=verbosity)) if early_stopping_patience: callbacks.append(EarlyStopping(verbose=verbosity, patience=early_stopping_patience)) return callbacks
Example #16
Source File: train.py From SegCaps with Apache License 2.0 | 5 votes |
def get_callbacks(arguments): if arguments.net.find('caps') != -1: monitor_name = 'val_out_seg_dice_hard' else: monitor_name = 'val_dice_hard' csv_logger = CSVLogger(join(arguments.log_dir, arguments.output_name + '_log_' + arguments.time + '.csv'), separator=',') tb = TensorBoard(arguments.tf_log_dir, batch_size=arguments.batch_size, histogram_freq=0) model_checkpoint = ModelCheckpoint(join(arguments.check_dir, arguments.output_name + '_model_' + arguments.time + '.hdf5'), monitor=monitor_name, save_best_only=True, save_weights_only=True, verbose=1, mode='max') lr_reducer = ReduceLROnPlateau(monitor=monitor_name, factor=0.05, cooldown=0, patience=5,verbose=1, mode='max') early_stopper = EarlyStopping(monitor=monitor_name, min_delta=0, patience=25, verbose=0, mode='max') return [model_checkpoint, csv_logger, lr_reducer, early_stopper, tb]
Example #17
Source File: train_vae.py From chemical_vae with Apache License 2.0 | 4 votes |
def main_no_prop(params): start_time = time.time() X_train, X_test = vectorize_data(params) AE_only_model, encoder, decoder, kl_loss_var = load_models(params) # compile models if params['optim'] == 'adam': optim = Adam(lr=params['lr'], beta_1=params['momentum']) elif params['optim'] == 'rmsprop': optim = RMSprop(lr=params['lr'], rho=params['momentum']) elif params['optim'] == 'sgd': optim = SGD(lr=params['lr'], momentum=params['momentum']) else: raise NotImplemented("Please define valid optimizer") model_losses = {'x_pred': params['loss'], 'z_mean_log_var': kl_loss} # vae metrics, callbacks vae_sig_schedule = partial(mol_cb.sigmoid_schedule, slope=params['anneal_sigmod_slope'], start=params['vae_annealer_start']) vae_anneal_callback = mol_cb.WeightAnnealer_epoch( vae_sig_schedule, kl_loss_var, params['kl_loss_weight'], 'vae' ) csv_clb = CSVLogger(params["history_file"], append=False) callbacks = [ vae_anneal_callback, csv_clb] def vae_anneal_metric(y_true, y_pred): return kl_loss_var xent_loss_weight = K.variable(params['xent_loss_weight']) model_train_targets = {'x_pred':X_train, 'z_mean_log_var':np.ones((np.shape(X_train)[0], params['hidden_dim'] * 2))} model_test_targets = {'x_pred':X_test, 'z_mean_log_var':np.ones((np.shape(X_test)[0], params['hidden_dim'] * 2))} AE_only_model.compile(loss=model_losses, loss_weights=[xent_loss_weight, kl_loss_var], optimizer=optim, metrics={'x_pred': ['categorical_accuracy',vae_anneal_metric]} ) keras_verbose = params['verbose_print'] AE_only_model.fit(X_train, model_train_targets, batch_size=params['batch_size'], epochs=params['epochs'], initial_epoch=params['prev_epochs'], callbacks=callbacks, verbose=keras_verbose, validation_data=[ X_test, model_test_targets] ) encoder.save(params['encoder_weights_file']) decoder.save(params['decoder_weights_file']) print('time of run : ', time.time() - start_time) print('**FINISHED**') return
Example #18
Source File: train.py From LipNet with MIT License | 4 votes |
def train(run_name, speaker, start_epoch, stop_epoch, img_c, img_w, img_h, frames_n, absolute_max_string_len, minibatch_size): DATASET_DIR = os.path.join(CURRENT_PATH, speaker, 'datasets') OUTPUT_DIR = os.path.join(CURRENT_PATH, speaker, 'results') LOG_DIR = os.path.join(CURRENT_PATH, speaker, 'logs') curriculum = Curriculum(curriculum_rules) lip_gen = BasicGenerator(dataset_path=DATASET_DIR, minibatch_size=minibatch_size, img_c=img_c, img_w=img_w, img_h=img_h, frames_n=frames_n, absolute_max_string_len=absolute_max_string_len, curriculum=curriculum, start_epoch=start_epoch).build() lipnet = LipNet(img_c=img_c, img_w=img_w, img_h=img_h, frames_n=frames_n, absolute_max_string_len=absolute_max_string_len, output_size=lip_gen.get_output_size()) lipnet.summary() adam = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) # the loss calc occurs elsewhere, so use a dummy lambda func for the loss lipnet.model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=adam) # load weight if necessary if start_epoch > 0: weight_file = os.path.join(OUTPUT_DIR, os.path.join(run_name, 'weights%02d.h5' % (start_epoch - 1))) lipnet.model.load_weights(weight_file) spell = Spell(path=PREDICT_DICTIONARY) decoder = Decoder(greedy=PREDICT_GREEDY, beam_width=PREDICT_BEAM_WIDTH, postprocessors=[labels_to_text, spell.sentence]) # define callbacks statistics = Statistics(lipnet, lip_gen.next_val(), decoder, 256, output_dir=os.path.join(OUTPUT_DIR, run_name)) visualize = Visualize(os.path.join(OUTPUT_DIR, run_name), lipnet, lip_gen.next_val(), decoder, num_display_sentences=minibatch_size) tensorboard = TensorBoard(log_dir=os.path.join(LOG_DIR, run_name)) csv_logger = CSVLogger(os.path.join(LOG_DIR, "{}-{}.csv".format('training',run_name)), separator=',', append=True) checkpoint = ModelCheckpoint(os.path.join(OUTPUT_DIR, run_name, "weights{epoch:02d}.h5"), monitor='val_loss', save_weights_only=True, mode='auto', period=1) lipnet.model.fit_generator(generator=lip_gen.next_train(), steps_per_epoch=lip_gen.default_training_steps, epochs=stop_epoch, validation_data=lip_gen.next_val(), validation_steps=lip_gen.default_validation_steps, callbacks=[checkpoint, statistics, visualize, lip_gen, tensorboard, csv_logger], initial_epoch=start_epoch, verbose=1, max_q_size=5, workers=2, pickle_safe=True)
Example #19
Source File: train.py From LipNet with MIT License | 4 votes |
def train(run_name, start_epoch, stop_epoch, img_c, img_w, img_h, frames_n, absolute_max_string_len, minibatch_size): curriculum = Curriculum(curriculum_rules) lip_gen = BasicGenerator(dataset_path=DATASET_DIR, minibatch_size=minibatch_size, img_c=img_c, img_w=img_w, img_h=img_h, frames_n=frames_n, absolute_max_string_len=absolute_max_string_len, curriculum=curriculum, start_epoch=start_epoch).build() lipnet = LipNet(img_c=img_c, img_w=img_w, img_h=img_h, frames_n=frames_n, absolute_max_string_len=absolute_max_string_len, output_size=lip_gen.get_output_size()) lipnet.summary() adam = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) # the loss calc occurs elsewhere, so use a dummy lambda func for the loss lipnet.model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=adam) # load weight if necessary if start_epoch > 0: weight_file = os.path.join(OUTPUT_DIR, os.path.join(run_name, 'weights%02d.h5' % (start_epoch - 1))) lipnet.model.load_weights(weight_file) spell = Spell(path=PREDICT_DICTIONARY) decoder = Decoder(greedy=PREDICT_GREEDY, beam_width=PREDICT_BEAM_WIDTH, postprocessors=[labels_to_text, spell.sentence]) # define callbacks statistics = Statistics(lipnet, lip_gen.next_val(), decoder, 256, output_dir=os.path.join(OUTPUT_DIR, run_name)) visualize = Visualize(os.path.join(OUTPUT_DIR, run_name), lipnet, lip_gen.next_val(), decoder, num_display_sentences=minibatch_size) tensorboard = TensorBoard(log_dir=os.path.join(LOG_DIR, run_name)) csv_logger = CSVLogger(os.path.join(LOG_DIR, "{}-{}.csv".format('training',run_name)), separator=',', append=True) checkpoint = ModelCheckpoint(os.path.join(OUTPUT_DIR, run_name, "weights{epoch:02d}.h5"), monitor='val_loss', save_weights_only=True, mode='auto', period=1) lipnet.model.fit_generator(generator=lip_gen.next_train(), steps_per_epoch=lip_gen.default_training_steps, epochs=stop_epoch, validation_data=lip_gen.next_val(), validation_steps=lip_gen.default_validation_steps, callbacks=[checkpoint, statistics, visualize, lip_gen, tensorboard, csv_logger], initial_epoch=start_epoch, verbose=1, max_q_size=5, workers=2, pickle_safe=True)
Example #20
Source File: train.py From LipNet with MIT License | 4 votes |
def train(run_name, start_epoch, stop_epoch, img_c, img_w, img_h, frames_n, absolute_max_string_len, minibatch_size): curriculum = Curriculum(curriculum_rules) lip_gen = BasicGenerator(dataset_path=DATASET_DIR, minibatch_size=minibatch_size, img_c=img_c, img_w=img_w, img_h=img_h, frames_n=frames_n, absolute_max_string_len=absolute_max_string_len, curriculum=curriculum, start_epoch=start_epoch).build() lipnet = LipNet(img_c=img_c, img_w=img_w, img_h=img_h, frames_n=frames_n, absolute_max_string_len=absolute_max_string_len, output_size=lip_gen.get_output_size()) lipnet.summary() adam = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) # the loss calc occurs elsewhere, so use a dummy lambda func for the loss lipnet.model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=adam) # load weight if necessary if start_epoch > 0: weight_file = os.path.join(OUTPUT_DIR, os.path.join(run_name, 'weights%02d.h5' % (start_epoch - 1))) lipnet.model.load_weights(weight_file) spell = Spell(path=PREDICT_DICTIONARY) decoder = Decoder(greedy=PREDICT_GREEDY, beam_width=PREDICT_BEAM_WIDTH, postprocessors=[labels_to_text, spell.sentence]) # define callbacks statistics = Statistics(lipnet, lip_gen.next_val(), decoder, 256, output_dir=os.path.join(OUTPUT_DIR, run_name)) visualize = Visualize(os.path.join(OUTPUT_DIR, run_name), lipnet, lip_gen.next_val(), decoder, num_display_sentences=minibatch_size) tensorboard = TensorBoard(log_dir=os.path.join(LOG_DIR, run_name)) csv_logger = CSVLogger(os.path.join(LOG_DIR, "{}-{}.csv".format('training',run_name)), separator=',', append=True) checkpoint = ModelCheckpoint(os.path.join(OUTPUT_DIR, run_name, "weights{epoch:02d}.h5"), monitor='val_loss', save_weights_only=True, mode='auto', period=1) lipnet.model.fit_generator(generator=lip_gen.next_train(), steps_per_epoch=lip_gen.default_training_steps, epochs=stop_epoch, validation_data=lip_gen.next_val(), validation_steps=lip_gen.default_validation_steps, callbacks=[checkpoint, statistics, visualize, lip_gen, tensorboard, csv_logger], initial_epoch=start_epoch, verbose=1, max_q_size=5, workers=2, pickle_safe=True)
Example #21
Source File: train.py From LipNet with MIT License | 4 votes |
def train(run_name, start_epoch, stop_epoch, img_c, img_w, img_h, frames_n, absolute_max_string_len, minibatch_size): curriculum = Curriculum(curriculum_rules) lip_gen = RandomSplitGenerator(dataset_path=DATASET_DIR, minibatch_size=minibatch_size, img_c=img_c, img_w=img_w, img_h=img_h, frames_n=frames_n, absolute_max_string_len=absolute_max_string_len, curriculum=curriculum, start_epoch=start_epoch).build(val_split=0.2) lipnet = LipNet(img_c=img_c, img_w=img_w, img_h=img_h, frames_n=frames_n, absolute_max_string_len=absolute_max_string_len, output_size=lip_gen.get_output_size()) lipnet.summary() adam = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) # the loss calc occurs elsewhere, so use a dummy lambda func for the loss lipnet.model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=adam) # load weight if necessary if start_epoch > 0: weight_file = os.path.join(OUTPUT_DIR, os.path.join(run_name, 'weights%02d.h5' % (start_epoch - 1))) lipnet.model.load_weights(weight_file) spell = Spell(path=PREDICT_DICTIONARY) decoder = Decoder(greedy=PREDICT_GREEDY, beam_width=PREDICT_BEAM_WIDTH, postprocessors=[labels_to_text, spell.sentence]) # define callbacks statistics = Statistics(lipnet, lip_gen.next_val(), decoder, 256, output_dir=os.path.join(OUTPUT_DIR, run_name)) visualize = Visualize(os.path.join(OUTPUT_DIR, run_name), lipnet, lip_gen.next_val(), decoder, num_display_sentences=minibatch_size) tensorboard = TensorBoard(log_dir=os.path.join(LOG_DIR, run_name)) csv_logger = CSVLogger(os.path.join(LOG_DIR, "{}-{}.csv".format('training',run_name)), separator=',', append=True) checkpoint = ModelCheckpoint(os.path.join(OUTPUT_DIR, run_name, "weights{epoch:02d}.h5"), monitor='val_loss', save_weights_only=True, mode='auto', period=1) lipnet.model.fit_generator(generator=lip_gen.next_train(), steps_per_epoch=lip_gen.default_training_steps, epochs=stop_epoch, validation_data=lip_gen.next_val(), validation_steps=lip_gen.default_validation_steps, callbacks=[checkpoint, statistics, visualize, lip_gen, tensorboard, csv_logger], initial_epoch=start_epoch, verbose=1, max_q_size=5, workers=2, pickle_safe=True)
Example #22
Source File: capsulenet.py From CapsNet-Keras with MIT License | 4 votes |
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
Example #23
Source File: capsulenet-multi-gpu.py From CapsNet-Keras with MIT License | 4 votes |
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=args.debug) lr_decay = callbacks.LearningRateScheduler(schedule=lambda epoch: args.lr * (0.9 ** epoch)) # compile the model model.compile(optimizer=optimizers.Adam(lr=args.lr), loss=[margin_loss, 'mse'], loss_weights=[1., args.lam_recon]) """ # 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, lr_decay]) # End: Training with data augmentation -----------------------------------------------------------------------# from utils import plot_log plot_log(args.save_dir + '/log.csv', show=True) return model
Example #24
Source File: experiment.py From srcnn with MIT License | 4 votes |
def train(self, train_set='91-image', val_set='Set5', epochs=1, resume=True): # Load and process data x_train, y_train = self.load_set(train_set) x_val, y_val = self.load_set(val_set) x_train, x_val = [self.pre_process(x) for x in [x_train, x_val]] y_train, y_val = [self.inverse_post_process(y) for y in [y_train, y_val]] # Compile model model = self.compile(self.build_model(x_train)) model.summary() # Save model architecture # Currently in Keras 2 it's not possible to load a model with custom # layers. So we just save it without checking consistency. self.config_file.write_text(model.to_yaml()) # Inherit weights if resume: latest_epoch = self.latest_epoch if latest_epoch > -1: weights_file = self.weights_file(epoch=latest_epoch) model.load_weights(str(weights_file)) initial_epoch = latest_epoch + 1 else: initial_epoch = 0 # Set up callbacks callbacks = [] callbacks += [ModelCheckpoint(str(self.model_file))] callbacks += [ModelCheckpoint(str(self.weights_file()), save_weights_only=True)] callbacks += [CSVLogger(str(self.history_file), append=resume)] # Train model.fit(x_train, y_train, epochs=epochs, callbacks=callbacks, validation_data=(x_val, y_val), initial_epoch=initial_epoch) # Plot metrics history prefix = str(self.history_file).rsplit('.', maxsplit=1)[0] df = pd.read_csv(str(self.history_file)) epoch = df['epoch'] for metric in ['Loss', 'PSNR']: train = df[metric.lower()] val = df['val_' + metric.lower()] plt.figure() plt.plot(epoch, train, label='train') plt.plot(epoch, val, label='val') plt.legend(loc='best') plt.xlabel('Epoch') plt.ylabel(metric) plt.savefig('.'.join([prefix, metric.lower(), 'png'])) plt.close()
Example #25
Source File: train.py From deepcaps with MIT License | 4 votes |
def train(model, data, hard_training, args): # unpacking the data (x_train, y_train), (x_test, y_test) = data # callbacks log = callbacks.CSVLogger(args.save_dir + '/log' + appendix + '.csv') tb = callbacks.TensorBoard(log_dir=args.save_dir + '/tensorboard-logs', batch_size=args.batch_size, histogram_freq=int(args.debug), write_grads=False) checkpoint1 = CustomModelCheckpoint(model, args.save_dir + '/best_weights_1' + appendix + '.h5', monitor='val_capsnet_acc', save_best_only=False, save_weights_only=True, verbose=1) checkpoint2 = CustomModelCheckpoint(model, args.save_dir + '/best_weights_2' + appendix + '.h5', monitor='val_capsnet_acc', save_best_only=True, save_weights_only=True, verbose=1) lr_decay = callbacks.LearningRateScheduler(schedule=lambda epoch: args.lr * 0.5**(epoch // 10)) if(args.numGPU > 1): parallel_model = multi_gpu_model(model, gpus=args.numGPU) else: parallel_model = model if(not hard_training): parallel_model.compile(optimizer=optimizers.Adam(lr=args.lr), loss=[margin_loss, 'mse'], loss_weights=[1, 0.4], metrics={'capsnet': "accuracy"}) else: parallel_model.compile(optimizer=optimizers.Adam(lr=args.lr), loss=[margin_loss_hard, 'mse'], loss_weights=[1, 0.4], metrics={'capsnet': "accuracy"}) # Begin: Training with data augmentation def train_generator(x, y, batch_size, shift_fraction=args.shift_fraction): train_datagen = ImageDataGenerator(featurewise_center=False, samplewise_center=False, featurewise_std_normalization=False, samplewise_std_normalization=False, zca_whitening=False, zca_epsilon=1e-06, rotation_range=0.1, width_shift_range=0.1, height_shift_range=0.1, shear_range=0.0, zoom_range=0.1, channel_shift_range=0.0, fill_mode='nearest', cval=0.0, horizontal_flip=True, vertical_flip=False, rescale=None, preprocessing_function=None, data_format=None) # shift up to 2 pixel for MNIST train_datagen.fit(x) generator = train_datagen.flow(x, y, batch_size=batch_size, shuffle=True) while True: x_batch, y_batch = generator.next() yield ([x_batch, y_batch], [y_batch, x_batch]) parallel_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=[lr_decay, log, checkpoint1, checkpoint2], initial_epoch=int(args.ep_num), shuffle=True) parallel_model.save(args.save_dir + '/trained_model_multi_gpu.h5') model.save(args.save_dir + '/trained_model.h5') return parallel_model
Example #26
Source File: nn.py From surface-crack-detection with MIT License | 4 votes |
def train(): nn = NeuralNetwork() total = data.length_from_path(nn.dn_image, nn.dn_aug_image) q = misc.round_up(total, 100) - total if (q > 0): print("Dataset augmentation (%s increase) is necessary (only once)\n" % q) gen.augmentation(q) images, labels = data.fetch_from_paths([nn.dn_image, nn.dn_aug_image], [nn.dn_label, nn.dn_aug_label]) images, labels, v_images, v_labels = misc.random_split_dataset(images, labels, const.p_VALIDATION) epochs, steps_per_epoch, validation_steps = misc.epochs_and_steps(len(images), len(v_images)) print("Train size:\t\t%s |\tSteps per epoch: \t%s\nValidation size:\t%s |\tValidation steps:\t%s\n" % misc.str_center(len(images), steps_per_epoch, len(v_images), validation_steps)) patience, patience_early = const.PATIENCE, int(epochs*0.25) loop, past_monitor = 0, float('inf') checkpoint = ModelCheckpoint(nn.fn_checkpoint, monitor=const.MONITOR, save_best_only=True, verbose=1) early_stopping = EarlyStopping(monitor=const.MONITOR, min_delta=const.MIN_DELTA, patience=patience_early, restore_best_weights=True, verbose=1) logger = CSVLogger(nn.fn_logger, append=True) while True: loop += 1 h = nn.model.fit_generator( shuffle=True, generator=nn.prepare_data(images, labels), steps_per_epoch=steps_per_epoch, epochs=epochs, validation_steps=validation_steps, validation_data=nn.prepare_data(v_images, v_labels), use_multiprocessing=True, callbacks=[checkpoint, early_stopping, logger]) val_monitor = h.history[const.MONITOR] if ("loss" in const.MONITOR): val_monitor = min(val_monitor) improve = (past_monitor - val_monitor) else: val_monitor = max(val_monitor) improve = (val_monitor - past_monitor) print("\n##################") print("Finished epoch (%s) with %s: %f" % (loop, const.MONITOR, val_monitor)) if (abs(improve) == float("inf") or improve > const.MIN_DELTA): print("Improved from %f to %f" % (past_monitor, val_monitor)) past_monitor = val_monitor patience = const.PATIENCE test(nn) elif (patience > 0): print("Did not improve from %f" % (past_monitor)) print("Current patience: %s" % (patience)) patience -= 1 else: break print("##################\n")
Example #27
Source File: test_callbacks.py From DeepLearning_Wavelet-LSTM with MIT License | 4 votes |
def test_stop_training_csv(tmpdir): np.random.seed(1337) fp = str(tmpdir / 'test.csv') (X_train, y_train), (X_test, y_test) = get_test_data(num_train=train_samples, num_test=test_samples, input_shape=(input_dim,), classification=True, num_classes=num_classes) y_test = np_utils.to_categorical(y_test) y_train = np_utils.to_categorical(y_train) cbks = [callbacks.TerminateOnNaN(), callbacks.CSVLogger(fp)] model = Sequential() for _ in range(5): model.add(Dense(num_hidden, input_dim=input_dim, activation='relu')) model.add(Dense(num_classes, activation='linear')) model.compile(loss='mean_squared_error', optimizer='rmsprop') def data_generator(): i = 0 max_batch_index = len(X_train) // batch_size tot = 0 while 1: if tot > 3 * len(X_train): yield np.ones([batch_size, input_dim]) * np.nan, np.ones([batch_size, num_classes]) * np.nan else: yield (X_train[i * batch_size: (i + 1) * batch_size], y_train[i * batch_size: (i + 1) * batch_size]) i += 1 tot += 1 i = i % max_batch_index history = model.fit_generator(data_generator(), len(X_train) // batch_size, validation_data=(X_test, y_test), callbacks=cbks, epochs=20) loss = history.history['loss'] assert len(loss) > 1 assert loss[-1] == np.inf or np.isnan(loss[-1]) values = [] with open(fp) as f: for x in reader(f): values.append(x) assert 'nan' in values[-1], 'The last epoch was not logged.' os.remove(fp)
Example #28
Source File: TransferLearning_reg.py From Intelligent-Projects-Using-Python with MIT License | 4 votes |
def train_model(self,file_list,labels,n_fold=5,batch_size=16,epochs=40,dim=224,lr=1e-5,model='ResNet50'): model_save_dest = {} k = 0 kf = KFold(n_splits=n_fold, random_state=0, shuffle=True) for train_index,test_index in kf.split(file_list): k += 1 file_list = np.array(file_list) labels = np.array(labels) train_files,train_labels = file_list[train_index],labels[train_index] val_files,val_labels = file_list[test_index],labels[test_index] if model == 'Resnet50': model_final = self.resnet_pseudo(dim=224,freeze_layers=10,full_freeze='N') if model == 'VGG16': model_final = self.VGG16_pseudo(dim=224,freeze_layers=10,full_freeze='N') if model == 'InceptionV3': model_final = self.inception_pseudo(dim=224,freeze_layers=10,full_freeze='N') adam = optimizers.Adam(lr=lr, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0) model_final.compile(optimizer=adam, loss=["mse"],metrics=['mse']) reduce_lr = keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.50,patience=3, min_lr=0.000001) early = EarlyStopping(monitor='val_loss', patience=10, mode='min', verbose=1) logger = CSVLogger('keras-5fold-run-01-v1-epochs_ib.log', separator=',', append=False) checkpoint = ModelCheckpoint( 'kera1-5fold-run-01-v1-fold-' + str('%02d' % (k + 1)) + '-run-' + str('%02d' % (1 + 1)) + '.check', monitor='val_loss', mode='min', save_best_only=True, verbose=1) callbacks = [reduce_lr,early,checkpoint,logger] train_gen = DataGenerator(train_files,train_labels,batch_size=32,n_classes=len(self.class_folders),dim=(self.dim,self.dim,3),shuffle=True) val_gen = DataGenerator(val_files,val_labels,batch_size=32,n_classes=len(self.class_folders),dim=(self.dim,self.dim,3),shuffle=True) model_final.fit_generator(train_gen,epochs=epochs,verbose=1,validation_data=(val_gen),callbacks=callbacks) model_name = 'kera1-5fold-run-01-v1-fold-' + str('%02d' % (k + 1)) + '-run-' + str('%02d' % (1 + 1)) + '.check' del model_final f = h5py.File(model_name, 'r+') del f['optimizer_weights'] f.close() model_final = keras.models.load_model(model_name) model_name1 = self.outdir + str(model) + '___' + str(k) model_final.save(model_name1) model_save_dest[k] = model_name1 return model_save_dest # Hold out dataset validation function
Example #29
Source File: TransferLearning_ffd.py From Intelligent-Projects-Using-Python with MIT License | 4 votes |
def train_model(self,train_dir,val_dir,n_fold=5,batch_size=16,epochs=40,dim=224,lr=1e-5,model='ResNet50'): if model == 'Resnet50': model_final = self.resnet_pseudo(dim=224,freeze_layers=10,full_freeze='N') if model == 'VGG16': model_final = self.VGG16_pseudo(dim=224,freeze_layers=10,full_freeze='N') if model == 'InceptionV3': model_final = self.inception_pseudo(dim=224,freeze_layers=10,full_freeze='N') train_file_names = glob.glob(f'{train_dir}/*/*') val_file_names = glob.glob(f'{val_dir}/*/*') train_steps_per_epoch = len(train_file_names)/float(batch_size) val_steps_per_epoch = len(val_file_names)/float(batch_size) train_datagen = ImageDataGenerator(horizontal_flip = True,vertical_flip = True,width_shift_range = 0.1,height_shift_range = 0.1, channel_shift_range=0,zoom_range = 0.2,rotation_range = 20,preprocessing_function=pre_process) val_datagen = ImageDataGenerator(preprocessing_function=pre_process) train_generator = train_datagen.flow_from_directory(train_dir, target_size=(dim,dim), batch_size=batch_size, class_mode='categorical') val_generator = val_datagen.flow_from_directory(val_dir, target_size=(dim,dim), batch_size=batch_size, class_mode='categorical') print(train_generator.class_indices) joblib.dump(train_generator.class_indices,f'{self.outdir}/class_indices.pkl') adam = optimizers.Adam(lr=lr, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0) model_final.compile(optimizer=adam, loss=["categorical_crossentropy"],metrics=['accuracy']) reduce_lr = keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.50,patience=3, min_lr=0.000001) early = EarlyStopping(monitor='val_loss', patience=10, mode='min', verbose=1) logger = CSVLogger(f'{self.outdir}/keras-epochs_ib.log', separator=',', append=False) model_name = f'{self.outdir}/keras_transfer_learning-run.check' checkpoint = ModelCheckpoint( model_name, monitor='val_loss', mode='min', save_best_only=True, verbose=1) callbacks = [reduce_lr,early,checkpoint,logger] model_final.fit_generator(train_generator,steps_per_epoch=train_steps_per_epoch,epochs=epochs,verbose=1,validation_data=(val_generator),validation_steps=val_steps_per_epoch,callbacks=callbacks, class_weight={0:0.012,1:0.12,2:0.058,3:0.36,4:0.43}) #model_final.fit_generator(train_generator,steps_per_epoch=1,epochs=epochs,verbose=1,validation_data=(val_generator),validation_steps=1,callbacks=callbacks) del model_final f = h5py.File(model_name, 'r+') del f['optimizer_weights'] f.close() model_final = keras.models.load_model(model_name) model_to_store_path = f'{self.outdir}/{model}' model_final.save(model_to_store_path) return model_to_store_path,train_generator.class_indices # Hold out dataset validation function
Example #30
Source File: 3leveldcnet.py From Multi-level-DCNet with GNU General Public License v3.0 | 4 votes |
def train(model, data, args): """ Training a 3-level DCNet :param model: the 3-level DCNet 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 row = x_train.shape[1] col = x_train.shape[2] channel = x_train.shape[3] # callbacks log = callbacks.CSVLogger(args.save_dir + '/log.csv') tb = callbacks.TensorBoard(log_dir=args.save_dir + '/tensorboard-logs', histogram_freq=int(args.debug)) checkpoint = callbacks.ModelCheckpoint(args.save_dir + '/weights-{epoch:02d}.h5', monitor='val_capsnet_acc', verbose=1) lr_decay = callbacks.LearningRateScheduler(schedule=lambda epoch: args.lr * (args.lr_decay ** epoch)) # compile the model # Notice the four separate losses (for separate backpropagations) model.compile(optimizer=optimizers.Adam(lr=args.lr), loss=[margin_loss, margin_loss, margin_loss, margin_loss, 'mse'], loss_weights=[1., 1., 1., 1., args.lam_recon], metrics={'capsnet': 'accuracy'}) #model.load_weights('result/weights.h5') """ # Training without data augmentation: model.fit([x_train, y_train], [y_train, y_train, y_train, y_train, x_train], batch_size=args.batch_size, epochs=args.epochs, validation_data=[[x_test, y_test], [y_test, y_test, y_test, y_test, x_test]], callbacks=[log, tb, checkpoint, lr_decay]) """ # 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, y_batch, y_batch, y_batch, x_batch[:,:,:,0:1]]) # 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, y_test, y_test, y_test, x_test[:,:,:,0:1]]], callbacks=[log, tb, checkpoint, lr_decay]) # Save model weights model.save_weights(args.save_dir + '/trained_model.h5') print('Trained model saved to \'%s/trained_model.h5\'' % args.save_dir) plot_log(args.save_dir + '/log.csv', show=True) return model