1 损失函数是在graph中定义的经过operation的tensor。
2损失函数最终要带入到优化器的minimize方法中做参数。minimize方法内部包含了compute_gradients和apply_gradients方法。
3 优化器的minimize方法返回的是operation,一般命名为train_step。
4session的run方法的参数,如果是operation,则返回值为None;如果是tensor,则返回值是ndarray。因此sessrun(train_step,feed_dict)无返回结果,只起训练作用。
5Variable定义时必须给出初始值。Variable是变量,其值保存在session中,session的global_variable_initializer实际上是初始值的保存。
人工智能在去年大火过后,Google开源了其机器学习工具Tensorflow,现在Tensorflow支持了移动端,支持的平台包括 Android , iOS , Raspberry Pi 。
但如何添加自己想识别的物体?官方给了 简单的教程 ,但是有很多坑,本文就逐步介绍如何训练自己的,然后在iOS设备上运行。
得到的文件如下:
至此就完成了训练与验证数据的准备工作。
由于内存的限制,为了更好的体验和使用效果,最好降低精度,训练inception_v1模型,但是我比较懒就直接按教程重新训练的inception_v3模型。
这里我用的是教程中的flowers_train,然后将num_classes设为9,因为我的一共9类。同时inception_trainpy记录modelckpt的 *** 作改成每10次记录一次(inception模型比较庞大,我又是单核cpu跑,运行比较耗时,如果按原来的5000次记录一次那么要等大概83小时,才会记录一次)。
设置好,编译flowers_train,运行就可以得到输出的checkpoints了。
运行截图与生成的ckpt:
为了在iOS设备上运行,必须把前面训练的参数写入graph中,生成protobuf格式的文件。
Google提供了freeze_graph,可以直接使用,将运算图和参数写成pb。
这里有4个步骤:
完成上面这些步骤过后就得到可以导入iOS运行的pb文件:
下面是我集合整个流程的一个shell脚本:
由于前面用的是inception_v3模型,所以camera这个demo中某些参数需要改变一下,首先是 const int wanted_input_width 与 const int wanted_input_height ,都要变成299,因为模型输入大小是299299的,其次是采集像素归一化方式,直接除以2550,归一化到[0,1]区间。
运行结果:
以上是第80次迭代参数的预测结果,并不是很理想。但整体流程完成了模型训练与iOS设备运行TF
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)