深度学习的小结

    xiaoxiao2025-06-13  64

    参考链接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。

    .pb文件

    保存的是图模型的计算流程图,包括图中的常量,但不保存变量,可通过以下两个方法获取:

    (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文件再次导入变量的值.

    读取pb文件里面的tensor名字

    # -*- coding: utf-8 -*- import tensorflow as tf import os model_dir = 'model_dir' model_name = 'classify_image_graph_def.pb' # 读取并创建一个图graph来存放Google训练好的Inception_v3模型(函数) def create_graph(): with tf.gfile.FastGFile(os.path.join( model_dir, model_name), 'rb') as f: # 使用tf.GraphDef()定义一个空的Graph graph_def = tf.GraphDef() # 读取图--f.read(),并存放Google训练好的Inception_v3模型 graph_def.ParseFromString(f.read()) # 将图graph从 定义图graph_def 导入当前 默认图default_graph(见下面) tf.import_graph_def(graph_def, name='') # 创建graph create_graph() # 所有张量都有字符串名称 # 一旦知道了名称,就可以使用<name>:0(0表示有点多余的端点)获取张量 tensor_name_list = [tensor.name for tensor in tf.get_default_graph().as_graph_def().node] for tensor_name in tensor_name_list: print(tensor_name,'\n')

    .ckpt文件

    保存的是图模型中的变量的值,要使用.ckpt文件的话,要重构图的结构和初始化图中变量. 可通过以下方式获取:

    saver=tf.train.Saver() saver.save(sess,“model.ckpt”)

    读取ckpt文件里面的变量名

    from tensorflow.python import pywrap_tensorflow import os model_dir="ckpt-file" checkpoint_path = os.path.join(model_dir, "inception_v3.ckpt") reader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path) var_to_shape_map = reader.get_variable_to_shape_map() for key in var_to_shape_map: # print("tensor_name: ", key) print(key) # print(reader.get_tensor(key)) # Remove this is you want to print only variable names

    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.
    最新回复(0)