当前位置:   article > 正文

keras指定gpu_keras搭建模型训练教程

keras怎么做gpu

1adc20ee8b5a27c2ec19774faf86b380.png

Keras

keras中文官方文档

写在前面

keras是对tensorflow的high-level封装,之前一直都用pytorch,但是pytorch训练出来的模型不太好部署应用,最近需要使用keras训练模型,因此简单了解了一些keras的训练推断使用方法。总体而言,keras上手比较简单,搭建网络图纸计算也很方便,给的API接口对训练调参很友好(简直就是调参器:),本文写了一部分训练流程,随着我学习的深入会不断更新本教程。

训练流程

只要安装了keras-gpu版本,自动调用GPU进行训练,默认只会单卡训练,

一定要注意,使用pip或keras安装 conda install keras(-gpu),不带gpu只会装cpu版本!!

使用

os.environ["CUDA_VISIBLE_DEVICES"]="xx"指定可见显卡

tf会申请资源,但是不一定全都是利用的,可以显式地控制显存资源的用量

  1. import tensorflow as tf
  2. from keras.backend.tensorflow_backend import set_session
  3. config= tf.ConfigProto()
  4. config.gpu_options.per_process_gpu_memory_fraction = set_session(tf.Session(config=config))

多卡训练:
只需要在外层使用multi_gpu_model() wrap一下并返回就OK了,默认会调用所有的GPU资源

  1. from keras.utils import multi_gpu_model
  2. multi_train_model = multi_gpu_model(model, gpus=, cpu_relocation=False)#对原来的model外层包一下并返回
该方法的并行方式也是将模型copy到多个GPU上面,训练时将batch_size平均分配到多个GPU上面,最后再reduce到CPU或者GPU上处理后更新多个GPU的权重参数 注意:如果batch_size=1,原则上是无法进行多卡并行的,但是keras会在可见GPUs上面开辟空间,但是只会在一张卡上训练,因此会看到只有一张卡的utils在活动,其余卡只会占用显存而不具体工作

调用的keras库

  1. from keras import Input, Model#搭建模型输入库,模型库
  2. from keras.applications.vgg16/resnet50 import VGG16/ResNet50#网络模型库
  3. from keras.layers import Concatenate, Conv2D, upSampling2D, BatchNormalization#网络层
  4. from keras.utils import multi_gpu_model#多GPU训练
  5. from keras.optimizers import Adam, SGD#优化器
  6. from keras.callbacks import EarlyStopping, ModelCheckpoint, TensorBoard#训练时后端callbacks
  7. import tensorflow as tf

创建自己的模型

  1. from keras import Input, Model
  2. from keras.applications.vgg import VGG16
  3. class Network:
  4. def __init__(self, *argv, **kwargs):
  5. self._input = Input(name',#定义一个Input的实例
  6. shape=(),
  7. dtype='float')
  8. vgg = VGG16(input_tensor=self.input_img#送入输入的input_tensor
  9. weights='imagenet',
  10. dtype='float32')
  11. def build_graph(self):
  12. Conv2D(**kwargs)(vgg)...#此处定义自己的网络层
  13. return Model(inputs=self._input, outputs=)#
  14. net_instance = Network(...)
  15. model = net_instance.build_graph()

编译网络

在该过程中需要指定loss函数和优化器,compile完成后相当于固定网络的计算图纸

model.compile(loss=, optimizer=)

打印网络信息

model.summary()#打印网络信息,包括网络层数,中间层尺寸变化,以及参数量等信息

训练网络

generator=送入需要训练的数据,需要自己定义数据生成的方法

  1. model.fit_generator(generator=data_gen_func(),
  2. steps_per_epoch=,#每个epoch迭代多少次,注意 step * batchsize = total_nums
  3. epochs=,#共训练多少个Epoch
  4. validation_data=,
  5. verbose=,
  6. initial_epoch=,#开始训练的epoch
  7. callbacks= [ModelCheckpoint(filepath=,#存储文件路径,str最后预留剩余%s可以在命名时保存训练的一些loss
  8. save_best_only=,#之存储
  9. verbose=),
  10. TensorBoard(log_dir=,
  11. histogram_freq=0,
  12. write_graph=True,
  13. writer_images=False)])
  14. model.save(filepath=)#保存网络对象
  15. model.save_weights(filepath=)#只保存网络权重

介绍:
callbacks: 训练时后台的一些调用服务,常用的有ModelCheckpoint和TensorBoard..

网络推断模式/预测

Model.predict(x)#x为输入测试数据

pred = model.predict(x, batch_size=None, steps=None)

x:输入数据,Numpy array
输出即为网络output

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/53754
推荐阅读
相关标签
  

闽ICP备14008679号