admin管理员组文章数量:1634500
前段时间训练了mnist手写数字识别的模型,学习后将其移植到Android端
我是参考的大佬https://puke3615.github.io/2017/08/02/Run-Mnist-On-Android/,https://github/wangtianrui/TFonAndroid的源码,有需要的的朋友可以去下载,这里是对他写的代码的分析和我自己的理解
注解ButterKnife学习:https://www.jianshu/p/952c6f5e8157
implementation 'com.jakewharton:butterknife:8.8.1'
手机上效果为:
移植到Android时要添加依赖文件:libandroid_tensorflow_inference_java.jar,和编译后的TensoFlow的so库,libtensorflow_inference.so,将其添加在lib文件夹中:
接下来将训练好的pb模型放入assets文件夹中
在build.gradle文件中添加:这个可以支持在手机中调试
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
这里分享一下运行程序时遇到的坑:
出现了问题“Android-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64”,使用模拟器不能运行,因为之前添加了支持tensorflow的so库和jar包,后来我在build文件中添加
multiDexEnabled true
ndk {
abiFilters "armeabi-v7a"
}
也还是没有用,后来看到大佬的代码仿佛才明白了一些东西。。。
在build中增加:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
下面是实现过程:
定义mnist分类器:
private final String MODEL_PATH = "file:///android_asset/mnist.pb";//加载模型
public static final String INPUT_NAME = "input";//对应训练模型占位符x-input
public static final String KEEP_PROB_NAME = "keep_prob";
public static final String OUTPUT_NAME = "output";//训练模型时的占位符y_
//注意训练模型时一定要对值和标签设置name值,导入Android后要喂数据
//tensorflow依赖文件的类
private TensorFlowInferenceInterface inference;
//图片像素28*28
private final int width = 28;
private final int heifht = 28;
private float[] inputs = new float[width * heifht];
private int[] INPUT_SHAPE = new int[]{
1, width * heifht};
//AssetManager :提供低级别的访问应用资源的API
//不同模型框架,训练模型输入的占位符不同,一定要一一对应;
//训练的数据集一定要对齐,resize与采用模型框架图像的大小一致,Android端调用接口,输入参数一定要和训练图像一致,否则会出现分类错误。
public MnistClassifier(AssetManager assetManager) {
this.inference = new TensorFlowInferenceInterface(assetManager, MODEL_PATH);//传入模型的路径
//模型使用阶段, 不需要进行dropout处理, 所以keep_prob直接为1.0
//dropout层:keep_prob训练时为0.5,测试时为1
inference.feed(KEEP_PROB_NAME, new float[]{
1.0f}, 1);
}
public float
本文标签: 数字tensorflowandroid
版权声明:本文标题:基于tensorflow实现Android手写数字识别 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729187179a1189148.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论