TensorFlow常用函数(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MOU_IT/article/details/82808052

1、tf.app.flags

  tf.app.flags用于定义全局变量,在命令行中运行比较方便,它是google特有的风格,更常见的解析方法是argparse。tf.app.flags可以认为是对模块argparse的简单封装,它实现了python-gflags的一个功能子集。  

import tensorflow as tf 

flags = tf.app.flags
FLAGS = flags.FLAGS

 #第一个是参数名称,第二个参数是默认值,第三个是参数描述

flags.DEFINE_enum('learning_policy', 'poly', ['poly', 'step'],'Learning rate policy for training.')
flags.DEFINE_float('base_learning_rate', .0001,'The base learning rate for model training.')
flags.DEFINE_integer('learning_rate_decay_step', 2000, 'Decay the base learning rate at a fixed step.')
flags.DEFINE_integer('train_batch_size', 12,'The number of images in each batch during training.')
flags.DEFINE_multi_integer('train_crop_size', [513, 513],'Image crop size [height, width] during training.')
flags.DEFINE_boolean('upsample_logits', True,'Upsample logits during training.')
flags.DEFINE_string('dataset', 'dataset_name','Name of the test dataset.')

def main(_):  
    print(FLAGS.learning_policy)
    print(FLAGS.base_learning_rate)
    print(FLAGS.learning_rate_decay_step)
    print(FLAGS.train_batch_size)
    print(FLAGS.train_crop_size)
    print(FLAGS.upsample_logits)
    print(FLAGS.dataset)

if __name__ == '__main__':
    tf.app.run()

 在命令行运行:python flags_test.py,输出为:

poly
0.0001
2000
12
[513, 513]
True
dataset_name

2、tf.device():指定运行设备 

    在TensorFlow中,模型可以在本地的GPU和CPU中运行,用户可以指定模型运行的设备。通常,如果你的TensorFlow版本是GPU版本的,而且你的电脑上配置有符合条件的显卡,那么在不做任何配置的情况下,模型是默认运行在显卡下的。如果需要切换成CPU运算,可以调用tf.device(device_name)函数,其中device_name格式如/cpu:0其中的0表示设备号,TF不区分CPU的设备号,设置为0即可。GPU区分设备号/gpu:0和/gpu:1表示两张不同的显卡。 
    在一些情况下,我们即使是在GPU下跑模型,也会将部分Tensor储存在内存里,因为这个Tensor可能太大了,显存不够放,相比于显存,内存一般大多了,于是这个时候就常常人为指定为CPU设备。这种形式我们在一些代码中能见到。如:

with tf.device('/cpu:0'):
    build_CNN() # 此时,这个CNN的Tensor是储存在内存里的,而非显存里。

需要注意的是,这个方法会减少显存的负担,但是从内存把数据传输到显存中是非常慢的,这样做常常会减慢速度。

3、tf.get_connection():从一个结合中取出全部变量,返回一个列表

  函数原型:get_collection(key,scope=None)
   参数:
    key:收集的关键。例如,GraphKeys 类包含许多集合的标准名称。
    scope:(可选)如果提供,则筛选结果列表为仅包含name属性匹配 re.match 使用的项目。如果一个范围是提供的,并且选择或 re. match 意味着没有特殊的令牌过滤器的范围,则不会返回没有名称属性的项。
    返回值:
   集合中具有给定name的值的列表,或者如果没有值已添加到该集合中,则为空列表。该列表包含按其收集顺序排列的值。

4、
 

猜你喜欢

转载自blog.csdn.net/MOU_IT/article/details/82808052