参考链接1:https://www.jianshu.com/p/f094040a14c5 参考链接2:https://www.jianshu.com/p/613c3b08faea 参考链接3:https://blog.csdn.net/qq_16564093/article/details/78996563
迁移学习的定义:在 ImageNet 已经得到一个预训练好的 ConvNet 网络,删除网络的最后一个全连接层,然后将 ConvNet 网络的剩余部分作为新数据集的特征提取层。一旦你提取了所有图像的特征,就可以开始训练新数据集分类器。
微调:更换并重新训练 ConvNet 的网络层,还可以通过反向传播算法对预训练网络的权重进行微调。
Retrain a model ( pb文件 ):是利用基于ImageNet图像训练的Inception_v3模型所导出的pb文件,更改最后的softmax layer为自己需要的分类器,然后对这一更改的softmax layer进行训练。除开最后一层,其他层的参数全部固化,无法更新。因此,在实际的Retrain中,往往先将数据集(包含训练集、验证集与测试集)中的所有图片导入到Inception_v3模型中,获取最后一层的输入,或者说是倒数第二层的输出,定义为Bottlenecks。然后直接使用Bottlenecks对最后更改的softmax layer进行训练,将大幅度提升训练速度。
Fine-tune a model ( ckpb文件 ):是利用基于ImageNet图像训练的Inception_v3模型所导出的ckpt文件,在训练过程中,整个网络的参数都可以随之修改,不仅仅局限于被替换掉的softmax layer。
保存的是图模型的计算流程图,包括图中的常量,但不保存变量,可通过以下两个方法获取:
(1):tf.train.write_graph(sess.graph_def,’’,‘graph.pb’,as_text=False) #直接保存图模型,但没有图中变量的值
(2):graph = convert_variables_to_constants(sess, sess.graph_def, [“output_image”])
tf.train.write_graph(graph, '.', 'graph.pb', as_text=False)#这样通过将模型里面的所有变量都变为常量,那么就可以直接使用.pb文件做成接口,无需.ckpt文件再次导入变量的值.
保存的是图模型中的变量的值,要使用.ckpt文件的话,要重构图的结构和初始化图中变量. 可通过以下方式获取:
saver=tf.train.Saver() saver.save(sess,“model.ckpt”)
Bottlenecks (Layers)瓶颈层 : Bottlenecks (Layers) 瓶颈层为最后的输出层前面一层,即整个模型的倒数第二层。 Bottlenecks (Layers) 将产生有效的数据供,给最后的 决策层/分类层 做出最后的分类预测。
Tensorflow里面的优化器 : 参考链接:https://blog.csdn.net/limiyudianzi/article/details/84960074 参考连接:https://blog.csdn.net/perom/article/details/80540470
Tf.train.AdadeltaOptimizerTf.train.AdagradDAOptimizerTf.train.AdagradOptimizerTf.train.AdagradOptimizerTf.train.AdamOptimizerTf.train.FtrlOptimizerTf.train.GradientDescentOptimizerTf.train.MomentumOptimizerTf.train.ProximalAdagradOptimizerTf.train.ProximalGradientDescentOptimizerTf.train.RMSPropOptimizerTf.train.SyncReplicasOptimizer 其中,三种常用优化器为 :tf.train.AdamOptimizer( learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name=‘Adam’) 实现 Adam优化算法( Adam 这个名字来源于 adaptive moment estimation,自适应矩估计。) learning_rate: (学习率)张量或者浮点数 beta1: 浮点数或者常量张量 ,表示 The exponential decay rate for the 1st moment estimates. beta2: 浮点数或者常量张量 ,表示 The exponential decay rate for the 2nd moment estimates. epsilon: A small constant for numerical stability. This epsilon is "epsilon hat" in the Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm 1 of the paper. use_locking: 为True时锁定更新 name: 梯度下降名称,默认为 "Adam". tf.train.GradientDescentOptimizer( learning_rate, use_locking=False, name=‘GradientDescent’) 主要实现的是 梯度下降算法 learning_rate: (学习率)张量或者浮点数 use_locking: 为True时锁定更新 name: 梯度下降名称,默认为"GradientDescent". tf.train.MomentumOptimizer( learning_rate, momentum, use_locking=False, name=‘Momentum’, use_nesterov=False) 实现 动量梯度下降算法 learning_rate: (学习率)张量或者浮点数 momentum: (动量)张量或者浮点数 use_locking: 为True时锁定更新 name: 梯度下降名称,默认为 "Momentum". use_nesterov: 为True时,使用 Nesterov Momentum.