keras 一些tips

keras 一些tips

 

 

1.显存占用问题

由于tensorflow在训练时默认指定所有GPU的显存,使用tensorflow后端的keras亦如此

注:虽然占用了所有GPU的显存,但实际使用只有指定的GPU。----------(占着不用)

        (1)禁用gpu  

  1.  
    import os
  2.  
    os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

        (2)指定gpu

  1.  
    import os
  2.  
    os.environ["CUDA_VISIBLE_DEVICES"] = "2"

        (3)同时指定GPU和显存占用比例

  1.  
    import os
  2.  
    import tensorflow as tf
  3.  
    os.environ["CUDA_VISIBLE_DEVICES"] = "2"
  4.  
    from keras.backend.tensorflow_backend import set_session
  5.  
    config = tf.ConfigProto()
  6.  
    config.gpu_options.per_process_gpu_memory_fraction = 0.8
  7.  
    set_session(tf.Session(config=config))

2.将训练结果保存为csv格式

  1.  
    hist = model.fit(x_train, y_train,
  2.  
    batch_size=batch_size,
  3.  
    epochs=epochs,
  4.  
    verbose=1,
  5.  
    validation_data=(x_test, y_test),
  6.  
    callbacks=[ModelCheckpoint('weights/imdb_indrnn_mnist.h5', monitor='val_acc', save_best_only=True, save_weights_only=True, mode='max')])
  7.  
    log = pd.DataFrame(hist.history)
  8.  
    log.to_csv('log.csv')

3.学习率衰减

参考keras官方文档

ReduceLROnPlateau

keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0)

  1.  
    reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=5, min_lr=0.001)
  2.  
    model.fit(X_train, Y_train, callbacks=[reduce_lr])

自定义learning rate(参考https://blog.csdn.net/xiaojiajia007/article/details/77278315)

  1.  
    from keras.callbacks import LearningRateScheduler
  2.  
    def scheduler(epoch):
  3.  
    if epoch%2==0 and epoch!=0:
  4.  
    lr = K.get_value(model.optimizer.lr)
  5.  
    K.set_value(model.optimizer.lr, lr*.9)
  6.  
    print("lr changed to {}".format(lr*.9))
  7.  
    return K.get_value(model.optimizer.lr)
  8.  
     
  9.  
    lr_decay = LearningRateScheduler(scheduler)
  10.  
     
  11.  
    model.fit_generator(train_gen, (nb_train_samples//batch_size)*batch_size,
  12.  
    nb_epoch=100, verbose=1,
  13.  
    validation_data=valid_gen, nb_val_samples=val_size,
  14.  
    callbacks=[lr_decay])

4.保存权重和保存模型

由于直接保存模型(含权重)往往文件太大,一般我们采用保存权重的方法

(1)保存模型+权重

你可以使用model.save(filepath)将Keras模型和权重保存在一个HDF5文件中,该文件将包含:

  • 模型的结构,以便重构该模型
  • 模型的权重
  • 训练配置(损失函数,优化器等)
  • 优化器的状态,以便于从上次训练中断的地方开始

使用keras.models.load_model(filepath)来重新实例化你的模型,如果文件中存储了训练配置的话,该函数还会同时完成模型的编译

  1.  
    from keras.models import load_model
  2.  
     
  3.  
    model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
  4.  
    del model # deletes the existing model
  5.  
     
  6.  
    # returns a compiled model
  7.  
    # identical to the previous one
  8.  
    model = load_model('my_model.h5')

(2)仅保存权重

  1.  
    model.save_weights('my_model_weights.h5')
  2.  
    model.load_weights('my_model_weights.h5')
posted @ 2018-08-02 22:05  菜鸡一枚  阅读(268)  评论(0)    收藏  举报