Tensorflow常用函数整理

相关资料:

  • 待读:tensorflow笔记:多层LSTM代码分析
  • 极客学院 MNIST例子
  • 官方文档 函数定义

矩阵生成

  • tf.clip_by_value

  • tf.ones(shape, type=tf.float32, name=None)

  • tf.ones_like(tensor, dype=None, name=None)

  • tf.zeros([2, 3], int32)

  • tf.zeros_like(tensor, dype=None, name=None)

  • tf.fill(shape, value, name=None)

    • 创建一个形状大小为shape的tensor,其初始值为value
  • tf.constant(value, dtype=None, shape=None, name=’Const’)

    • 创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状。
      value可以是一个数,也可以是一个list。如果是一个数,那么这个常亮中所有值的按该数来赋值。
      如果是list,那么len(value)一定要小于等于shape展开后的长度。赋值时,先将value中的值逐个存入。不够的部分,则全部存入value的最后一个值。
  • tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)

    • 正太分布随机数,均值mean,标准差stddev
  • tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
    • 截断正态分布随机数,均值mean,标准差stddev,不过只保留[mean-2*stddev,mean+2*stddev]范围内的随机数
  • tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)

    • 均匀分布随机数,范围为[minval,maxval]
  • get_variable(name, shape=None, dtype=dtypes.float32, initializer=None,regularizer=None, trainable=True, collections=None,caching_device=None, partitioner=None, validate_shape=True,custom_getter=None):

    • 如果在该命名域中之前已经有名字=name的变量,则调用那个变量;如果没有,则根据输入的参数重新创建一个名字为name的变量。
      name: 这个不用说了,变量的名字
      shape: 变量的形状,[]表示一个数,[3]表示长为3的向量,[2,3]表示矩阵或者张量(tensor)
      dtype: 变量的数据格式,主要有tf.int32, tf.float32, tf.float64等等
      initializer: 初始化工具,有tf.zero_initializer, tf.ones_initializer, tf.constant_initializer, tf.random_uniform_initializer, tf.random_normal_initializer, tf.truncated_normal_initializer等

矩阵变换

  • tf.shape(Tensor)

    • 返回张量的形状。但是注意,tf.shape函数本身也是返回一个张量。而在tf中,张量是需要用sess.run(Tensor)来得到具体的值的。
  • tf.expand_dims(Tensor, axis)

    • 在原Tensor的基础上扩展一维。-1-input.dims() <= axis <= input.dims()
# 't' is a tensor of shape [2]
shape(expand_dims(t, 0)) ==> [1, 2]
shape(expand_dims(t, 1)) ==> [2, 1]
shape(expand_dims(t, -1)) ==> [2, 1]
# 't2' is a tensor of shape [2, 3, 5]
shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5]
shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5]
shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]
  • tf.concat(values, axis, name=”concat”)
    • 将张量沿着指定维数拼接起来。
t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.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]]
# tensor t3 with shape [2, 3]
# tensor t4 with shape [2, 3]
tf.shape(tf.concat([t3, t4], 0)) ==> [4, 3]
tf.shape(tf.concat([t3, t4], 1)) ==> [2, 6]
  • tf.stack(values, axis=0, name=”pack”)
    • 将一个R维张量列表沿着axis轴组合成一个R+1维的张量。
      相当于先对tensor自动沿axis扩展一维,再进行concat
# 'x' is [1, 4]
# 'y' is [2, 5]
# 'z' is [3, 6]
pack([x, y, z]) => [[1, 4], [2, 5], [3, 6]] # Pack along first dim.
pack([x, y, z], axis=1) => [[1, 2, 3], [4, 5, 6]]
  • tf.random_shuffle(value,seed=None,name=None)

    • 沿着value的第一维进行随机重新排列
  • tf.argmax(input=tensor,axis=None,name=None)

    • 找到给定的张量tensor中在指定轴axis上的最大值/最小值的位置。
  • tf.equal(x, y, name=None)
    • 判断两个tensor是否每个元素都相等。返回一个格式为bool的tensor
  • tf.cast(x, dtype, name=None)
    • 将x的数据格式转化成dtype.例如,原来x的数据格式是bool,那么将其转化成float以后,就能够将其转化成0和1的序列。反之也可以
  • tf.matmul(a, b,transpose_a=False, transpose_b=False,a_is_sparse=False, b_is_sparse=False,name=None)
    • 矩阵乘法
  • tf.reshape(tensor, shape, name=None)
    • 如果 shape=[-1], 表示要将tensor展开成一个list
      如果 shape=[a,-1,c,…] 此时b=-1,a,c,..依然>0。这表示tf会根据tensor的原尺寸,自动计算b的值。

模型保存

  • 模型保存
# 之前是各种构建模型graph的操作(矩阵相乘,sigmoid等等....)

saver = tf.train.Saver() # 生成saver

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer()) # 先对模型初始化

    # 然后将数据丢入模型进行训练blablabla

    # 训练完以后,使用saver.save 来保存
    saver.save(sess, "save_path/file_name") #file_name如果不存在的话,会自动创建
  • 模型载入
saver = tf.train.Saver()

with tf.Session() as sess:
    #参数可以进行初始化,也可不进行初始化。即使初始化了,初始化的值也会被restore的值给覆盖
    sess.run(tf.global_variables_initializer())     
    saver.restore(sess, "save_path/file_name") #会将已经保存的变量值resotre到 变量中。

tensorboard可视化

# 1. 由之前的各种运算得到此批数据的loss
loss = ..... 
# 2.使用tf.scalar_summary来收集想要显示的变量,命名为loss
tf.summary.scalar('loss',loss)  
# 3.定义一个summury op, 用来汇总由scalar_summary记录的所有变量
merged_summary_op = tf.summary.merge_all()
# 4.生成一个summary writer对象,需要指定写入路径,例如我这边就是/tmp/logdir
sess = tf.Session()
summary_writer = tf.summary.FileWriter('/tmp/logdir', sess.graph)
# 开始训练,分批喂数据
for(i in range(batch_num)):
    # 5.使用sess.run来得到merged_summary_op的返回值
    _, loss_val, summary_str = sess.run([aptimize, loss, merged_summary_op], feed_dict={})
    # 6.使用summary writer将运行中的loss值写入
    summary_writer.add_summary(summary_str,i)

卷积神经网络

  • tf.nn.conv2d
    • 这个函数的功能是:给定4维的input和filter,计算出一个2维的卷积结果。函数的定义为:
def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,data_format=None, name=None):

input:待卷积的数据。格式要求为一个张量,[batch, in_height, in_width, in_channels]. 分别表示 批次数,图像高度,宽度,输入通道数。
filter: 卷积核。格式要求为[filter_height, filter_width, in_channels, out_channels]. 分别表示 卷积核的高度,宽度,输入通道数,输出通道数。
strides :一个长为4的list. 表示每次卷积以后卷积窗口在input中滑动的距离
padding :有SAME和VALID两种选项,表示是否要保留图像边上那一圈不完全卷积的部分。如果是SAME,则保留
use_cudnn_on_gpu :是否使用cudnn加速。默认是True
- tf.nn.max_pool
- 进行最大值池化操作,而avg_pool 则进行平均值池化操作.函数的定义为:

def max_pool(value, ksize, strides, padding, data_format="NHWC", name=None):

value: 一个4D张量,格式为[batch, height, width, channels],与conv2d中input格式一样
ksize: 长为4的list,表示池化窗口的尺寸
strides: 池化窗口的滑动值,与conv2d中的一样
padding: 与conv2d中用法一样。

你可能感兴趣的:(编程语言)