迁移学习

    迁移学习InceptionV3

    手动画过AlexNet类似的模型,直接在后面加了一层[,class]的全连接层, 结果预测准确率是90%左右. 当然不是很满意. 于是乎开始各种方法寻求最准的CNN
    偶然间发现通过迁移学习大赛上高分的作品,进行迁移学习可以让我们拥有更精准的准确率,于是有了本文.
    总结:: 学会如何迁移优秀的模型来为自己所用!
    文章讲述的colab源码已经共享, 请点击下方链接查看即可.
    https://drive.google.com/file/d/1ahJtJvuHDGh4oS4lyNG0NdtqZuyns4J6/view?usp=sharing

    迁移准备

    模型选择准备

    首先当然是选择一款高效的模型,查阅了部分资料, 发现googleNet是2014年ILSVRC挑战赛获得冠军, 错误率降低到6.67%, 另一个名字也是InceptionV1, V3就是它优化后的第三代, 错误率更低
    模型下载:
    https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015.zip 并解压得到.pd文件

    执行下方代码, 可以打印出pb文件的全部节点:

    tf_model_path = '/Users/akarizo/Desktop/inception_dec_2015/tensorflow_inception_graph.pb'
    with open(tf_model_path, 'rb') as f:
        serialized = f.read()
    tf.reset_default_graph()
    original_gdef = tf.GraphDef()
    original_gdef.ParseFromString(serialized)
    ##2 可以在这里查看到全部的图信息(前提是你有转换成功)
    with tf.Graph().as_default() as g:
        tf.import_graph_def(original_gdef, name='')
        ops = g.get_operations()
        try:
            for i in range(10000):
                print('op id {} : op name: {}, op type: "{}"'.format(str(i),ops[i].name, ops[i].type))
        except:
            pass
    

    需要关注的输入层:

    和需要被修改最后一层的全连接层:

    Feb 24, 2018
    MachineLearning