Tensorflow与Keras自适应使用显存方式


Posted in Python onJune 22, 2020

Tensorflow支持基于cuda内核与cudnn的GPU加速,Keras出现较晚,为Tensorflow的高层框架,由于Keras使用的方便性与很好的延展性,之后更是作为Tensorflow的官方指定第三方支持开源框架。

但两者在使用GPU时都有一个特点,就是默认为全占满模式。在训练的情况下,特别是分步训练时会导致显存溢出,导致程序崩溃。

可以使用自适应配置来调整显存的使用情况。

一、Tensorflow

1、指定显卡

代码中加入

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

或者在运行代码前,在终端

export CUDA_VISIBLE_DEVICES=0

2、为显存分配使用比例

在建立tf.Session加入设置数据(显存使用比例为1/3),但有时你虽然设置了使用上限,在程序需要更高显存时还是会越过该限制

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

3、自适应分配

会自适应分配显存,不会将显存全部分配导致资源浪费

config = tf.ConfigProto() 
config.gpu_options.allow_growth=True 
sess = tf.Session(config=config)

二、Keras

与tensorflow大差不差,就是将tf.Session配置转置Keras配置

1、指定显卡

代码中加入

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

或者在运行代码前,在终端

export CUDA_VISIBLE_DEVICES=0

2、为显存分配使用比例

import tensorflow as tf
import keras.backend.tensorflow_backend as KTF

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.333
session = tf.Session(config=config)
KTF.set_session(session)

3、自适应分配

import keras.backend.tensorflow_backend as KTF

config = tf.ConfigProto() 
config.gpu_options.allow_growth=True 
session = tf.Session(config=config)
KTF.set_session(session)

4、如有设置fit_generator

将多线程关闭

#可将
use_multiprocessing=True
#改为
use_multiprocessing=False

补充知识:Keras 自动分配显存,不占用所有显存

自动分配显存,不占用所有显存

import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import os
 
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
config = tf.ConfigProto()
config.gpu_options.allow_growth=True #不全部占满显存, 按需分配
sess = tf.Session(config=config)
KTF.set_session(sess)

以上这篇Tensorflow与Keras自适应使用显存方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python基于twisted实现简单的web服务器
Sep 29 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
Python实现字典的key和values的交换
Aug 04 Python
python 异常处理总结
Oct 18 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
python调试神器PySnooper的使用
Jul 03 Python
Python logging设置和logger解析
Aug 28 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
详解Python中的路径问题
Sep 02 Python
Python实现随机生成迷宫并自动寻路
Jun 13 Python
Python find()、rfind()方法及作用
Dec 24 Python
python数据类型强制转换实例详解
Jun 22 #Python
keras 指定程序在某块卡上训练实例
Jun 22 #Python
python Socket网络编程实现C/S模式和P2P
Jun 22 #Python
Python手动或自动协程操作方法解析
Jun 22 #Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 #Python
Python socket服务常用操作代码实例
Jun 22 #Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 #Python
You might like
制作美丽的拉花
2021/03/03 冲泡冲煮
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
批量实现面向对象的实例代码
2013/07/01 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
python多线程扫描端口示例
2014/01/16 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
Python 控制终端输出文字的实例
2019/07/12 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
python能开发游戏吗
2020/06/11 Python
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
党课学习思想汇报
2014/01/02 职场文书
先进个人材料怎么写
2014/12/30 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
个人党性分析总结
2015/03/05 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
逃出克隆岛观后感
2015/06/09 职场文书