TensorFlow API解释

1、tf.shape(varA)和varA.get_shape()
这两个API都是返回varA的size大小,但是tf.shape(varA)中varA的数据类型可以是Tensor、list、Array;而varA.get_shape()中varA的数据类型只能是Tensor,返回的是一个元组tuple。
例如:
import tensorflow as tf
import numpy as np
varX=tf.constant([[1,2,3],[4,5,6],[7,8,9]])
varY=[[1,2,3],[4,5,6],[7,8,9]]
varZ=np.arange(9).reshape([1,3,3])
sess=tf.Session()
varX_shape=tf.shape(varX)
varY_shape=tf.shape(varY)
varZ_shape=tf.shape(varZ)
print sess.run(varX_shape)
print sess.run(varY_shape)
print sess.run(varZ_shape)
输出结果是:
[3 3]
[3 3]
[1 3 3]
而:
varX_shape=varX.get_shape()
返回varX_shape是元组TensorShape([Dimension(3), Dimension(3)]),所以不能用sess.run(varX_shape)输出结果,因为既不是Tensor,也不是string。但是可以用.as_list()得到size,即
varX_shape=varX.get_shape().as_list()返回varX_shape=[3, 3]
varY_shape=varY.get_shape()则会报错AttributeError: 'list' object has no attribute 'get_shape',因为varY不是Tensor,是list
varZ_shape=varZ.get_shape()也会报错AttributeError: 'numpy.ndarray' object has no attribute 'get_shape',因为varZ也不是Tensor,是Array。
所以,如果一个Tensor的静态shape未定义,则可用上述API来获得其动态shape。
PS: 看一个varX的维度数,可以看varX定义或者输出的最左边(或最右边)有几个[(或])。

2、tf.Tensor.set_shape()和tf.reshape()
tf.Tensor.set_shape的函数调用为tf.Tensor.set_shape(shape),参数shape为要调整为的形状(注意shape里最多只能有一个维度的值可以为-1,表示该维度自动计算得到),作用是更新一个Tensor对象的静态shape。如果该Tensor对象的静态shape信息不能够直接推导出来时,tf.Tensor.set_shape()设置该Tensor额外的shape信息,要注意的是该方法不改变Tensor的动态shape信息。
tf.reshape()的函数调用为tf.reshape(tensorVar, shape, name=None),参数tensorVar为被调整维度的张量,shape为要调整为的形状,作用为返回一个shape形状的新Tensor。
示例:
varA = [1, 2, 3, 4, 5, 6, 7, 8, 9]
tensorVarA = tf.constant(varA)
tensorVarB = tf.reshape(tensorVarA, [1, 3, 3])
with tf.Session() as sess:
print(sess.run(tensorVarB))
输出为:
[[[1 2 3]
[4 5 6]
[7 8 9]]]

3、tf.ConfigProto函数
该API用在创建session的时候,用于对session进行参数配置。调用过程为:
with tf.Session(config = tf.ConfigProto(), ...)
tf.ConfigProto()由以下两个参数:
log_device_placement = True/Flase,指示是否打印参数在设备上的分配信息
allow_soft_placement = True/Flase,指示如果指定的设备不存在是,是否允许TensorFlow自动分配其他设备。为了避免出现指定设备不存在而出错的情况,可以在创建session的时候将allow_soft_placement设置为True,这样TensorFlow会自动选择一个存在并且支持的设备来运行operation
gpu_options = ...,设置每个GPU应该使用的显存容量,由tf.GPUOptions(per_process_gpu_memory_fraction = 0.9)设置
tf.ConfigProto().gpu_options.allow_growth = True/False,指示使用的GPU容量,是否按需增加
所以,一个完整的tf.ConfigProto使用如下:
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.9)
config = tf.ConfigProto(log_device_placement = True, allow_soft_placement = True, gpu_options = gpu_options)
config.gpu_options.allow_growth = True
With tf.Session(config = config, ...) as sess:
...
PS: CUDA_VISIBLE_DEVICE=...,指示使用哪块GPU运行,如:
CUDA_VISIBLE_DEVICE=0 python a.py,在0号GPU上运行a.py
CUDA_VISIBLE_DEVICE=0,1 python b.py,在0、1号GPU上运行b.py

4、tf.where函数
tf.where的函数调用为tf.where(condition, x = None, y = None, name = None),根据condition判定返回。即condition是True,选择x;condition是False,选择y。

5、tf.nn.dropout函数
tf.nn.dropout的函数调用为tf.nn.dropout(tensorVar, keep_prob, noise_shape = None, seed = None, name = None),使tensor以一定的概率保留。tensorVar为输入tensor,keep_prob为神经元保留的概率。
典型用法如下:
tensorVarY =tf.matmul(tf.nn.dropout(tensorVarX, keep_prob = 0.5), W)
lstm_cell = tf.nn.rnn_cell.DropoutWrapper(lstm_cell, output_keep_prob = 0.5)为RNN中dropout的用法
PS: 一般dropout在训练的时候用,test的时候就不需要dropout了。

6、Saver
Saver的函数调用为tf.train.Saver(),实现保存训练的结果,即保存模型的参数,以便下一次的迭代训练或用于预测。Saver类提供了以下三点功能:
1)提供了向checkpoint文件保存和从checkpoint文件中恢复变量的相关方法。checkpoint文件是一个二进制文件,它把变量名映射到对应的tensor值 。
2)只要提供一个计数器,当计数器触发时,Saver类可以自动的生成checkpoint文件。这让我们可以在训练过程中保存多个中间结果。例如,我们可以保存每一步训练的结果。
3)为了避免填满整个磁盘,Saver可以自动的管理checkpoint文件。例如,我们可以指定保存最近的N个checkpoint文件。checkpoint文件指明最新的模型,和模型的存储位置。restore时,也是查看checkpoint文件获取最新的模型。
典型用法如下:

import os
cwd = os.cwd()
saver = tf.train.Saver()
saver.save(sess, cwd + 'model.ckpt', global_step)

预测或载入模型:

ckpt = tf.train.get_checkpoint_state(cwd)
if ckpt and ckpt.model_checkpoint_path:
saver.restore(sess, ckpt.model_checkpoint_path)
print(sess.run(W))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 1. tf函数 tensorflow 封装的工具类函数 | 操作组 | 操作 ||:-------------| ...
    南墙已破阅读 5,025评论 0 5
  • 简单线性回归 import tensorflow as tf import numpy # 创造数据 x_dat...
    CAICAI0阅读 3,534评论 0 49
  • 若是问我的择偶标准,我希望他既hold得住白衬衫牛仔衫,又能驾驭得了运动衫。想了下身边的男生朋友,能符合这一点的好...
    晨光微熙2017阅读 171评论 0 0
  • 简介 OkHttp3IdlingResource是Jake Wharton大神为okhttp写的Espresso的...
    sylviaMo阅读 1,047评论 0 0
  • 众口难调 厨师口头禅 炒菜既不能盐重又不能盐少 适度为妙 而这个度往往难把握 高明的厨艺 也会叹气 因为众人口味不...
    旖旎i阅读 132评论 4 8