Tensorflow與Keras自適應(yīng)使用顯存方式
Tensorflow支持基于cuda內(nèi)核與cudnn的GPU加速,Keras出現(xiàn)較晚,為Tensorflow的高層框架,由于Keras使用的方便性與很好的延展性,之后更是作為Tensorflow的官方指定第三方支持開源框架。
但兩者在使用GPU時都有一個特點,就是默認(rèn)為全占滿模式。在訓(xùn)練的情況下,特別是分步訓(xùn)練時會導(dǎo)致顯存溢出,導(dǎo)致程序崩潰。
可以使用自適應(yīng)配置來調(diào)整顯存的使用情況。
一、Tensorflow
1、指定顯卡
代碼中加入
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
或者在運行代碼前,在終端
export CUDA_VISIBLE_DEVICES=0
2、為顯存分配使用比例
在建立tf.Session加入設(shè)置數(shù)據(jù)(顯存使用比例為1/3),但有時你雖然設(shè)置了使用上限,在程序需要更高顯存時還是會越過該限制
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
3、自適應(yīng)分配
會自適應(yīng)分配顯存,不會將顯存全部分配導(dǎo)致資源浪費
config = tf.ConfigProto() config.gpu_options.allow_growth=True sess = tf.Session(config=config)
二、Keras
與tensorflow大差不差,就是將tf.Session配置轉(zhuǎn)置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、自適應(yīng)分配
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、如有設(shè)置fit_generator
將多線程關(guān)閉
#可將 use_multiprocessing=True #改為 use_multiprocessing=False
補(bǔ)充知識: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自適應(yīng)使用顯存方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python技巧匿名函數(shù)、回調(diào)函數(shù)和高階函數(shù)
本文分享的是Python技巧匿名函數(shù)、回調(diào)函數(shù)和高階函數(shù),我們在Python中使用lambda表達(dá)式來使用匿名函數(shù),回調(diào)函數(shù)即callback,先寫一個函數(shù),讓預(yù)先寫好的系統(tǒng)來調(diào)用,一個函數(shù)可以作為參數(shù)傳給另外一個函數(shù),或者一個函數(shù)的返回值為另外一個函數(shù),滿足其一則為高階函數(shù)2021-12-12詳解四種Python中基本形態(tài)學(xué)濾波的實現(xiàn)
最基礎(chǔ)的形態(tài)學(xué)操作有四個,分別是腐蝕、膨脹、開計算和閉計算。這篇文章主要介紹了這四種形態(tài)學(xué)濾波的實現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-04-04python標(biāo)準(zhǔn)日志模塊logging的使用方法
python的標(biāo)準(zhǔn)庫里的日志系統(tǒng)從Python2.3開始支持。只要import logging這個模塊即可使用。2013-11-11Python學(xué)習(xí)之str重要函數(shù)
這篇文章主要介紹了Python str重要函數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10Numpy中的數(shù)組搜索中np.where方法詳細(xì)介紹
這篇文章主要介紹了Numpy中的數(shù)組搜索中np.where方法詳細(xì)介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01