keras实现多GPU或指定GPU的使用介绍


Posted in Python onJune 17, 2020

1. keras新版本中加入多GPU并行使用的函数

下面程序段即可实现一个或多个GPU加速:

注意:使用多GPU加速时,Keras版本必须是Keras2.0.9以上版本

from keras.utils.training_utils import multi_gpu_model  #导入keras多GPU函数
import VGG19   #导入已经写好的函数模型,例如VGG19

if G <= 1:
  print("[INFO] training with 1 GPU...")
  model = VGG19()

# otherwise, we are compiling using multiple GPUs
else:
  print("[INFO] training with {} GPUs...".format(G))
  # we'll store a copy of the model on *every* GPU and then combine
  # the results from the gradient updates on the CPU
  with tf.device("/cpu:0"):
    # initialize the model
    model1 = VGG19()
    # make the model parallel(if you have more than 2 GPU)
    model = multi_gpu_model(model1, gpus=G)

2.指定使用某个GPU

首先在终端查看主机中GPU编号:

watch -n -9 nvidia-smi

查询结果如下所示:

keras实现多GPU或指定GPU的使用介绍

显示主机中只有一块GPU,编号为0

2.1 下面方法是直接在终端运行时加入相关语句实现指定GPU的使用

export CUDA_VISIBLE_DEVICES=0 python test.py
# 表示运行test.py文件时,使用编号为0的GPU卡
export CUDA_VISIBLE_DEVICES=0,2 python test.py
# 表示运行test.py文件时,使用编号为0和2的GPU卡

2.2 下面方法是在Python程序中添加

import os
# 使用第一张与第三张GPU卡
os.environ["CUDA_VISIBLE_DEVICES"] = "0, 2"

补充知识:踩坑记----large batch_size cause low var_acc

有时候,我们在训练模型前期,会出现很高的train_acc(训练准确率),但var_acc(验证准确率)却很低。这往往是因为我们模型在训练过程中已经进入局部最优,或者出现过拟合的现象。造成这种情况有多种原因,我只提出以下几点,有补充的可以在下面留言,我补充。

(1).训练数据分布不均匀,可能你的训练数据某一类别占据了大多数,比如95%的数据为苹果,5%的数据为其他类别,那么模型为了拟合训练数据,则模型会偏袒于把识别结果归属于苹果,而验证集的数据是正常的,那么便会出现高train_acc,低val_acc。

(2).训练数据没有shuffle,那么整个batch里面将会是同一个类别数据,比如都为苹果的图片,那么训练一个batch,那么模型输出将会往这一类别靠拢,会形成一个很高的acc的假象,但这个模型泛化能力却很低,因为这个模型都只会为了拟合这批同类的数据。

(3).训练集跟验证集的预处理不一致,这个是细节问题,输入的图片分布不一致,那么必然会影响到验证结果。

(4).模型过于复杂,造成过拟合现象,特别是在于训练数据集不多的情况下,更容易出现过拟合。

(5).这个也是最难发现的,就是过大的batch_size,造成训练前期,模型还未收敛,出现很高的train_acc,却有很低的val_acc,亲测,在120个类别,参数只有七万的分类模型中,在batch-size等于64的情况下,在第二个epoch时,train_acc达到80%,val_acc却只有6%,train_loss跟val_loss也是相差很大,而在batch_size在等于8的情况下,在第二个epoch,train_acc跟val_acc皆能达到60%,且还有上升的趋势。至于为什么,个人认为,模型在大的batch_size的情况下,模型泛化能力下降,且更难拟合,每个epoch所包含的step也更少,且在adam的优化算法,前期的学习率较高,模型出现了振荡,一直在局部最优值徘徊,具体原因不知。

接下来分析下,batc_size对模型的影响:

large batch_size:

好处:训练的更快,每一step都包含更多的训练集,模型准确率会更高,不容易受到噪声的影响,稳定性更好。

small batch_size:

好处:不容易陷入局部最优,泛化能力更强。

总结:

(1).large batch_size,虽然训练模型的训练误差会更低,但往往在execute的时候,效果却不尽人意。

(2).在时间允许的情况下,建议batch_size在32或以下。

以上这篇keras实现多GPU或指定GPU的使用介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python读写ini文件示例(python读写文件)
Mar 25 Python
Python基于PycURL自动处理cookie的方法
Jul 25 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
神经网络理论基础及Python实现详解
Dec 15 Python
python学生信息管理系统(完整版)
Apr 05 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
Python对excel文档的操作方法详解
Dec 10 Python
Python实战购物车项目的实现参考
Feb 20 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
python中time tzset()函数实例用法
Feb 18 Python
Python3 如何开启自带http服务
May 18 Python
Python字符串格式化常用手段及注意事项
Jun 17 #Python
python代码区分大小写吗
Jun 17 #Python
python代码中怎么换行
Jun 17 #Python
Python bisect模块原理及常见实例
Jun 17 #Python
浅谈keras2 predict和fit_generator的坑
Jun 17 #Python
python能在浏览器能运行吗
Jun 17 #Python
python的pip有什么用
Jun 17 #Python
You might like
PDO::rollBack讲解
2019/01/29 PHP
js chrome浏览器判断代码
2010/03/28 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
JS数据类型判断的几种常用方法
2020/07/07 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
python爬虫框架talonspider简单介绍
2017/06/09 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
Python多线程扫描端口代码示例
2018/02/09 Python
Python操作mongodb的9个步骤
2018/06/04 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python os模块常用方法和属性总结
2020/02/20 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
校班主任推荐信范文
2013/12/03 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫