tensorflow官方教程:重新训练模型的最后一层,以应对新分类

tensorflow官方教程:重新训练模型的最后一层,以应对新分类


本文主要包含如下内容:

  • tensorflow官方教程重新训练模型的最后一层以应对新分类
    • 针对Flowers数据集重新训练Inception模型


针对Flowers数据集,重新训练Inception模型


  
  首先,在训练开始之前,你需要准备数据集,按照如下操作下载数据集.

cd ~
curl -O http://download.tensorflow.org/example_images/flower_photos.tgz
tar xzf flower_photos.tgz

  可以看到,flower_photos文件夹中有5个分类.
  用TF提供的二进制重训练工具重新训练,在tensorflow源码的根目录下执行:

sudo bazel build tensorflow/examples/image_retraining:retrain
bazel-bin/tensorflow/examples/image_retraining/retrain --image_dir ~/flower_photos

  同样的,我们可以使用python直接运行相应的py程序,运行代码如下:

python retrain.py --image_dir ~/flower_photos

  该脚本加载预训练模型Inception V3, 移除原先模型的最后一层, 然后在数据集上重新训练. 这里运用了迁移学习的思想.

  注意:脚本的第一阶段会分析所有图像并计算每张图像的Bottleneck。bottleneck是我们经常用于描述网络最后一层之前的那些实际完成分类任务的网络层的一种非正式称谓。其中,倒数第二层的输出结果对于描述区分需要分类的类别已经足够。由于每张图像在训练和计算bottleneck值的过程中重复使用多次,这极为耗时,将这些数据缓存在磁盘上有助于加速整个过程以避免重复计算。

# retrain.py代码思路:
# 首先读取网络相关参数和预训练模型,根据设置比例产生对应的训练数据、测试数据、验证数据。
# 接下来,添加新层(即最后一层),这里将之前模型的倒数第二层输出作为该层的输入,然后根据类别标签
# 构造权重与偏置;定义交叉熵损失,获得最终的输出。同时,定义公式计算准确率。
# 网络初始化之后,首先计算模型的倒数第二层输出Bottleneck,并保存到磁盘,避免重复计算从而加速网络收敛。
# 最后很正常训练网络模型一样,运用tf.Session()使模型收敛。

  训练结果可视化:一旦TensorBoard正在运行,浏览您的Web浏览器到localhost:6006以查看TensorBoard.

tensorboard --logdir /tmp/retrain_logs

  执行分类测试:至今我没有跑通,如果你过了,请评论一下

你可能感兴趣的:(Deep-Learning)