一、tf.ConfigProto和tf.GPUOptions用法
tf.ConfigProto
一般用在创建session
的时候,用来对session
进行参数配置,而tf.GPUOptions
可以作为设置tf.ConfigProto
时的一个参数选项,一般用于限制GPU资源的使用。
1.1 tf.ConfigProto()的参数
log_device_placement=True : 是否打印设备分配日志
allow_soft_placement=True : 如果你指定的设备不存在,允许TF自动分配设备
1.2 tf.ConfigProto()使用参数的两种方法
1)第一种实在构造config对象时直接赋值,如下:
tf.ConfigProto(log_device_placement=True,allow_soft_placement=True)
2)第二种是先构造config对象,再对构造的config对象进行赋值,如下:
config = tf.ConfigProto()
config.log_device_placement= True
config.allow_soft_placement=True
1.3 让参数设置生效的方法
session = tf.Session(config=config)
在Keras中:
from keras.backend.tensorflow_backend import set_session
set_session(tf.Session(config=config))
二、使用tf.GPUOptions限制GPU资源的使用
tf.GPUOptions
可以作为设置tf.ConfigProto
时的一个参数选项,一般用于限制GPU资源的使用。同样有两种方法实现。为了加快运行效率,TensorFlow在初始化时会尝试分配所有可用的GPU显存资源给自己,这在多人使用的服务器上工作就会导致GPU占用,别人无法使用GPU工作的情况。
tf提供了两种控制GPU资源使用的方法,一是让TensorFlow在运行过程中动态申请显存,需要多少就申请多少;第二种方式就是限制GPU的使用率。
2.1 动态申请显存
第一种:
import tensorflow as tf
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)
第二种:
gpu_options=tf.GPUOptions(allow_growth = True)
config=tf.ConfigProto(gpu_options=gpu_options)
session = tf.Session(config=config)
KTF.set_session(session)
2.2 限制GPU的使用率
第一种:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.85 #占用85%显存
session = tf.Session(config=config)
第二种:
gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.85)
config=tf.ConfigProto(gpu_options=gpu_options)
session = tf.Session(config=config)
【注意】当限制GPU使用率时,GPU所占的显存是一直占着的,哪怕你Ctrl+Z 终止了程序,这时你需要手动kill进程。(参考链接:)具体如下:
如果你在linux终端运行深度学习python脚本文件,运行中发现占用多个GPU和内存资源,可用下面的方法解决:
(1)请先查看占用资源的进程归属方是谁,以及使用的是什么指令:
ps -f # PID号
(2)然后确认该进程可以kill掉情况下直接杀掉:
kill -9 PID号 #注意必须加-9,否则可能杀不掉进程
三、ACM论文投稿时如何删除页眉和reference信息
参考链接:https://www.pianshen.com/article/66061233347/ 删除多余的reference信息
\settopmatter{printacmref=false}
% Removes citation information below abstract
\renewcommand\footnotetextcopyrightpermission[1]{}
% removes footnote with conference information in first column
\pagestyle{plain}
% removes running headers
删除页眉
\usepackage{fancyhdr}
\pagestyle{empty}
四 、Keras和tensorflow.keras的关系
参考链接:https://zhuanlan.zhihu.com/p/57142529
keras和tf.keras大部分用法相同。
区别:
- tf.keras版本可能与keras不同
- 保存模型的权重: tf.keras 默认采用检查点checkpoints格式。请传递 save_format=‘h5’ 以使用 HDF5;keras用h5格式
- 调用 compile 方法配置模型的学习流程: tf.keras是用tf.train 模块向其传递optimizer优化器实例;keras是keras.optimizers,或用名称使用默认参数的优化器
- 数据集: tf.keras用 tf.data.Dataset实例传递到 fit 方法;keras用keras.datasets
- 都可输入numpy数据
五、Keras和tensorflowd版本对应关系
参考链接:
今天完成V2版本,将每个路口的历史状态与相连路口的历史状态进行多头注意力机制计算即GAT(按照之前PPT里面画的图)。另外temporal data
的时间没有变动,因为在construct samples
的时候需要把前一个十秒的瞬时状态添加进来,env.step()
的时候不方便处理。
后续实验需要考虑的有
(1)是否需要先对历史状态进行编码即经过MLP处理;
(2)打乱训练数据看看结果;
(3)对比V2与V1的结果,V2还改变了TCN的一些参数;
(4)分布式处理,每个路口一个agent是否会有效?
(5)CoLight那篇文章里面用的GAT和DynSTGAT里面的到底有什么不同?
(写论文这个点可以提炼出来!)
V3版本:
(1)如果V2没有提升,首先看看别的论文怎么用TCN的;
(2)另外看看别的论文怎么在时间序列上用GAT的;
(3)做出相应的修改。