前言
一个偶然的因素,发现了同一个网络结构,自己训练出来的ckpt文件中meta文件的有两种大小规格。仔细查找后,发现是所用的python环境不一样(也有可能是tensorflow版本的影响)。同时试了一下两个python版本的差别。
环境配置
系统 | Ubuntu 16.04 |
显卡 | 1080Ti |
cuda | cuda8+cudnn6 |
python2 | python2.7.3+tensorflow-gpu 1.2.0 |
python3 | python3.5.2+tensorflow-gpu 1.8.0 |
网络结构 | inception-resnet-V1 |
batch_size(train) | 128 |
batch_size(test) | 128 |
训练结果
在不改变网络结构的前提下,只是改变python环境,结果如下表所示:
python版本 | data文件 | meta文件 | 训练速度 | 测试结果 | 其他问题 |
python2.7 | 273.6M | 176.4M | 132s/250step | 95.96% | 训练后的cpkt模型可以接着被python3.5接着训练 |
python3.5 | 273.6M | 67.3M | 108s/250step | 96.02% | 训练后的cpkt模型不可以接着被python2.7接着训练 |
关于上表解释一下:
meta文件:在用python2.7与python3.5训练出来的模型中,meta文件的大小不一样!!用tensorboard打开的图是一样的。这可 能是里面的编码不一样了?
训练速度:网络结构没有修改的情况下,batch_size都是128,每250步打印一次间隔的时间。稳定后取的值,python3.5的训练速度会快很多;
测试结果:测试的时候也是用128每个批次进行测试,一共2800+张测试图片。初步猜测会不是是两个版本的计算方式不同?一个是计算总体的平均值,一个是计算批次的平均值?
其他:无论用python3.5或者是python2.7训练的结果,测试的时候都可以用python2.7或者python3.5测试。
测试结果
昨天无聊玩了一下训练的过程。今天心血来潮,玩了一个测试的过程。
测试过程如下:
1.事先保存了由python2.7训练出的模型,然后切换到pyhon3.5继续训练10步保存成新的模型;
2.模型是由检测目标后,然后再投入到第二个模型中分类。所以会分别再python2和python3的环境中检测两部分所需的时间;
3.每次测试用五张图片轮流测试,得出每张图片在每个过程所需的时间,再求均值。
结果如下表:
python2.7环境下测试 | python3.5环境下测试 | ||||
2.7训练出的模型 | 3.5训练出的模型 | 2.7训练出的模型 | 3.5训练出的模型 | ||
检测目标所需时间 | 0.45/0.44/0.44/0.43/0.51 | 0.43/0.44/0.44/0.44/0.50 | 1.00/1.01/0.99/1.01/1.05 | 0.57/0.65/0.60/0.60/0.64 | |
分类网络所需时间 | 5.7/4.84/4.82/4.79/4.81 | 4.80/4.78/4.80/4.80/4.78 | 7.87/7.84/7.85/7.89/7.87 | 4.6/4.43/4.86/4.89/4.52 | |
均值 | 0.454+4.992=5.446s | 0.45+4.792=5.242s | 1.021+7.864=8.885s | 0.612+4.66=5.272s |
从上图看出,如果用2.7训练的模型,用3.5测试,速度会下降很多!
当然,也有可能是因为tensorflow版本引起的以上的问题,但是懒得进行再次的尝试测试了。。。