keras 多GPU训练,单GPU权重保存和预测
文章目录
- 如果仅保存了多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
参考:
- 【keras】一台设备上同时使用多张显卡训练同一个网络模型
- Keras 多GPU下模型和参数保存Modelcheckpoint callback报错问题以及在单GPU/CPU下载入
- Keras多GPU训练以及载入权重无效的问
- load_model fails with error ValueError: axes don’t match array
keras 多GPU训练,单GPU权重保存和预测相关推荐
- pytorch:加载预训练模型(多卡加载单卡预训练模型,多GPU,单GPU)
在pytorch加载预训练模型时,可能遇到以下几种情况. 分为以下几种 在pytorch加载预训练模型时,可能遇到以下几种情况. 1.多卡训练模型加载单卡预训练模型 2. 多卡训练模型加载多卡预训练模 ...
- 程序如何在两个gpu卡上并行运行_深度学习分布式训练相关介绍 - Part 1 多GPU训练...
本篇文章主要是对深度学习中运用多GPU进行训练的一些基本的知识点进行的一个梳理 文章中的内容都是经过认真地分析,并且尽量做到有所考证 抛砖引玉,希望可以给大家有更多的启发,并能有所收获 介绍 大多数时 ...
- PyTorch 使用GPU训练
Pytorch 使用GPU训练 使用 GPU 训练只需要在原来的代码中修改几处就可以了. 我们有两种方式实现代码在 GPU 上进行训练 ## 方法一 .cuda() 我们可以通过对网络模型,数据,损失 ...
- keras train_on_batch详解(train_on_batch的输出输入详解,train_on_batch多GPU训练详解,自定义学习率调整策略)
利用 train_on_batch 精细管理训练过程 大部分使用 keras 的同学使用 fit() 或者 fit_generator() 进行模型训练, 这两个 api 对于刚接触深度学习的同学非常 ...
- Keras多GPU训练指南
更多深度文章,请关注:https://yq.aliyun.com/cloud Keras是我最喜欢的Python深度学习框架,特别是在图像分类领域.我在很多地方都使用到了Keras,包括生产系统.我自 ...
- 【DDRNet】DDRNet项目使用单GPU、自己的数据集训练、得到测试图像
最近需要对一些细胞图像进行分割,需要比较几个模型之间的优劣,于是找到了DDRNet. DDRNet项目来源:https://github.com/chenjun2hao/DDRNet.pytorch ...
- keras指定gpu_Keras多GPU训练指南
摘要:随着Keras(v2.0.8)最新版本的发布,使用多GPU 训练深度神经网络将变得非常容易,就跟调用函数一样简单!利用多GPU,能够获得准线性的提速. Keras是我最喜欢的Python深度学习 ...
- 使用估算器、tf.keras 和 tf.data 进行多 GPU 训练
文 / Zalando Research 研究科学家 Kashif Rasul 来源 | TensorFlow 公众号 与大多数 AI 研究部门一样,Zalando Research 也意识到了对创意 ...
- 深度学习训练的时候gpu占用0_26秒单GPU训练CIFAR10,Jeff Dean也点赞的深度学习优化技巧...
选自myrtle.ai 机器之心编译机器之心编辑部 26 秒内用 ResNet 训练 CIFAR10?一块 GPU 也能这么干.近日,myrtle.ai 科学家 David Page 提出了一大堆针对 ...
- 利用GPU训练的配置方法(Keras)
利用GPU训练的配置方法(Keras) GPU的使用配置 配置GPU内存的占用率 本文主要针对Keras(Tensorflow2.0版本以后)深度学习框架如何对GPU进行配置,以及如何设置训练任务对G ...
最新文章
- 2019计算与系统神经科学大会Cosyne 前沿研究汇总
- java调用权报表的代码_ireport5.6使用table组件,如何用table显示javaBean数据源
- SpiderMonkey-让你的C++程序支持JavaScript脚本
- hdu2147 kiki's game(巴什博弈java)
- SpringCloud微服务:基于Nacos组件,整合Dubbo框架
- 黑侠百度URL批量推送程序
- svn添加到windows服务中
- kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和...
- 为什么C++编程让人觉得那么难学?
- 【电路仿真】基于matlab Simulink光伏电池仿真模型【含Matlab源码 486期】
- java url 请求 最大长度限制,Http协议中的各种长度限制总结
- jquery第三章练习三(制作京东常见问题分类页面)
- Slate轨道工具使用(三)—位置还原问题修复
- ADNI静息态功能核磁共振成像数据预处理总流程
- excel快速便捷批量填充
- Orientation模块管理设备的方向信息,包括alpha、beta、gamma三个方向信息,通过plus.orientation可获取设备方向管理对象
- Excel之动态数据分析报表
- 三款好用的语音转文字软件,你知道几个?
- 【requests库】爬取Pixiv日榜图片 并保存到本地
- ngx.print与ngx.say
热门文章
- HDU 3966 dfs序+LCA+树状数组
- 我的站(艾网---城市生活新门户)重新上线了
- javascript模拟抽奖
- SQL中JOIN操作后接ON和WHERE关键字的区别
- spring引入properties变量报错
- 下载devc++和codeblocks记录
- Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
- Bootstrap 更改Navbar默认样式
- 一些学习笔记和工作布置
- 矩阵分解之奇异值分解