小记

1、sess.run(tf.global_variables_initializer())  作用是初始化模型的参数,具体如下:

tf.global_variables_initializer()里面调用了global_variables()返回一个variable list,然后再调用variable_initializer() 将variable list里面每个元素的initializer属性做成op group,然后交给sess.run去执行,而且variable.initializer其实就是assign op

2、

slim.flatten

将输入扁平化但保留batch_size

3、
tf.train.slice_input_producer
是一个tensor生成器,作用是每次从一个tensor列表中按顺序或者随机抽取出一个tensor放入文件名队列。
如果num_epochs有指定,则每个元素只产生num_epochs次,否则循环产生(理论上可以无限次循环直到主动结束)
此方法目的是将文件放入文件名队列,它需要tf.train.start_queue_runners配合着使用,
此函数启动文件名队列填充的线程,如果不执行此函数,文件名队列会一直为空
4、
tf.train.shuffle_batch
参数解析:capacity是队列的长度、batch_size是每次出队的的数目
执行过程:数据入队后(补充完数据后)打乱顺序,出队batch_size元素,然后数据入队再打乱,再出队

本质:他是一种图运算,在sess.run()里面执行、通过进队的tensor,生成一个乱序队列、
、通过tf.train.start_queue_runners启动的线程,进行填充
5、
extra_update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
想要进行 bn操作,不是直接设置 bn属性就可以了,还需要收集训练过程的 bn层信息,
预测时运用这些信息的统计值进行预测,所以一般和 with tf.control_dependencies(extra_update_ops):一起用,
此函数字面意思是控制依赖关系,也就是控制计算流图,给图中某些节点指定计算顺序,
with段依赖 control ,确保 with段中的操作是在 control_inputs操作执行之后再执行的

6、

for root, sub_folder, file_list in os.walk(data_dir):
root当前遍历文件夹的根目录,当前根目录下的子目录list,当前根目录下的文件list
优先以data_dir为root,然后以data_dir的子目录为root,来进行迭代 

7、

通过tf.train.exponential_decay函数实现指数衰减学习率

代码实现:
     decayed_learning_rate=learining_rate*decay_rate^(global_step/decay_steps) 
     learning_rate为事先设定的初始学习率、decay_rate为衰减系数、decay_steps为衰减速度
     decay_steps不像global_step,他不会逐步增长是一个初始就固定的值
当函数参数staircase为True时,global_step/decay_steps则被转化为整数,则每经过decay_steps步数learining_rate就再进行一次衰减 

8、one_hot热编码

在数据处理和特征工程中,经常会遇到类型数据,如性别:"男,女",我们通常将他们转换为数值带入模型,比如:"0,1",但模型往往把它当成连续型数值进行处理,这样会违背我们设计的初衷,也会影响模型效果

热编码便是解决这个问题,其方法是使用N个状态进行编码。对m个取值的特征,经过热编码转换成m位二元特征,每次只有一个激活,比如:数字识别中0~9类型,6的热编码为:0000001000

9、

session.run()每次计算和指定的fetch值相关的部分,feed_dict主要是给当前计算提供数据,他的数据的生命周期仅限当前run方法内部

10、Saver

我们希望在训练一个模型途中以及完成之后保存模型的参数,以便接下来在之前的基础上训练或使用之前训练好的模型进行测试和预测结果,tensorfow针对这一需求提出了Saver类

Saver类提供了保存模型参数到checkpoint和从checkpoint中恢复模型参数的相关方法,checkpoint文件是一个二进制文件,它把变量名映射到对应的tensor上

11、

我们自己写反向传播算法的时候,经常需要通过验证梯度的正确性来验证反向传播算法是否正确,验证反向梯度求导正确性的原理如下:

函数f(x)在点x1处的梯度为:当h->0时,f(x1 + h) - f(x1 -h) / 2h    得到的值,即为f(x)在x1处的导数

12、

存储图片数据的数组和图片本身,他们的宽高特别容易搞混;
二维数组,第一纬是高,第二纬是宽;但是一般构造图片第一个参数传的是宽,第二个是高

13、

numpy.bincount(取的数组中最大的数字a,然后返回0~a中各个值的数量的numpy数组) 

14、

np.dot() 对于多维矩阵计算真正意义上的矩阵乘积,对于一维计算两者的内积 

15、

np.multiply()和*都是对应的元素相乘得到一个矩阵

16、

np.sort()返回的是数组从小到大的索引值,而不是排序后的数组

17、

numpy.random.randn()与rand()的区别
numpy.random.randn(d0,d1, … ,dn)    从标准正态分布中返回指定纬度的numpy数组的随机数
numpy.random.ran(d0,d1, … ,dn)        从[0, 1)中返回指定纬度的numpy数组的随机数 

18、

numpy.random.seed(n)    当我们设置相同的seed,每次生成的随机数相同,且有效次数为1次

19、

np.max和np.maximum的区别
首先比较二者的参数部分:
np.max:(a, axis=None, out=None, keepdims=False) 
求序列的最值
np.maximum:(X, Y, out=None) 
比较两个数组X和Y,X 与 Y 逐位比较取其大者

你可能感兴趣的:(深度学习)