阅读 174

tensorflow常见API

Tensorflow

与图相关的API位于tf.Graph类中:

 

 

tf.Operation类代表图中的一个节点,用于计算张量数据:

 

tf.Tensor类是操作输出的符号句柄,它不包含操作输出的值,提供一种在tf.session中的计算方法:

 

 

可视化:tf.summary,FileWriter类用于在目录中创建事件文件,并且向文件中添加摘要和事件,用来在Tensorboard中展示:

 

 

常见API:

1. tf.global_variables_initializer()

初始化计算图中所有全局变量(op)

 

2. tf.local_variables_initializer()

用来初始化计算图中所有局部变量(op)

 

3. tf.summary.scalar(tags, values, collections=None, name=None)

用来显示标量信息,一般在画loss,accuary时会用到这个函数

 

如:tf.summary.scalar(‘mean‘, mean)

 

4. tf.summary.histogram(tags, values, collections=None, name=None)

用来显示直方图信息,一般用来显示训练过程中变量的分布情况

 

如:tf.summary.histogram(‘histogram‘, var)

 

5. tf.summary.distribution

分布图,一般用于显示weights分布

 

 

6. tf.summary.merge_all()

将所有summary全部保存到磁盘,以便tensorboard显示

 

如:tf.summaries.merge_all(key=‘summaries‘)

 

7. tf.summary.merge(inputs, collections=None, name=None)

一般选择要保存的信息还需要用到tf.get_collection()函数

 

tf.summary.merge(inputs, collections=None, name=None)

 

8. tf.summary.text

可以将文本类型的数据转换为tensor写入summary中

 

9. tf.summary.image(tag, tensor,max_images,collections=None,name=None)

输出带图像的probuf,汇总数据的图像的的形式如下: ‘ tag /image/0‘, ‘ tag /image/1‘...,如:input/image/0等

 

tf.summary.image(tag, tensor, max_images=3, collections=None, name=None)

 

10. tf.summary.audio

展示训练过程中记录的音频

 

11. tf.summary.FileWriter

指定一个文件用来保存图

 

tf.summary.FileWritter(path,sess.graph)

 

12. tf.gfile.Copy(oldpath, newpath, overwrite=False)

拷贝源文件并创建目标文件,无返回

 

13. tf.gfile.MkDir(dirname)

创建一个目录,dirname为目录名字,无返回

 

14. tf.gfile.Remove(filename)

删除文件,filename即文件名,无返回

 

15. tf.gfile.DeleteRecursively(dirname)

递归删除所有目录及其文件,dirname即目录名,无返回

 

16. tf.gfile.Exists(filename)

判断目录或文件是否存在,filename可为目录路径或带文件名的路径,有该目录则返回True,否则False

 

17. tf.gfile.Glob(filename)

查找匹配pattern的文件并以列表的形式返回,filename可以是一个具体的文件名,也可以是包含通配符的正则表达式

 

18. tf.gfile.IsDirectory(dirname)

判断所给目录是否存在,如果存在则返回True,否则返回False,dirname是目录名

 

19. tf.gfile.ListDirectory(dirname)

罗列dirname目录下的所有文件并以列表形式返回,dirname必须是目录名

 

20. tf.gfile.MakeDirs(dirname)

以递归方式建立父目录及其子目录,如果目录已存在且是可覆盖则会创建成功,否则报错,无返回

 

21. tf.gfile.Rename(oldname, newname, overwrite=False)

重命名或移动一个文件或目录,无返回

 

22. tf.gfile.Stat(filename)

返回目录的统计数据,该函数会返回FileStatistics数据结构

 

23. tf.gfile.Walk(top, in_order=True)

递归获取目录信息生成器,top是目录名,in_order默认为True指示顺序遍历目录,否则将无序遍历,每次生成返回如下格式信息(dirname, [subdirname, subdirname, ...], [filename, filename, ...])

 

24. tf.gfile.GFile(filename, mode)

获取文本操作句柄,类似于python提供的文本操作open()函数,filename是要打开的文件名,mode是以何种方式去读写,将会返回一个文本操作句柄,tf.gfile.Open()是该接口的同名,可任意使用其中一个

 

25. tf.gfile.FastGFile(filename, mode)

该函数与tf.gfile.GFile的差别仅仅在于“无阻塞”,即该函数会无阻赛以较快的方式获取文本操作句柄

 

26. tf.train.Saver()

保存和恢复都需要实例化一个tf.train.Saver

 

27. tf.saved_model.utils.build_tensor_info(tensor)

使用SignatureDef方法,构建tensor info,将输入输出tensor的信息都进行了封装,并且给他们一个自定义的别名

 

 {‘input_x‘: tf.saved_model.utils.build_tensor_info(x), ‘keep_prob‘: tf.saved_model.utils.build_tensor_info(keep_prob)}

 

.saved_model.signature_def_utils.build_signature_def(inputs, outputs, method_name )

使用SignatureDef方法,构建signature

 

tf.saved_model.signature_def_utils.build_signature_def(inputs, outputs, ‘test_sig_name‘)

 

29. tf.placeholder(dtype,shape=None,name=None)

用于构建graph的时候在模型中的占位,在执行session的时候再赋具体的值

 

30. tf.get_variable(name,shape,dtype,initializer,trainable)

此函数用于定义图变量。获取已经存在的变量,如果不存在,就新建一个

 

tf.get_variable(name=‘var1‘,shape=[1],initializer=None,dtype=tf.float32)

 

31. tf.Variable(initial_value,optional_name)

此函数用于定义图变量,生成一个初始值为initial_value的变量。

 

tf.Variable(tf.random_normal(shape[4,3],mean=0,stddev=1),name=‘v1‘)

 

.contrib.layers.xavier_initialize(uniform=True,seed=None,dtype=tf.float32 )

该函数返回一个用于初始化权重的初始化程序 Xavier,这个初始化器是用来保持每一层的梯度大小都差不多相同。

uniform: 使用uniform或者normal分布来随机初始化;

seed: 可以认为是用来生成随机数的seed;

dtype: 只支持浮点数;

 

tf.contrib.layers.xavier_initializer(uniform=False,dtype=tf.float32)

 

33. tf.constant_initializer()

初始化为常数,这个非常有用,通常偏置项就是用它初始化的

 

tf.constant_initializer(0.0)

 

34. tf.concat(values,axis,name=‘concat‘)

连接两个矩阵的操作,axis必须是数,表明在哪一维上连接

 

t1 = [[1, 2, 3], [4, 5, 6]]  #这是一个2*3的矩阵t2 = [[7, 8, 9], [10, 11, 12]]  #2*3tf.concat([t1, t2], 0) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]tf.concat([t1, t2], 1) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]

 

35. tf.nn.embedding_lookup

选取一个张量里面索引对应的元素,即按照ids顺序返回params中的第ids行。换而言之,从id(索引)找到对应的One-hot encoding,然后非零节点的weight就直接对应了输出节点的值(注意这里没有activation function),也就是对应的embedding向量

 

tf.nn.embedding_lookup(embedding, input_ids)

 

.gather(params, indices, validate_indices=None, name=None, axis=0)

按照指定的索引集合从axis中抽取子集,适合抽取不连续区域的子集

 

input = [[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]],[[5, 5, 5], [6, 6, 6]]]tf.gather(input, [0, 1], axis=0) = [[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]]]tf.gather(input, [0, 1], axis=1) = [[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]],[[5, 5, 5], [6, 6, 6]]]tf.gather(input, [0, 1], axis=2) = [[[1, 1], [2, 2]],[[3, 3], [4, 4]],[[5, 5], [6, 6]]]

 

37. tf.slice(input_, begin, size, name=None)

按照指定的下标范围抽取连续区域的子集

同tf.gather

 

38. tf.reshape(tensor,shape,name=None)

将tensor变换为参数shape形式,shape若有-1标识缺省值

 

tf.reshape(t, [2,2,3]),tfreshape(t,[-1,4,3])

 

39. tf.tile( input, multiples,  name=None )

用于在同一维度上的复制

 

tf.tile(input, [2,2])

 

40. tf.layers.dense(

    inputs,

    units,

    activation=None,

    use_bias=True,

    kernel_initializer=None,

    bias_initializer=tf.zeros_initializer(),

    kernel_regularizer=None,

    bias_regularizer=None,

    activity_regularizer=None,

    kernel_constraint=None,

    bias_constraint=None,

    trainable=True,

    name=None,

    reuse=None

)

添加全连接层

inputs:输入该网络层的数据

units:输出的维度大小,改变inputs的最后一维

activation:激活函数,即神经网络的非线性变化

use_bias:使用bias为True(默认使用),不用bias改成False即可,是否使用偏置项

kernel_initializer: 卷积核的初始化器

bias_initializer : 偏置项的初始化器,默认初始化为0

kernel_regularizer: 卷积核的正则化,可选

bias_regularizer: 偏置项的正则化,可选

activity_regularizer: 输出的正则化函数

trainable: 表明该层的参数是否参与训练。如果为真则变量加入到图集合中

 

tf.layers.dense(inputs=pool3, units=1024, activation=tf.nn.relu)

 

41. tf.sequence_mask(lengths, maxlen=None, dtype=tf.bool, name=None)

返回一个表示每个单元的前N个位置的mask张量

lengths:整数张量,其所有值小于等于maxlen;

maxlen:标量整数张量,返回张量的最后维度的大小;默认值是lengths中的最大值;

dtype:结果张量的输出类型;

name:操作的名字;

 

tf.sequence_mask([1, 3, 2], 5) => # [[True, False, False, False, False], #  [True, True, True, False, False], #  [True, True, False, False, False]]

 

42. tf.expand_dims(input, axis=None, name=None, dim=None)

在第axis位置增加一个维度

 

43. tf.ones_like( tensor, dtype=None, name=None, optimize=True )

给定一个张量(tensor),此操作返回与所有元素设置为1的张量相同的类型和形状的张量

 

44. tf.where(condition, x=None, y=None, name=None)

返回值是对应元素,condition中元素为True的元素替换为x中的元素,为False的元素替换为y中对应元素

 

 

x=[[1,2,3],[4,5,6]]y=[[7,8,9],[10,11,12]]condition=[[True,False,False,             [False,True,True]]tf.where(condition,x,y)=[[ 1,8,9],[10,5,6]]

 

45. tf.nn.softmax(logits, axis=None, name=None, dim=None)

通过Softmax回归,将logistic的预测二分类的概率的问题推广到了n分类的概率的问题

 

tf.nn.softmax(x)

 

.matmul(a,b,transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None)

将矩阵a乘以矩阵b,生成a * b

a: 一个类型为 float16, float32, float64, int32, complex64, complex128 且张量秩 > 1 的张量。

b: 一个类型跟张量a相同的张量。

transpose_a: 如果为真, a则在进行乘法计算前进行转置。

transpose_b: 如果为真, b则在进行乘法计算前进行转置。

adjoint_a: 如果为真, a则在进行乘法计算前进行共轭和转置。

adjoint_b: 如果为真, b则在进行乘法计算前进行共轭和转置。

a_is_sparse: 如果为真, a会被处理为稀疏矩阵。

b_is_sparse: 如果为真, b会被处理为稀疏矩阵。

 

47. tf.multiply(x, y, name=None)

两个矩阵中对应元素各自相乘,注意:两个相乘的数必须有相同的数据类型,不然就会报错

 

48. tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

input_tensor: 输入的待降维的tensor;

axis: 指定的轴,如果不指定,则计算所有元素的均值;

keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;

name: 操作的名称;

reduction_indices:在以前版本中用来指定轴,已弃用;

 

49. tf.reduce_sum(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

input_tensor: 输入的待降维的tensor;

axis: 指定的轴,如果不指定,则计算所有元素的和;

keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;

name: 操作的名称;

reduction_indices:在以前版本中用来指定轴,已弃用;

 

50. tf.reduce_max(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

input_tensor: 输入的待降维的tensor;

axis: 指定的轴,如果不指定,则计算所有元素的最大值;

keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;

name: 操作的名称;

reduction_indices:在以前版本中用来指定轴,已弃用;

 

51. tf.reduce_min(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

input_tensor: 输入的待降维的tensor;

axis: 指定的轴,如果不指定,则计算所有元素的最小值;

keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;

name: 操作的名称;

reduction_indices:在以前版本中用来指定轴,已弃用;

 

52. tf.reduce_all(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

input_tensor: 输入的待降维的tensor;

axis: 指定的轴,如果不指定,则计算所有元素的逻辑和(and运算);

keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;

name: 操作的名称;

reduction_indices:在以前版本中用来指定轴,已弃用;

 

53. tf.reduce_any(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)

input_tensor: 输入的待降维的tensor;

axis: 指定的轴,如果不指定,则计算所有元素的逻辑或(or运算);

keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;

name: 操作的名称;

reduction_indices:在以前版本中用来指定轴,已弃用;

 

54. tf.argmax(input, axis=None, name=None, dimension=None)

返回的是vector中的最大值的索引号

input: 为一个张量

axis: 表示选取的坐标轴,0是纵列 1是横列

name: 该操作取名

 

x = tf.constant([[0, 2, 1], [2, 1, 3]])sess.run(tf.argmax(x, 0))=[1 0 1]sess.run(tf.argmax(x, 1))=[1 2]

 

55. tf.argmin(input, axis=None, name=None, dimension=None)

返回的是vector中的最小值的索引号

input: 为一个张量

axis: 表示选取的坐标轴,0是纵列 1是横列

name: 该操作取名

 

x = tf.constant([[0, 2, 1], [2, 1, 3]])sess.run(tf.argmax(x, 0))=[0 1 0]sess.run(tf.argmax(x, 1))=[0 1]

 

56. tf.run(fetches, feed_dict=None, options=None, run_metadata=None)

不是计算了整个图,只是计算了与想要fetch 的值相关的部分, feed_dict参数的作用是替换图中的某个tensor的值

 

57. tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

已弃用,使用tf.nn.softmax_cross_entropy_with_logits_v2(logits, labels, name=None)替代

 

.nn.softmax_cross_entropy_with_logits_v2(logits,labels,name=None)

logits: 神经网络最后一层的输出,如果有batch的话,它的大小就是[batchsize,num_classes],单样本的话,大小就是num_classes;

labels: 实际的标签,大小同上

 

59. tf.cast( x, dtype, name=None)

将x的数据格式转化成dtype

 

.estimator.inputs.numpy_input_fn(x,y=None,batch_size=128,num_epochs=1, shuffle=None, queue_capacity=1000, num_threads=1)

返回将numpy数组的dict输入到模型中的输入函数,输出基于dict的“features”和“targets”

numpy数组

 

61. tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

第一个参数input:指需要做卷积的输入图像(Tensor),具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一

第二个参数filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维

第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4

第四个参数padding:string类型的量,只能是"SAME","VALID"其中之一,SAME表示卷积核可以停留在图像边缘,VALID不可以

第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true

结果返回一个Tensor,这个输出,就是我们常说的feature map,shape仍然是[batch, height, width, channels]这种形式

 

62. tf.nn.bias_add(value,bias,name=None)

将偏差项bias加入value中,bias必须是一维向量,values可以是多维向量

 

63. tf.nn.relu(features, name = None)

计算激活函数 relu,即 max(features, 0)。即将矩阵中每行的非最大值置0

 

64. tf.nn.max_pool(value, size, strides, padding, name=None)

value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape

size:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1

strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]

padding:和卷积类似,可以取‘VALID‘ 或者‘SAME‘

返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式

 

65. tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None,name=None)

x:指输入

keep_prob: 设置神经元被选中的概率,在初始化时keep_prob是一个占位符,  keep_prob = tf.placeholder(tf.float32) 。tensorflow在run时设置keep_prob具体的值,例如keep_prob: 0.5

name:指定该操作的名字

 

66. tf.train.GradientDescentOptimizer(learning_rate)

使用梯度下降算法的Optimizer

 

67. tf.train.AdadeltaOptimizer(learning_rate)

使用Adadelta算法的Optimizer

 

68. tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

shape: 输出张量的形状,必选

mean: 正态分布的均值,默认为0

stddev: 正态分布的标准差,默认为1.0

dtype: 输出的类型,默认为tf.float32

seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样

name: 操作的名称

 

69. tf.unstack(value, num=None, axis=0, name=‘unstack‘)

以指定的轴axis,将一个维度为R的张量数组转变成一个维度为R-1的张量。

value: 一个将要被降维的维度大于0的张量。

num: 整数。指定的维度axis的长度。如果设置为None(默认值),将自动求值。

axis: 整数.以轴axis指定的维度来转变 默认是第一个维度即axis=0。支持负数。取值范围为[-R, R)

name: 这个操作的名字(可选)

 

.nn.rnn_cell.BasicLSTMCell(n_hidden,forget_bias=1.0,state_is_tuple=True)

n_hidden表示神经元的个数;

forget_bias就是LSTM们的忘记系数,如果等于1,就是不会忘记任何信息。如果等于0,就都忘记;

state_is_tuple默认就是True,官方建议用True,就是表示返回的状态用一个元祖表示;

 

71. tf.contrib.rnn.static_rnn(step,batch,input,dtype)

使用链式cells实现一个按时间轴展开的RNN

输入:[步长,batch,input]

输出:[n_steps,batch,n_hidden]

 

72. tf.nn.dynamic_rnn(step,batch,input,dtype)

与static_rnn不同的是,可以让不同迭代传入的batch可以是长度不同数据,但同一次迭代一个batch内部所有数据长度仍然是固定的

输入:[batch,步长,input]

输出:[batch,n_steps,n_hidden]

原文:https://www.cnblogs.com/xiaowa/p/13347353.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐