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中将字典转换成其json字符串
Jul 16 Python
Python中作用域的深入讲解
Dec 10 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
python调用c++返回带成员指针的类指针实例
Dec 12 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
详细总结Python常见的安全问题
May 21 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
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
node.js通过url读取文件
2020/10/16 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python中的列表推导浅析
2014/04/26 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
django admin组件使用方法详解
2019/07/19 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
幼儿园小班评语大全
2014/04/17 职场文书
升职自荐信范文
2015/03/27 职场文书
交通安全学习心得体会
2016/01/18 职场文书
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers