tensorflow中一些常用的函数

1、输入数据占位符
1 X = tf.placeholder("float", [None, 64, 64, 1])

2、产生正态分布

1 X = tf.placeholder("float", [None, 64, 64, 1])

参数说明:

  1. shape表示生成张量的维度
  2. mean是均值
  3. stddev是标准差

说明:这个函数产生正太分布,均值和标准差自己设定。

这是一个截断的产生正太分布的函数,就是说产生正太分布的值如果与均值的差值大于两倍的标准差,那就重新生成。和一般的正太分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。

3、指数衰减学习率

1 tf.train.exponential_decay(
2     learning_rate,
3     global_step,
4     decay_steps,
5     decay_rate,
6     staircase=False,
7     name=None
8 )

4、作用域函数

1 tf.name_scope()和tf.variable_scope()

tf.name_scope()和tf.variable_scope()是两个作用域

一般和变量创建和调用函数搭配使用tf.variable()和tf.get_variable()

常见的用途:

  1. 变量共享
  2. Tensorboard画流图时为了可视化封装变量

tf.Variable()的话每次都会新建变量

tf.get_variable(),它会去搜索变量名,有就直接用,没有再新建

5、在tensor的某一维度求值的函数

1 # 求最大值
2 tf.reduce_max(input_tensor, reduction_indices=None, keep_dims=False, name=None)
3 
4 # 求平均值
5 tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)

参数说明:

  1. input_tensor:待求值的tensor。
  2. reduction_indices:在哪一维上求解。
  3. 参数(3)(4)可忽略。

6、tensorflow有效控制GPU资源的占用?

1 config = tf.ConfigProto()
2 config.gpu_options.allow_growth = True

注意:使用allow_growth option,刚一开始分配少量的GPU容量,然后按需慢慢的增加,由于不会释放内存,所以会导致碎片。

7、tensorflow如何保存模型和恢复模型?

7.1 保存模型

将训练好的模型保存起来,以便以后进行验证和测试。tensorflow里面提供了模型保存的是tf.train.Saver()模块。模型保存,首先要创建一个Saver对象。

1 saver=tf.train.Saver()

在创建这个对象的时候,有一个参数我们经常会用到,就是max_to_keep参数,这个参数是用来设置保存模型的个数,默认为5,即保存最近的5个模型。

如果你想没训练一代(epoch)就像保存一次模型,则可以使用max_to_keep设置为None或者0。

比如:

1 saver=tf.train.Saver(max_to_keep=0)

当然,如果你只想保存最后一代模型,则只需要将max_to_keep设置为1即可,即:

1 saver=tf.train.Saver(max_to_keep=1)

创建完saver对象后,就可以保存训练好的模型了,如:

1 saver.save(sess,'ckpt/mnist.ckpt',global_step=step)

第二个参数是设定保存的路径和名字,第三个参数将训练的次数作为后缀加入到名字中。

解释如下:

saver.save(sess, 'my-model', global_step=0) ==> filename: 'my-model-0'

...

saver.save(sess, 'my-model', global_step=1000) ==> filename: 'my-model-1000'

7.2 恢复模型

模型恢复用的是restore()函数,它需要两个参数restore(sess, save_path),save_path指的是保存的模型路径。

我们可以使用tf.train.latest_checkpoint()来自动获取最后一次保存的模型。

1 model_file=tf.train.latest_checkpoint('ckpt/')
2 
3 saver.restore(sess,model_file)

8、卷积操作

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

参数说明:

  1. input: A 4-D Tensor。需要计算卷积的图像,其中shape是[batch, height, width, channels]。Tensor shape可以由data_format设定。Type必是"half","float32","float64"之一。
  2. filter: A 4-D Tensor。卷积核。Type和input相同。Shape是[卷积核高度,卷积核宽度, 图像通道数, 卷积核个数]。
  3. strides: 1-D Tensor of length 4。步长。Shape和input相同,一般batch和channels恒定为1,即[1, height, weight, 1]
  4. padding: 卷积方式。可选方法有"SAME"、"VALID"。其中,VALID方式以(1,1)作为卷积的左上角起始点。SAME则以(1,1)作为卷积的中心起始点。即,SAME方法得到的卷积矩阵要大于VALID。
  5. use_cudnn_on_gpu:是否使用GPU加速。默认为True。
  6. data_format:数据格式,支持的格式有"NHWC"和"NCHW"。其中的区别主要是channels参数的位置。一般使用默认即可。
  7. name:用以指定该操作的name。在TensorBoard展示中较为有用。

返回一个Tensor,类型不变。

9、最大池化操作

1 tf.nn.max_pool(value, ksize, strides, padding, name=None)

参数说明:

  1. Value:需要池化的输入,通常是feature map,依然是[batch, height, width, channels]这样的shape
  2. Ksize:池化窗口的大小,取一个4维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以第一个和最后一个都设为。
  3. Strides:和卷积类似,表示窗口在每一个维度上滑动的步长,一般是[1, height, weight, 1]
  4. Padding:和卷积类型,可以取'VALID'或者'SAME'。

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