1、输入数据占位符
1 X = tf.placeholder("float", [None, 64, 64, 1])
2、产生正态分布
1 X = tf.placeholder("float", [None, 64, 64, 1])
参数说明:
- shape表示生成张量的维度
- mean是均值
- 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()
常见的用途:
- 变量共享
- 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)
参数说明:
- input_tensor:待求值的tensor。
- reduction_indices:在哪一维上求解。
- 参数(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)
参数说明:
- input: A 4-D Tensor。需要计算卷积的图像,其中shape是[batch, height, width, channels]。Tensor shape可以由data_format设定。Type必是"half","float32","float64"之一。
- filter: A 4-D Tensor。卷积核。Type和input相同。Shape是[卷积核高度,卷积核宽度, 图像通道数, 卷积核个数]。
- strides: 1-D Tensor of length 4。步长。Shape和input相同,一般batch和channels恒定为1,即[1, height, weight, 1]
- padding: 卷积方式。可选方法有"SAME"、"VALID"。其中,VALID方式以(1,1)作为卷积的左上角起始点。SAME则以(1,1)作为卷积的中心起始点。即,SAME方法得到的卷积矩阵要大于VALID。
- use_cudnn_on_gpu:是否使用GPU加速。默认为True。
- data_format:数据格式,支持的格式有"NHWC"和"NCHW"。其中的区别主要是channels参数的位置。一般使用默认即可。
- name:用以指定该操作的name。在TensorBoard展示中较为有用。
返回一个Tensor,类型不变。
9、最大池化操作
1 tf.nn.max_pool(value, ksize, strides, padding, name=None)
参数说明:
- Value:需要池化的输入,通常是feature map,依然是[batch, height, width, channels]这样的shape
- Ksize:池化窗口的大小,取一个4维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以第一个和最后一个都设为。
- Strides:和卷积类似,表示窗口在每一个维度上滑动的步长,一般是[1, height, weight, 1]
- Padding:和卷积类型,可以取'VALID'或者'SAME'。
返回一个Tensor,类型不变,shape依然是[batch, height, width, channels]这种形式。