30第九章-TensorFlow-Lite-和课件_第1页
30第九章-TensorFlow-Lite-和课件_第2页
30第九章-TensorFlow-Lite-和课件_第3页
30第九章-TensorFlow-Lite-和课件_第4页
30第九章-TensorFlow-Lite-和课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章TensorFlow

Lite

和TensorFlow.js第九章TensorFlow

Lite

和TensorFlow.jsTensorFlow

Lite转化训练好的模型为.tflite文件编写自定义操作代码TensorFlow

lite

的移动端安卓开发TensorFlow

lite

的移动端iOS开发TensorFlow.jsTensorFlow.jsJavaScript库引入TensorFlow.js

基础知识TensorFlow.js

示例

TensorFlow

Lite

TensorFlow

Lite

是TensorFlow

在移动或嵌入式设备上的轻量级应用。TensorFlow

Lite具有以下特点:(1)轻量级:允许载入训练好的模型(小二进制文件)以及模型快速初始化,启动设备端对预测数据进行推断。(2)跨平台:可以在不同的平台上运行,如支持的android和iOS。(3)快速:专为移动设备进行优化,包括大幅提升模型加载时间,支持硬件加速。

TensorFlow

Lite

TensorFlow

Lite

的体系结构,其组件包括:TensorFlow

模型(TensorFlowModel):保存在磁盘中的训练模型TensorFlow

Lite

转化器(TensorFlow

LiteConverter):将模型转换成TensorFlow

Lite

文件格式的项目(.tflite)。TensorFlow

Lite

模型文件(TensorFlow

LiteModelFile):基于FlatBuffers,适配最大速度和最小规模的模型。

TensorFlow

Lite

TensorFlow

Lite

使用步骤

TensorFlow

Lite

–转化模型为.tflite文件在桌面PC或是服务器上使用TensorFlow训练出来的模型文件,不能直接用在TensorFlow

Lite上运行,需要先转成.tflite文件。转化模型为.tflite文件有两种方法,使用离线工具转成.tflite文件和直接在代码中通过代码直接生成.lite文件。使用离线工具转成.tflite文件。

在算法训练的程序中保存图模型文件(GraphDef)和变量文件(CheckPoint)。

利用freeze_graph工具生成frozen的graphdef文件。

利用toco工具,生成最终的tflite文件。

TensorFlow

Lite

–转化模型为.tflite文件

直接在代码中通过代码直接生成.lite文件

TensorFlow

Lite

–编写自定义操作代码

如果TensorFlow

库没有需要的操作。可以采用Python编写组合的操作来满足需要。如果Python编写组合操作还满足不了需求,则使用C++创建自定义操作。用C++编写自定义操作代码包括注册新操作op,以及用C++实现步骤。注册新操作op

通过注册定义一个新的操作op的接口interface到TensorFlow

系统。定义操作op名称、输入类型与名称、输出类型与名称,以及任何需要的属性。

实现新操作op实现操作接口需要建立扩展OpKernel

的类,并重载Compute方法。Compute方法提供参数指针OpKernelContext*,可以访问输入输出张量。

TensorFlow

Lite

–移动端安卓开发利用AndroidStudio开发,Androidstudio安装从GitHub

中CloneTensorFlow:https:///tensorflow/tensorflow建造AndroidTensorflow

liteDemo打开AndroidStudio,从欢迎窗口,选择“OpenanexistingAndroidStudioproject”。从“OpenFileorProject”窗口,找到并选择clone的TensorFlow

GitHub

repo

中的tensorflow/examples/android,点击OK.如果问GradleSync,点击OK.

打开build.gradle

文件,找到GradleScripts

的nativeBuildSystem

变量,并修改为defnativeBuildSystem='none‘点击Run按钮(绿箭头)rebuild项目

TensorFlow

Lite

–移动端安卓开发另外一种方式是利用Bazel

建APK,然后利用ADB上载到你的手机上。Bazel类似于make。bazel支持各种平台,安装参考官网安装教程,如Linuxhttps://docs.bazel.build/versions/master/install-ubuntu.html。adb工具即AndroidDebugBridge(安卓调试桥)tools。它就是一个命令行窗口,用于通过电脑端与模拟器设备交互。下载sdk并解压到tensorflow根目录更新SDK安装NDK。下载并解压到tensorflow根目录;修改workspace文件连接android手机。首先安装adb:然后打开手机的开发者模式,开启USB调试,编译并安装apk

TensorFlow

Lite

–移动端iOS开发

CocoaPods是OSX和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。安装CocoaPods步骤如下:先更新gem:$sudogemupdate–system。更新gem镜像资源:$gemsources--removehttps:///$gemsources-a/,最后,终端输入:$sudogeminstallcocoapods。先建好自己的Xcode

代码的app或者demo(如examples/ios/camera)。在根目录中建文件“Podfile”,内容为:target'YourProjectName'

pod'TensorFlow-experimental'终端输入podinstall。OpenYourProjectName.xcworkspace

TensorFlow

Lite

–移动端iOS开发自带的SamplesDemo:Demo包括三个示例,simple,benchmark,和camera。切换到tensorflow

目录,下载Inceptionv1,以及提取标签和图文件到数据目录:mkdir-pgraphs

curl-ographs/inception5h.zip\

//models/inception5h.zip

如果下载不了,从https:///dc/safefile.php?filen=bad31dfd6d9b66f0ee42b798f072021c840180d1&groupid=28.218.82849.82850.82851.82852.82855.82858.82936&pid=1312630下载,拷贝到graphs目录中。unzipgraphs/inception5h.zip-dgraphs/inception5h

cpgraphs/inception5h/*tensorflow/examples/ios/benchmark/data/

cpgraphs/inception5h/*tensorflow/examples/ios/camera/data/

cpgraphs/inception5h/*tensorflow/examples/ios/simple/data/cd

tensorflow/examples/ios/simple

podinstall

opentf_simple_example.xcworkspace

#注意是.xcworkspace,不是.xcodeproj

TensorFlow.js

TensorFlow.js

是一个开源JavaScript库,用于训练和部署机器学习模型。TensorFlow.js

可用于新建模型、运行现有模型,重新训练模型。在浏览器中创建模型

TensorFlow.js

的API灵活且直观,可以使用低级的JavaScript线性代数库和高级图层API在浏览器中定义、训练和运行完整的机器学习模型。运行现有模型

TensorFlow.js

可导入现有的预先训练的模型进行推理。如果你有一个以前曾经脱机训练过的现有TensorFlow

或Keras

模型,则可以将其转换为TensorFlow.js

格式,并将其加载到浏览器中进行预测。重新调整现有模型TensorFlow.js

可用于重新训练导入的模型。使用浏览器中收集的少量数据进行离线培训。这是快速训练精确模型的一种方法。TensorFlow.js

TensorFlow.js架构。TensorFlow.js包含支持低级API(以前称为deeplearn.js)和Eager执行。TensorFlow.js提供WebGL支持。TensorFlow.js支持导入TensorFlow

SavedModels和Keras模型。TensorFlow.js--JavaScript库引入script标签引入是最为直接的方式,引入的地址为

https:///npm/@tensorflow/tfjs@latestTensorFlow.js--JavaScript库引入nodejs

引入Node.js是运行在服务端的JavaScript。Node.js

是一个基于ChromeV8

引擎的JavaScript运行环境。Node.js

是事件驱动、非阻塞式I/O的模型,故轻量、高效。Node.js

的包管理器npm,是全球最大的开源库生态系统。从官网(http:///)下载nodejs,直接点击就会自动下载安装nodejs和npm。安装TensorFlow.js

:npminstall@tensorflow/tfjs

为了在本地运行,需要安装yarn。在Nodejs环境下,通过sudo

npminstall-gyarn命令进行全局安装。然后将核心代码下载到本地,然后进入项目目录如polynomial-regression-core(即多项式回归核心)部分,最后进行yarn安装并运行。$gitclone/tensorflow/tfjs-examples.git$cd

tfjs-examples/polynomial-regression-core$yarn$yarnwatch显示类似:Serverrunningathttp://localhost:1234,并自动启动浏览器。如自动启动的浏览器不行,可以启动Chrome浏览器。TensorFlow.js--基础知识张量是Tensorflow.js中主要数据的表现形式。张量实例的构造函数就是tf.tensor

函数。低维度张量也可用标量tf.scalar(零维,数值),tf.tensor1d(一维,向量),tf.tensor2d(二维,矩阵),tf.tensor3d(三维)、tf.tensor4d(四维)表示。//3x2张量constshape=[3,2];//张量形状,3行,2列consta=tf.tensor([1.0,2.0,3.0,10.0,20.0,30.0],shape);a.print();//打印张量值//Output:[[1,2],//[3,10],//[20,30]]//张量形状也可以推断出来。constb=tf.tensor([[1.0,2.0,3.0],[10.0,20.0,30.0]]);b.print();//Output:[[1,2,3],//[10,20,30]]TensorFlow.js--基础知识变量(Variables)constinitialValues=tf.zeros([5]);//一维张量,5个0元素constbiases=tf.variable(initialValues);//初始化偏置biases.print();//output:[0,0,0,0,0]constupdatedValues=tf.tensor1d([0,1,0,1,0]);biases.assign(updatedValues);//更新偏置值biases.print();//output:[0,1,0,1,0]TensorFlow.js--基础知识操作(Operations)

张量是不可变的,但是通过操作可以操作张量返回一个新的张量。Tensorflow.js支持链式操作,如:consta=tf.tensor2d([[2.0,2.0],[2.0,2.0]]);constb=tf.tensor2d([[1.0,1.0],[1.0,1.0]]);constc=tf.tensor2d([[3.0,3.0],[3.0,3.0]]);constres=a.add(b).square().sub(c);res.print();//output[[6,6]//[6,6]]即首先得到a加b,即a.add(b),结果进行平方,即square(),然后结果再减c,即sub(c)。TensorFlow.js--基础知识TensorFlow.js

有两种方法创建模型。一种是底层直接创建,functionpredict(input){//y=a*x^2+b*x+creturntf.tidy(()=>{constx=tf.scalar(input);constax2=a.mul(x.square());constbx=b.mul(x);consty=ax2.add(bx).add(c);returny;});}//Defineconstants:y=2x^2+4x+8consta=tf.scalar(2);//标量,数值2constb=tf.scalar(4);//标量,数值4constc=tf.scalar(8);//标量,数值8//Predictoutputforinputof2constresult=predict(2);//调用predict输入参数2result.print()//输出t:24

TensorFlow.js--基础知识还有一种方法是利用高级tf.modelAPI创建,如创建tf.sequential

模型:constmodel=tf.sequential();//顺序添加神经网络层模型model.add(//添加GRU神经网络层到模型

tf.layers.gru({units:20,returnSequences:true}));model.add(//添加全连接神经网络层到模型,排在GRU后面

tf.layers.dense({units:20}));constoptimizer=tf.train.sgd(LEARNING_RATE);//优化器,随机梯度下降优化器pile({optimizer,loss:'categoricalCrossentropy'});//模型编译model.fit({x:data,y:labels});//模型训练

TensorFlow.js--基础知识当应用使用了GPU,需要释放GPU内存。释放GPU内存方法有dispose和tf.tidy。

constx=tf.tensor2d([[0.0,2.0],[4.0,6.0]]);consty=tf.tensor2d([[1.0,2.0],[3.0,5.0]]);constz_add=x.add(y);x.dispose();y.dispose();

z_add.dispose();当有很多Tensor操作时,使用dispose会写很多行代码。tf.tidy

的作用是清理了tf.tidy作用域内创建的张量,但是它不会清理其最终的返回值。所以tf.tidy可以释放GPU内存,但不会计算结果。constaverage=tf.tidy(()=>{consty=tf.tensor1d([1.0,2.0,3.0,4.0,5.0,6.0]);constz=tf.ones([6]);returny.sub(z).square().mean();});

tf.keep的作用是在tf.tidy()内部保留张量不被清除。tf.memory

返回当前程序的内存信息。TensorFlow.js--基础知识

保存模型使用model.save函数。使用方法如以下代码所示:constsaveResult=awaitmodel.save('localstorage://my-model-1');

TensorFlow.js--基础知识

装载模型使用tf.Model函数。

TensorFlow.js--基础知识导入tensorflow

图模型到Tensorflow.jstensorflow

图模型(一般是Python环境训练)可以保存为以下格式:TensorFlow

SavedModel,FrozenModel,SessionBundle,TensorflowHubmodule。这些格式都可以采用TensorFlow.js转换工具(源码在https:///tensorflow/tfjs-converter)转换为Tensorflow.js可以使用的格式。TensorFlow.js转换工具安装方法为在Python环境下pipinstalltensorflowjsTensorFlow.js--基础知识转换Python训练好的模型为TensorFlow.jsWeb格式

SavedModel

示例:tensorflowjs_converter\--input_format=tf_saved_model\--output_node_names='MobilenetV1/Predictions/Reshape_1'\--saved_model_tags=serve\/mobilenet/saved_model\/mobilenet/web_modelFrozenmodel示例:tensorflowjs_converter\--input_format=tf_frozen_model\--output_node_names='MobilenetV1/Predictions/Reshape_1'\/mobilenet/frozen_model.pb\/mobilenet/web_modelSessionbundlemodel示例:tensorflowjs_converter\--input_format=tf_session_bundle\--output_node_names='MobilenetV1/Predictions/Reshape_1'\/mobilenet/session_bundle\/mobilenet/web_modelTensorflowHubmodule示例:tensorflowjs_converter\--input_format=tf_hub\'https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/1'\/mobilenet/web_modelTensorFlow.js--基础知识导入转换后的模型,示例代码如下:constGOOGLE_CLOUD_STORAGE_DIR='/tfjs-models/savedmodel/';constMODEL_URL='mobilenet_v2_1.0_224/tensorflowjs_model.pb';constWEIGHTS_URL='mobilenet_v2_1.0_224/weights_manifest.json';constmodel=awaittf.loadFrozenModel(GOOGLE_CLOUD_STORAGE_DIR+MODEL_URL,GOOGLE_CLOUD_STORAGE_DIR+WEIGHTS_URL);constzeros=tf.zeros([1,224,224,3]);model.predict(zeros).print();TensorFlow.js示例--数据拟合曲线对于一个多项式函数的回归来说,通过训练模型来找到多项式的系数,并使利用这些系数的多项式产生的值与给定数据集值的误差最小。这里,我们使用TensorFlow.js来拟合训练数据并描绘出拟合曲线。这个示例的源码在下载的polynomial-regression-core目录中。这里,我们将源码的数据参数改为a=-0.9,b=-0.28,c=0.81,d=0.58。

TensorFlow.js示例--数据拟合曲线数据产生代码

TensorFlow.js示例--数据拟合曲线生成的数据TensorFlow.js示例--数据拟合曲线训练前的拟合曲线

TensorFlow.js示例--数据拟合曲线

训练迭代器SGD75次迭代之后,a、b、c以及d已经比开始随机分配系数的结果拟合要好很多TensorFlow.js示例--卷积网络手写数字识别

TensorFlow.js

的卷积网手写数字识别的数据来源为MNISThandwritingdataset。$cd

tfjs-examples/mnist-core$yarn$yarnwatch启动浏览器TensorFlow.js示例--卷积网络手写数字识别

data.js

作用为处理数据建立模型model.js

//Ouractualmodel模型functionmodel(inputXs){constxs=inputXs.as4D(-1,IMAGE_SIZE,IMAGE_SIZE,1);conststrides=2;constpad=0;//Conv1第一层卷积网

constlayer1=tf.tidy(()=>{returnxs.conv2d(conv1Weights,1,'same').relu().maxPool([2,2],strides,pad);}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论