Python提供了__future__模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。举例说明如下:
tf 中定义了 tf.app.flags.FLAGS ,用于接受从终端传入的命令行参数,相当于对python中的命令行参数模块optpars做了一层封装。
tf.app.flags.DEFINE_string() :定义一个用于接收 string 类型数值的变量;
tf.app.flags.DEFINE_integer() : 定义一个用于接收 int 类型数值的变量;
tf.app.flags.DEFINE_float() : 定义一个用于接收 float 类型数值的变量;
tf.app.flags.DEFINE_boolean() : 定义一个用于接收 bool 类型数值的变量;
函数带3个参数,分别是变量名称,默认值,用法描述
在训练神经网络时,当需要查看一个张量在训练过程中值的分布情况时,可通过tf.summary.histogram()将其分布情况以直方图的形式在TensorBoard直方图仪表板上显示.
tf.summary.scalar用来显示标量信息,其格式为:tf.summary.scalar(tags, values, collections=None, name=None)
例如:tf.summary.scalar('mean', mean)一般在画loss,accuary时会用到这个函数。
tf.get_variable 获取一个已经存在的变量或者创建一个新的变量
tf.multiply()两个矩阵中对应元素各自相乘
tf.add_to_collection:把变量放入一个集合,把很多变量变成一个列表
os.path.join()函数:连接两个或更多的路径名组件
1.如果各组件名首字母不包含’/’,则函数会自动加上
2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
tf.Variable() 每次调用都会产生一个新的变量,他会自动检测命名冲突并自行处理,变量名称是一个可选参数
tf.variable_scope() #in order to share variables across multiple GPU training runs 多个GPU的时候有用
tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
参数:
**input : ** 输入的要做卷积的图片,要求为一个张量,shape为 [ batch, in_height, in_weight, in_channel ],其中batch为图片的数量,in_height 为图片高度,in_weight 为图片宽度,in_channel 为图片的通道数,灰度图该值为1,彩色图为3。(也可以用其它值,但是具体含义不是很理解)
filter: 卷积核,要求也是一个张量,shape为 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 为卷积核高度,filter_weight 为卷积核宽度,in_channel 是图像通道数 ,和 input 的 in_channel 要保持一致,out_channel 是卷积核数量。
strides: 卷积时在图像每一维的步长,这是一个一维的向量,[ 1, strides, strides, 1],第一位和最后一位固定必须是1
padding: string类型,值为“SAME” 和 “VALID”,表示的是卷积的形式,是否考虑边界。"SAME"是考虑边界,不足的时候用0去填充周围,"VALID"则不考虑
use_cudnn_on_gpu: bool类型,是否使用cudnn加速,默认为true
- tf.nn.bias_add 是 tf.add 中的一个特例,tf.nn.bias_add 中 bias 一定是 1 维的张量;
- tf.nn.bias_add 中 value 最后一维长度和 bias 的长度一定得一样;
- tf.nn.bias_add 中,当 value 是 quantized type 时,bias 可以取不同的 quantized type。但什么是 quantized type?TensorFlow API 中 tf.DType 页面显示,‘tf.qint8‘、‘tf.quint8‘、‘tf.qint16‘、‘tf.quint16‘、‘tf.qint32‘类型就是Quantized type。但这些类别具体如何使用并不知晓。
LRN对局部神经元的活动创建竞争机制,使得响应比较大的值相对更大,比较小的值就会更小。提高了模型的泛化能力。这个函数很少使用,基本上被类似DROPOUT这样的方法取。
tf.sparse_to_dense 用tf.sparse_to_dense输出一个onehot标签的矩阵
tf.add_to_collection:把变量放入一个集合,把很多变量变成一个列表
tf.get_collection:从一个结合中取出全部变量,是一个列表
tf.add_n:把一个列表的东西都依次加起来
tf.train.ExponentialMovingAverage这个函数用于更新参数,就是采用滑动平均的方法更新参数。这个函数初始化需要提供一个衰减速率(decay),用于控制模型的更新速度。这个函数还会维护一个影子变量(也就是更新参数后的参数值),这个影子变量的初始值就是这个变量的初始值,影子变量值的更新方式如下:
shadow_variable = decay * shadow_variable + (1-decay) * variable
shadow_variable是影子变量,variable表示待更新的变量,也就是变量被赋予的值,decay为衰减速率。decay一般设为接近于1的数(0.99,0.999)。decay越大模型越稳定,因为decay越大,参数更新的速度就越慢,趋于稳定。
tf.train.ExponentialMovingAverage这个函数还提供了自己动更新decay的计算方式:
decay= min(decay,(1+steps)/(10+steps))
steps是迭代的次数,可以自己设定。
tf.control_dependencies(control_inputs)
此函数指定某些操作执行的依赖关系
tf.trainable_variables()可训练的变量
tf.FixedLengthRecordReader 读取固定长度字节
tf.train.batch() 按顺序读取队列中的数据
tf.train.shuffle_batch() 将队列中数据打乱后再读取出来.
把需要的全部文件打包为一个tf内部的queue类型
filename_queue = tf.train.string_input_producer(filenames)
tf.random_crop 随机裁剪
tf.image.random_flip_left_right(distorted_image) # 随机左右翻转
tf.image.random_brightness #随机改变亮度
tf.image.random_contrast #随机改变对比度
tf.image.per_image_standardization #标准化操作
tf.summary.merge_all
merge_all 可以将所有summary全部保存到磁盘,以便tensorboard显示。如果没有特殊要求,一般用这一句就可一显示训练时的各种信息了。
本文深入解析TensorFlow中关键函数的应用,如__future__模块、tf.app.flags、tf.summary.histogram、tf.Variable、tf.nn.conv2d等,涵盖命令行参数处理、神经网络训练监控、变量管理及卷积操作等内容。
357

被折叠的 条评论
为什么被折叠?



