Tensorflow用自己的数据集训练模型

Tensorflow slim

最近在做这个迁移学习,看了一本书,叫《21个项目玩转深度学习》里面的第三章介绍如何用自己的数据集去训练自己的深度模型,当然了 这本书的python版本好像是2.x,用现在的3.会有一些bug,不过去网上都可以解决,在这里我搜到的第三章解决问题的链接(http://www.pianshen.com/article/500471432/)基本都可以解决按照这个连接去解决,环境的问题自己去配置好就行。我的python版本是3.6.7,tensorflow是1.13.1。
根据书上的学习,首先是制作满足训练的数据集,自己可以搜集,然后生成tfrecord文件,会生成如图文件:
Tensorflow用自己的数据集训练模型_第1张图片
其中生成的label文件是数据标签的一个索引,比如第一类是汽车car,文件的第一个标签就是car,以此类推。
接下来是训练这个按照书中的指令训练就可以,区分是在于是否在训练的时候加上trainable_scopes=…,加上这个指令的话会按照设定的范围进行微调,不加的话对所有模型中的参数进行训练。加上的话训练会快一些,不加的话训练会慢一些。本人试过,不加的话效果好一些,就是费点时间,毕竟重新全训练要点时间。我用的是InceptionV3这个预训练模型,在这里你可以下载你想要的预训练模型(https://github.com/tensorflow/models/tree/master/research/slim)
Tensorflow用自己的数据集训练模型_第2张图片
训练命令:

python train_image_classifier.py --train_dir=satellite/train_dir --dataset_name=satellite --dataset_split_name=train --dataset_dir=satellite/data --model_name=inception_v3 --checkpoint_path=satellite/pretrained/inception_v3.ckpt --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits --max_number_of_steps=100000 --batch_size=32  --learning_rate=0.001 --learning_rate_decay_type=fixed --save_interval_secs=300 --save_summaries_secs=2 --log_every_n_steps=10  --optimizer=rmsprop  --weight_decay=0.00004

参数什么的可以自己去调,最好用GPU去训练模型,比较快,省时间做其他事,没有的话可以想象办法,网上也有白嫖的方法。
接下俩就是验证准确率,按照书上的准确率很低,自己通过调参和数据处理后我的准确率还行,
Tensorflow用自己的数据集训练模型_第3张图片
我做了十个类别的分类,准确率可以了。
接下来是导出模型,然后拿自己的图像数据去识别看是什么效果。
这些按照书上一步一步做就可以了。
我训练了InceptinV3、InceptionV4两个模型,效果V4比V3好,在训练V4的时候,这里改为:

checkpoint_exclude_scopes=InceptionV4/Logits,InceptionV3/AuxLogits/Aux_logits --

在训练resnet_v1_50这个模型的时候这里改为:(我暂时改的可以跑通,还没做完去验证效果)

checkpoint_exclude_scopes=resnet_v1_50/Predictions/Reshape_1 --

整体来说训练这个还是可以的,希望大家可以参考参考,这本书的电子版:
链接:https://pan.baidu.com/s/1RZ9PQO1SefgAmcUfX1y4TQ
提取码:7qm8

你可能感兴趣的:(tensorflow,深度学习,机器学习,神经网络)