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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
Python 中的 else详解
Apr 23 Python
简单实现python画圆功能
Jan 25 Python
python如何对实例属性进行类型检查
Mar 20 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
OpenCV+python手势识别框架和实例讲解
Aug 03 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
python web框架 django wsgi原理解析
Aug 20 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
python如何为list实现find方法
May 30 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
基于mysql的论坛(4)
2006/10/09 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
jQuery.extend 函数详解
2012/02/03 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
Vue 中axios配置实例详解
2018/07/27 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
python多进程读图提取特征存npy
2019/05/21 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers
改造DE1103三步曲
2022/04/07 无线电
Redis实现订单过期删除的方法步骤
2022/06/05 Redis