0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorFlow发表推文正式发布TensorFlow v1.9

电子工程师 来源:未知 作者:李倩 2018-07-16 10:23 次阅读

TensorFlow 是一个开放源代码软件库,用于进行高性能数值计算。借助灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPUGPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。最近在 JS 社区中,对 TFJava API 相关项目与技术的高度需求是前所未有的。

TensorFlow v1.9

近日,TensorFlow 发表推文正式发布 TensorFlow v1.9 ,大家可以更新各自的代码啦~~在 TF 的更新文档中更新了 keras,包括一个新的基于keras的入门,一个非常适合初学者的Jupyter 笔记本,还增加了更多的实例。

其中有两个案例受到了大家的广泛关注,这个项目是通过 Colab 在 tf.keras 中训练模型,并通过TensorFlow.js 在浏览器中运行;最近在 JS 社区中,对这些相关项目的高度需求是前所未有的。之前人工智能头条也为大家介绍了一个在浏览器中通过TensorFlow.js 进行多人人脸识别与特征检测的项目,也受到大家的广泛关注。此外 TensorFlow 还给那些想了解、学习相关项目技术的关注者们推出了系列官方教学视频

今天人工智能头条会带领大家学习这个新项目,JS 爱好者和开发者们不要错过!

另一个项目是简单的RNN网络生成文本的实践,这次作者不仅在GitHub 上分享了源码,大家还可以利用这次 v1.9 中的笔记本新功能来进行端到端的直接运行。

在 Google Colab 中看到这个项目的第一眼,就觉得真的很适合初学者研究学习。左侧可以一目了然地看 “目录” 与 “代码段”。

已经分解的源码结构,从安装、导入需要的工具,到下载读取数据,创建训练模型,最后预测模型,只要跟着一步一步来,相信大家都会学有所成。

▌TensorFlow v1.9 实践

前言

在这个应用中我们将完成通过识别图画来输出当前图画的名称的实践。使用 Google Colab 来训练模型,使用 TensorFlow.js 在浏览器上进行部署,直接在浏览器上运行。需要注意的一点是,务必要在测试 Google Colab 的 notebook 工具:

https://colab.research.google.com/github/zaidalyafeai/zaidalyafeai.github.io/blob/master/sketcher/Sketcher.ipynb

数据集

我们将使用 CNN 来识别不同类型的图画。CNN 将在Quick Draw数据集上进行训练。这个数据集包含了大约5000万张、345类别的图画。

管道

我们将使用 Keras 在 Google Colab 上训练模型,然后通过 TensorFlow.js (tfjs) 在浏览器上直接运行。下图向大家展示了这个项目的管道图

参考教程

https://js.tensorflow.org/

https://github.com/tensorflow/tfjs-examples

输入

我们将使用带有tensorflow后端的keras:

importosimportglobimportnumpyasnpfromtensorflow.kerasimportlayersfromtensorflowimportkerasimporttensorflowastf

加载数据

由于内存有限,我们不会在所有的类别进行训练。我们只使用100个类别的数据集。在Google Cloud 的quickdraw_dataset 上每个类别的数据都可以用形状表示为[N,784]的numpy数组,其中N是该特定类的的图像数量。我们首先下载数据集:

importurllib.requestdefdownload():base='https://storage.googleapis.com/quickdraw_dataset/full/numpy_bitmap/'forcinclasses:cls_url=c.replace('_','%20')path=base+cls_url+'.npy'print(path)urllib.request.urlretrieve(path,'data/'+c+'.npy')

由于内存有限,因此每个类只能加载5000个图像到内存。另外还保留了20%的用于测试的数据。

defload_data(root,vfold_ratio=0.2,max_items_per_class=5000):all_files=glob.glob(os.path.join(root,'*.npy'))#initializevariablesx=np.empty([0,784])y=np.empty([0])class_names=[]#loadasubsetofthedatatomemoryforidx,fileinenumerate(all_files):data=np.load(file)data=data[0:max_items_per_class,:]labels=np.full(data.shape[0],idx)x=np.concatenate((x,data),axis=0)y=np.append(y,labels)class_name,ext=os.path.splitext(os.path.basename(file))class_names.append(class_name)data=Nonelabels=None#separateintotrainingandtestingpermutation=np.random.permutation(y.shape[0])x=x[permutation,:]y=y[permutation]vfold_size=int(x.shape[0]/100*(vfold_ratio*100))x_test=x[0:vfold_size,:]y_test=y[0:vfold_size]x_train=x[vfold_size:x.shape[0],:]y_train=y[vfold_size:y.shape[0]]returnx_train,y_train,x_test,y_test,class_names

预处理数据

我们对数据进行预处理,为训练做准备。该模型将采用 [N, 28, 28, 1] 批次并输出为[N, 100]的概率。

#Reshapeandnormalizex_train=x_train.reshape(x_train.shape[0],image_size,image_size,1).astype('float32')x_test=x_test.reshape(x_test.shape[0],image_size,image_size,1).astype('float32')x_train/=255.0x_test/=255.0#Convertclassvectorstoclassmatricesy_train=keras.utils.to_categorical(y_train,num_classes)y_test=keras.utils.to_categorical(y_test,num_classes)

创建模型

我们将创建一个简单的CNN。参数数量越少,模型就越简单越好。因为我们是在浏览器上进行转换后运行模型,并且希望模型能够快速运行以便进行预测。下面模型包含了3个conv层和2个dense层。

#Definemodelmodel=keras.Sequential()model.add(layers.Convolution2D(16,(3,3),padding='same',input_shape=x_train.shape[1:],activation='relu'))model.add(layers.MaxPooling2D(pool_size=(2,2)))model.add(layers.Convolution2D(32,(3,3),padding='same',activation='relu'))model.add(layers.MaxPooling2D(pool_size=(2,2)))model.add(layers.Convolution2D(64,(3,3),padding='same',activation='relu'))model.add(layers.MaxPooling2D(pool_size=(2,2)))model.add(layers.Flatten())model.add(layers.Dense(128,activation='relu'))model.add(layers.Dense(100,activation='softmax'))#Trainmodeladam=tf.train.AdamOptimizer()model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['top_k_categorical_accuracy'])print(model.summary())

适配、验证和测试

在此之后,我们对模型进行了5个轮数和256个批次的训练,并进行了10%的验证划分:

#fitthemodelmodel.fit(x=x_train,y=y_train,validation_split=0.1,batch_size=256,verbose=2,epochs=5)#evaluateonunseendatascore=model.evaluate(x_test,y_test,verbose=0)print('Testaccuarcy:{:0.2f}%'.format(score[1]*100))viewraw

训练的结果如下图所示:

测试准确率中第5个准确率为92.20%。

为Web格式准备模型

在我们对模型的准确率感到满意之后,我们将其保存并准备进行转换:

model.save('keras.h5')

安装tfjs包进行转换:

!pipinstalltensorflowjs

然后转换模型:

!mkdirmodel!tensorflowjs_converter--input_formatkeraskeras.h5model/

创建了一些权重文件和包含模型体系结构的json文件。

压缩模型,准备将其下载到我们的本地计算机中:

!zip-rmodel.zipmodel

最后下载模型:

fromgoogle.colabimportfilesfiles.download('model.zip')

下面将展示如何加载模型并进行推理。假设我们有一个300x300大小的画布。

加载模型

要使用TensorFlow.js,请首先运行以下脚本:

注意:需要在本地计算机上运行服务器,

然后,使用浏览器加载模型(await关键字用于等待浏览器加载模型)

model=awaittf.loadModel('model/model.json')viewraw

预处理

在做预测之前,我们需要先对数据进行预处理。首先从画布中获取图像数据变量dpi用于根据屏幕像素的密度对画布进行拉伸。

//theminimumboudningboxaroundthecurrentdrawingconstmbb=getMinBox()//cacluatethedpiofthecurrentwindowconstdpi=window.devicePixelRatio//extracttheimagedataconstimgData=canvas.contextContainer.getImageData(mbb.min.x*dpi,mbb.min.y*dpi,(mbb.max.x-mbb.min.x)*dpi,(mbb.max.y-mbb.min.y)*dpi);

我们将画布当前的图像数据转换为一个张量,调整大小并进行规范化。

functionpreprocess(imgData){returntf.tidy(()=>{//converttheimagedatatoatensorlettensor=tf.fromPixels(imgData,numChannels=1)//resizeto28x28constresized=tf.image.resizeBilinear(tensor,[28,28]).toFloat()//Normalizetheimageconstoffset=tf.scalar(255.0);constnormalized=tf.scalar(1.0).sub(resized.div(offset));//Weaddadimensiontogetabatchshapeconstbatched=normalized.expandDims(0)returnbatched})}

对于预测,我们使用model.predict,这将返回形状的概率[N, 100]:

constpred=model.predict(preprocess(imgData)).dataSync()

然后我们可以用简单的函数来求前5个概率。

提高准确率

记住,我们的模型接受形状[N, 28, 28,1]的张量,绘图画布大小为300x300,对于绘图来说,可能需要两个大的用于绘图,或者可能需要用户绘制小一些的图。最好只裁剪包含当前图画的框。为了做到这一点,我们通过查找左上角和右下角来提取绘图周围的最小边界框:

//recordthecurrentdrawingcoordinatesfunctionrecordCoor(event){//getcurrentmousecoordinatevarpointer=canvas.getPointer(event.e);varposX=pointer.x;varposY=pointer.y;//recordthepointifwithingthecanvasandthemouseispressedif(posX>=0&&posY>=0&&mousePressed){coords.push(pointer)}}//getthebestboundingboxbyfindingthetopleftandbottomrightcorndersfunctiongetMinBox(){varcoorX=coords.map(function(p){returnp.x});varcoorY=coords.map(function(p){returnp.y});//findtopleftcornervarmin_coords={x:Math.min.apply(null,coorX),y:Math.min.apply(null,coorY)}//findrightbottomcornervarmax_coords={x:Math.max.apply(null,coorX),y:Math.max.apply(null,coorY)}return{min:min_coords,max:max_coords}}

测试绘图

下图展示了一些第一次绘图和最高百分比级别。所有的图画都是我用鼠标绘制的。如果用一支电脑绘图笔可以获得更好的准确率:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据集
    +关注

    关注

    4

    文章

    1177

    浏览量

    24347
  • tensorflow
    +关注

    关注

    13

    文章

    313

    浏览量

    60242

原文标题:TensorFlow 发布新版本v1.9(附应用实践教程)

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于 TensorFlow

    。学生、研究员、爱好者、极客、工程师、开发者、发明家、创业者等等都可以在Apache 2.0 开源协议下使用TensorflowTensorflow 还没竣工,它需要被进一步扩展和上层建构。我们刚发布
    发表于 03-30 19:57

    使用 TensorFlow, 你必须明白 TensorFlow

    基本使用使用 TensorFlow, 你必须明白 TensorFlow:使用图 (graph) 来表示计算任务.在被称之为 会话 (Session) 的上下文 (context) 中执行图
    发表于 03-30 20:03

    深度学习框架TensorFlow&TensorFlow-GPU详解

    TensorFlow&TensorFlow-GPU:深度学习框架TensorFlow&TensorFlow-GPU的简介、安装、使用方法详细攻略
    发表于 12-25 17:21

    请问mini stm32 board v1.9现在卖多少钱了?

    mini stm32 board v1.9 有改动吗?现在卖多少钱了?
    发表于 09-11 21:38

    情地使用Tensorflow吧!

    Tensorflow 还没竣工,它需要被进一步扩展和上层建构。我们刚发布了源代码的最初版本,并且将持续完善它。我们希望大家通过直接向源代码贡献,或者提供反馈,来建立一个活跃的开源社区,以推动这个代码库
    发表于 07-22 10:13

    TensorFlow是什么

    更长。TensorFlow 使这一切变得更加简单快捷,从而缩短了想法到部署之间的实现时间。在本教程中,你将学习如何利用 TensorFlow 的功能来实现深度神经网络。TensorFlow 是由
    发表于 07-22 10:14

    TensorFlow安装和下载(超详细)

    ,Python 3.5,TensorFlow GPU,CUDA toolkit 8.0,cuDNN v5.1,NVDIA GTX 1070Windows 10/Ubuntu 14.04/Ubuntu 16.04
    发表于 07-22 10:25

    TensorFlow教程|BibTex 引用

    如果你在研究中使用了 TensorFlow,并且希望引用 TensorFlow系统。我们建议你引用一下白皮书。@misc{tensorflow2015-whitepaper,title
    发表于 07-27 18:35

    TensorFlow的特点和基本的操作方式

    2015年11月在GitHub上开源,在2016年4月补充了分布式版本,最新版本为1.10,2018年下半年将发布Tensorflow 2.0预览版。Tensorflow目前仍处于快速开发迭代中,不断推出新功能和优化性能,现已成
    发表于 11-23 09:56

    TensorFlow将神经网络量化为8位

    据类型,使用TensorFlow 1.9或更高版本中提供的功能。 设备可以比32位浮点模型更快地执行8位整数模型,因为需要移动的数据更少,并且可以使用更简单的整数算术运算进行乘法和累加。 如果您使用CoreML部署
    发表于 08-10 06:01

    TensorFlow的经典案例

    本文是TensorFlow实现流行机器学习算法的教程汇集,目标是让读者可以轻松通过清晰简明的案例深入了解TensorFlow。这些案例适合那些想要实现一些TensorFlow案例的初学者。本教程包含还包含笔记和带有注解的代码。
    发表于 11-27 16:51 8664次阅读

    TensorFlow是什么?如何启动并运行TensorFlow

    TensorFlow 是一款用于数值计算的强大的开源软件库,特别适用于大规模机器学习的微调。 它的基本原理很简单:首先在 Python 中定义要执行的计算图(例如图 9-1),然后 TensorFlow 使用该图并使用优化的 C++ 代码高效运行该图。
    的头像 发表于 07-29 11:16 1.6w次阅读

    TensorFlow安装手册之如何利用pip安装 TensorFlow

    关于 TensorFlow 安装,有很多方法可以实践。本文将为大家详细介绍如何利用 pip 安装 TensorFlow
    的头像 发表于 10-28 10:57 1.3w次阅读

    tensorflow和python的关系_tensorflow与pytorch的区别

    Tensorflow和Python有什么关系?Tensorflow是Python的机器学习库,Python的库有很多,如Tensorflow、NumPy、Httpie、Django、Flask、Ansible。我们知道章鱼有很多
    的头像 发表于 12-04 14:54 1.9w次阅读

    谷歌正式发布TensorFlow 图神经网络

    日前,我们很高兴发布TensorFlow 图神经网络 (Graph Neural Networks, GNNs),此库可以帮助开发者利用 TensorFlow 轻松处理图结构化数据。
    的头像 发表于 01-05 13:44 1310次阅读