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的re模块应用实例
Sep 26 Python
python回溯法实现数组全排列输出实例分析
Mar 17 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
使用Python实现在Windows下安装Django
Oct 17 Python
python async with和async for的使用
Jun 20 Python
django-初始配置(纯手写)详解
Jul 30 Python
Python代码块及缓存机制原理详解
Dec 13 Python
Python有参函数使用代码实例
Jan 06 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
python smtplib发送多个email联系人的实现
Oct 09 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 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
php中文字符截取防乱码
2008/03/28 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
arguments对象
2006/11/20 Javascript
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
运用jQuery定时器的原理实现banner图片切换
2014/10/22 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
Python中unittest用法实例
2014/09/25 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
python tqdm库的使用
2020/11/30 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
办公室前台的岗位职责
2013/12/20 职场文书
大学生如何写自荐信
2014/01/08 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
药店促销活动总结
2014/07/10 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
综合素质评价自我评价
2015/03/06 职场文书
母亲去世追悼词
2015/06/23 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android