文章目录

  • 如果仅保存了多GPU权重-解决方法
    • 多GPU训练
    • 单GPU预测
  • 多GPU训练,单GPU模型保存
  • 问题纪实

在keras环境中,使用多GPU进行训练,但是如何使保存的模型为能在单GPU上运行的模型呢?4块GPU环境下训练的模型,放到其他的机器上,那么也必须使用4GPU的机器才行。

如果仅保存了多GPU权重-解决方法

偷梁换柱!!
即在多GPU的环境下加载权重(或者模型),再保存单GPU模型。
前提条件,此时我们已经保存了最优的模型或者仅仅是模型参数:multi_model.h5
流程如下:

多GPU训练

keras自带模块 multi_gpu_model,此方式为数据并行的方式,将将目标模型在多个设备上各复制一份,并使用每个设备上的复制品处理整个数据集的不同部分数据,最高支持在8片GPU上并行。
使用方式:

def get_model(input_shape):
.
.
.
return model
model = get_model(input_shape) #此时为单GPU 搭建的modelfrom keras.utils import multi_gpu_model
# Replicates `model` on 4 GPUs.
# This assumes that your machine has 4 available GPUs.
model = multi_gpu_model(model, gpus=4) #将搭建的model复制到4个GPU中
# for train
model.compile(loss='categorical_crossentropy',optimizer='adam')# fit data for train

单GPU预测

因为定义的多核训练,所以网络的每一层都是按GPU来命名的,训练时采用多个GPU那么当导入参数的时候必须指定相同数量的GPU才行,如上代码的指定方式。但是,但我们将model切换到单GPU的环境中时,则会出现错误,此时我们必须将参数保存为单GPU的形式。
方法:
在原多GPU环境中导入模型,保存为单GPU版本,修改训练代码(fit),改为加载已经训练的权重。
此时训练已经结束。

def get_model(input_shape):
.
.
.
return model
model = get_model(input_shape)  #此时为单GPU 搭建的model# metric
# loss
from keras.utils import multi_gpu_model
paralleled_model = multi_gpu_model(model,gpus=4) # 此时paralleled_model为4个GPU的模型,已经进行复制,但是seg_model仍然为单GPU model。#seg_model.compile(optimizer=Adam) #训练结束,注释掉
paralleled_model.load_weights("multi_model.h5") # 加载之前训练保存的在多GPU上训练的模型参数
model.save('single_gpu_model.h5') # 保存单GPU的模型seg_model此时,保存的就是单模型参数!!

加载单GPU模型:

model.load_weights("single_gpu_model.h5")

多GPU训练,单GPU模型保存

def get_model(input_shape):
.
.
.
return model
model = get_model(input_shape) #此时为单GPU 搭建的modelfrom keras.utils import multi_gpu_model
# Replicates `model` on 4 GPUs.
# This assumes that your machine has 4 available GPUs.
paralleled_model = multi_gpu_model(model, gpus=4) #将搭建的model复制到4个GPU中
# for train
paralleled_model.compile(loss='categorical_crossentropy',optimizer='adam')
model.save_weights("single_gpu_model.h5")
# fit data for train

问题纪实

使用多个GPU训练模型,使用multi_gpu_model和ModelCheckpoint来保存最佳模型,则在检查点保存的模型上调用load_model时会出现此错误:[4]

"ValueError: axes don't match array"

具体问题记录如下:

目前只能通过以上两种方式解决。
但是,之前训练Unet时并未出现这个问题。。。。。。。
-----2019-01-24


参考:

  1. 【keras】一台设备上同时使用多张显卡训练同一个网络模型
  2. Keras 多GPU下模型和参数保存Modelcheckpoint callback报错问题以及在单GPU/CPU下载入
  3. Keras多GPU训练以及载入权重无效的问
  4. load_model fails with error ValueError: axes don’t match array

keras 多GPU训练,单GPU权重保存和预测相关推荐

  1. pytorch:加载预训练模型(多卡加载单卡预训练模型,多GPU,单GPU)

    在pytorch加载预训练模型时,可能遇到以下几种情况. 分为以下几种 在pytorch加载预训练模型时,可能遇到以下几种情况. 1.多卡训练模型加载单卡预训练模型 2. 多卡训练模型加载多卡预训练模 ...

  2. 程序如何在两个gpu卡上并行运行_深度学习分布式训练相关介绍 - Part 1 多GPU训练...

    本篇文章主要是对深度学习中运用多GPU进行训练的一些基本的知识点进行的一个梳理 文章中的内容都是经过认真地分析,并且尽量做到有所考证 抛砖引玉,希望可以给大家有更多的启发,并能有所收获 介绍 大多数时 ...

  3. PyTorch 使用GPU训练

    Pytorch 使用GPU训练 使用 GPU 训练只需要在原来的代码中修改几处就可以了. 我们有两种方式实现代码在 GPU 上进行训练 ## 方法一 .cuda() 我们可以通过对网络模型,数据,损失 ...

  4. keras train_on_batch详解(train_on_batch的输出输入详解,train_on_batch多GPU训练详解,自定义学习率调整策略)

    利用 train_on_batch 精细管理训练过程 大部分使用 keras 的同学使用 fit() 或者 fit_generator() 进行模型训练, 这两个 api 对于刚接触深度学习的同学非常 ...

  5. Keras多GPU训练指南

    更多深度文章,请关注:https://yq.aliyun.com/cloud Keras是我最喜欢的Python深度学习框架,特别是在图像分类领域.我在很多地方都使用到了Keras,包括生产系统.我自 ...

  6. 【DDRNet】DDRNet项目使用单GPU、自己的数据集训练、得到测试图像

    最近需要对一些细胞图像进行分割,需要比较几个模型之间的优劣,于是找到了DDRNet. DDRNet项目来源:https://github.com/chenjun2hao/DDRNet.pytorch ...

  7. keras指定gpu_Keras多GPU训练指南

    摘要:随着Keras(v2.0.8)最新版本的发布,使用多GPU 训练深度神经网络将变得非常容易,就跟调用函数一样简单!利用多GPU,能够获得准线性的提速. Keras是我最喜欢的Python深度学习 ...

  8. 使用估算器、tf.keras 和 tf.data 进行多 GPU 训练

    文 / Zalando Research 研究科学家 Kashif Rasul 来源 | TensorFlow 公众号 与大多数 AI 研究部门一样,Zalando Research 也意识到了对创意 ...

  9. 深度学习训练的时候gpu占用0_26秒单GPU训练CIFAR10,Jeff Dean也点赞的深度学习优化技巧...

    选自myrtle.ai 机器之心编译机器之心编辑部 26 秒内用 ResNet 训练 CIFAR10?一块 GPU 也能这么干.近日,myrtle.ai 科学家 David Page 提出了一大堆针对 ...

  10. 利用GPU训练的配置方法(Keras)

    利用GPU训练的配置方法(Keras) GPU的使用配置 配置GPU内存的占用率 本文主要针对Keras(Tensorflow2.0版本以后)深度学习框架如何对GPU进行配置,以及如何设置训练任务对G ...

最新文章

  1. 2019计算与系统神经科学大会Cosyne 前沿研究汇总
  2. java调用权报表的代码_ireport5.6使用table组件,如何用table显示javaBean数据源
  3. SpiderMonkey-让你的C++程序支持JavaScript脚本
  4. hdu2147 kiki's game(巴什博弈java)
  5. SpringCloud微服务:基于Nacos组件,整合Dubbo框架
  6. 黑侠百度URL批量推送程序
  7. svn添加到windows服务中
  8. kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和...
  9. 为什么C++编程让人觉得那么难学?
  10. 【电路仿真】基于matlab Simulink光伏电池仿真模型【含Matlab源码 486期】
  11. java url 请求 最大长度限制,Http协议中的各种长度限制总结
  12. jquery第三章练习三(制作京东常见问题分类页面)
  13. Slate轨道工具使用(三)—位置还原问题修复
  14. ADNI静息态功能核磁共振成像数据预处理总流程
  15. excel快速便捷批量填充
  16. Orientation模块管理设备的方向信息,包括alpha、beta、gamma三个方向信息,通过plus.orientation可获取设备方向管理对象
  17. Excel之动态数据分析报表
  18. 三款好用的语音转文字软件,你知道几个?
  19. 【requests库】爬取Pixiv日榜图片 并保存到本地
  20. ngx.print与ngx.say

热门文章

  1. HDU 3966 dfs序+LCA+树状数组
  2. 我的站(艾网---城市生活新门户)重新上线了
  3. javascript模拟抽奖
  4. SQL中JOIN操作后接ON和WHERE关键字的区别
  5. spring引入properties变量报错
  6. 下载devc++和codeblocks记录
  7. Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
  8. Bootstrap 更改Navbar默认样式
  9. 一些学习笔记和工作布置
  10. 矩阵分解之奇异值分解