【6】TensorFlow光速入门-python模型转换为tfjs模型并使用
本文地址:https://www.cnblogs.com/tujia/p/13862365.html
系列文章:
【1】TensorFlow光速入门-tensorflow开发基本流程
【2】TensorFlow光速入门-数据预处理(得到数据集)
【4】TensorFlow光速入门-保存模型及加载模型并使用
【6】TensorFlow光速入门-python模型转换为tfjs模型并使用
一、模型转换
python模型转换tfjs模型,需要用到先安装 tensorflowjs_converter 工具
pip install tensorflowjs
安装成功后,可以用python脚本或shell命令转换,下面是shell的例子:
tensorflowjs_converter /tf/saved_model/wnw /tf/saved_model_js/wnw
注:记得提前创建好 saved_model_js 目录。转换成功成,会得到 model.json 及 n个 .bin 文件,例如:group1-shard1of2.bin、group1-shard2of2.bin等等
转换命令的详细参数,请看:
tensorflowjs_converter --help
二、在浏览器中使用
先准备好模型文件及dict.txt 文件(注:dict.txt 需要自己创建,内容为图片分类,一行一个分类)

基础html元素
<input type="file" class="custom-file-input" id="file" accept="image/*" capture="camera"> <input class="form-control" id="result" readonly="readonly"> <img src="" id="pic">
引入tfjs
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.6.0/dist/tf.min.js"></script>
加载模型
const MODEL_URL = '/static/models/wnw/model.json'; let model = null;
tf.loadGraphModel(MODEL_URL).then((value)=>{
model = value;
}, (error)=>{
console.log(error);
});
侦听选择图片及图片预览
let image = document.getElementById('pic');
// 图片预览
document.getElementById('file').addEventListener('change', (ev)=>{
let reader = new FileReader();
reader.addEventListener('load', (e)=>{
image.src = e.target.result;
});
reader.readAsDataURL(ev.target.files[0]);
});
图片数据转换及预测
// 图片分类
const CLASSIFY = ['非表', '表']; // 图片处理及评估
image.addEventListener('load', ()=>{
// 图片转换成灰度张量数据
let image_tensor = tf.browser.fromPixels(image, 1);
// 三维张量转四维张量
image_tensor = tf.expandDims(image_tensor);
image_tensor = tf.cast(image_tensor, 'float32');
// console.log(image_tensor.shape);
// 图片缩放,转换为模型需要的大小
image_tensor = tf.image.resizeBilinear(image_tensor, [100, 100]);
// console.log(image_tensor.shape);
let predictions = model.predict(image_tensor);
let label = tf.argMax(predictions, 1).dataSync()[0];
result.value = CLASSIFY[label];
});
注:像【4】TensorFlow光速入门-保存模型及加载模型并使用 说的那样,加载模型,然后准备一个和训练集一样格式的数据(数据格式转换、缩放),然后预测就可以了
重点:
tf.browser.fromPixels base64格式转tensor3D格式
tf.expandDims tensor3D格式车转tensor4D格式
tf.cast 数值转换,上面例子是int32转float32
tf.image.resizeBilinear 图片缩放
model.predict 模型预测
tf.argMax(predictions, 1).dataSync()[0] 取预测结果的最大值的 key(即分类label)
其他:
官方关于tfjs的使用示例并不完善,甚至是错。各种跳转,又是 MobileNet 又是 ml5 的,其实都不需要,直接用 tf.min.js 就可以了。mobilenet 和 ml5 的用法以后再研究
下面是相当混乱的一些相关文档:
https://tensorflow.google.cn/js/tutorials/conversion/import_keras
https://tensorflow.google.cn/js/tutorials/conversion/import_saved_model
https://github.com/tensorflow/tfjs-converter/blob/master/tfjs-converter/README.md
https://github.com/tensorflow/tfjs-converter/tree/master/tfjs-converter/demo/mobilenet
https://learn.ml5js.org/#/tutorials/hello-ml5?id=demo
本文链接:https://www.cnblogs.com/tujia/p/13862365.html
完。
【6】TensorFlow光速入门-python模型转换为tfjs模型并使用的更多相关文章
- 【4】TensorFlow光速入门-保存模型及加载模型并使用
本文地址:https://www.cnblogs.com/tujia/p/13862360.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- 【0】TensorFlow光速入门-序
本文地址:https://www.cnblogs.com/tujia/p/13863181.html 序言: 对于我这么一个技术渣渣来说,想学习TensorFlow机器学习,实在是太难了: 百度&qu ...
- 【1】TensorFlow光速入门-tensorflow开发基本流程
本文地址:https://www.cnblogs.com/tujia/p/13862339.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- 【2】TensorFlow光速入门-数据预处理(得到数据集)
本文地址:https://www.cnblogs.com/tujia/p/13862351.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- 【3】TensorFlow光速入门-训练及评估
本文地址:https://www.cnblogs.com/tujia/p/13862357.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- 【5】TensorFlow光速入门-图片分类完整代码
本文地址:https://www.cnblogs.com/tujia/p/13862364.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- ER图/模型转换为关系模型
ER图中的主要成分是实体类型和联系类型,转换规则就是如何把实体类型.联系类型转换成关系模式. 1. 二元联系转换 规则1.1(实体类型的转换):将每个实体类型转换成一个关系模式,实体的属性即为关系模式 ...
- Tensorflow object detection API 搭建物体识别模型(二)
二.数据准备 1)下载图片 图片来源于ImageNet中的鲤鱼分类,下载地址:https://pan.baidu.com/s/1Ry0ywIXVInGxeHi3uu608g 提取码: wib3 在桌面 ...
- 千行代码入门Python
这个是从网上找到的一份快速入门python的极简教程,大概一千行左右,个人觉得不错,特此收藏以备后用. # _*_ coding: utf-8 _*_ """类型和运算- ...
随机推荐
- 容器云平台No.1~基于Docker及Kubernetes构建的容器云平台
开篇 最近整理笔记,不知不觉发现关于kubernetes相关的笔记已经达99篇了,索性一起总结了.算是对这两年做容器云平台的一个总结,本文是开篇,先介绍下所有用到的组件.首先来看下架构图(实在画的太丑 ...
- 滴滴开源AgileTC:敏捷测试用例管理平台
桔妹导读:AgileTC是一套敏捷的测试用例管理平台,支持测试用例管理.执行计划管理.进度计算.多人实时协同等能力,方便测试人员对用例进行管理和沉淀.产品以脑图方式编辑可快速上手,用例关联需求形成流 ...
- python中获取中位数
普通方法: 对列表进行排序,然后根据长度为奇数或者偶数的不同情况计算中位数 def huahua(x): length = len(x) print(length) x.sort() print(x) ...
- sqlserver date与datetime区别及sqlserver日期格式转换
date是SQL Server 2008新引进的数据类型.它表示一个日子,不包含时间部分,可以表示的日期范围从公元元年1月1日到9999年12月31日.只需要3个字节的存储空间.DateTime 日期 ...
- 2020HC大会上,这群人在讨论云原生…
启程 一年一度的华为全联接大会又开启了,伴随着一封来自华为全联接大会的邀请函,我来到了2020华为全联接大会的现场. 理解 今年,华为全联接大会的主题是:共 创 行 业 新 价 值!(NEW VALU ...
- NodeJS二进制合并
Node.js 批量文件合并code cnblogs @ Orcim 本 文主要介绍使用 Node 进行 ACB 序列文件(Atom CueSheet Binary,编译 AtomCueSheet ...
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介
005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介 Eclipse是一款集成开发工具--IDE. 集成开发环境(IDE,Integrated ...
- C++里的程序 GetDlgItem(IDC_EDIT_INPUTFILE) ->EnableWindow(TRUE)
转载:https://zhidao.baidu.com/question/654519209423407765.html GetDlgItem(IDC_EDIT_INPUTFILE) ->Ena ...
- JVM调优常用参数总结
GC通用参数 -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间 -XX:+UseTLAB 使用TLAB,默认打开 -XX:+PrintTLAB 打印TLAB的使用情况 -XX:T ...