0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TensorFlow發(fā)表推文正式發(fā)布TensorFlow v1.9

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-07-16 10:23 ? 次閱讀

TensorFlow 是一個開放源代碼軟件庫,用于進行高性能數(shù)值計算。借助靈活的架構,用戶可以輕松地將計算工作部署到多種平臺(CPU、GPU、TPU)和設備(桌面設備、服務器集群、移動設備、邊緣設備等)。最近在 JS 社區(qū)中,對 TFJava API 相關項目與技術的高度需求是前所未有的。

TensorFlow v1.9

近日,TensorFlow 發(fā)表推文正式發(fā)布 TensorFlow v1.9 ,大家可以更新各自的代碼啦~~在 TF 的更新文檔中更新了 keras,包括一個新的基于keras的入門,一個非常適合初學者的Jupyter 筆記本,還增加了更多的實例。

其中有兩個案例受到了大家的廣泛關注,這個項目是通過 Colab 在 tf.keras 中訓練模型,并通過TensorFlow.js 在瀏覽器中運行;最近在 JS 社區(qū)中,對這些相關項目的高度需求是前所未有的。之前人工智能頭條也為大家介紹了一個在瀏覽器中通過TensorFlow.js 進行多人人臉識別與特征檢測的項目,也受到大家的廣泛關注。此外 TensorFlow 還給那些想了解、學習相關項目技術的關注者們推出了系列官方教學視頻。

今天人工智能頭條會帶領大家學習這個新項目,JS 愛好者和開發(fā)者們不要錯過!

另一個項目是簡單的RNN網絡生成文本的實踐,這次作者不僅在GitHub 上分享了源碼,大家還可以利用這次 v1.9 中的筆記本新功能來進行端到端的直接運行。

在 Google Colab 中看到這個項目的第一眼,就覺得真的很適合初學者研究學習。左側可以一目了然地看 “目錄” 與 “代碼段”。

已經分解的源碼結構,從安裝、導入需要的工具,到下載讀取數(shù)據(jù),創(chuàng)建訓練模型,最后預測模型,只要跟著一步一步來,相信大家都會學有所成。

▌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

數(shù)據(jù)集

我們將使用 CNN 來識別不同類型的圖畫。CNN 將在Quick Draw數(shù)據(jù)集上進行訓練。這個數(shù)據(jù)集包含了大約5000萬張、345類別的圖畫。

管道

我們將使用 Keras 在 Google Colab 上訓練模型,然后通過 TensorFlow.js (tfjs) 在瀏覽器上直接運行。下圖向大家展示了這個項目的管道圖

參考教程

https://js.tensorflow.org/

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

輸入

我們將使用帶有tensorflow后端的keras:

importosimportglobimportnumpyasnpfromtensorflow.kerasimportlayersfromtensorflowimportkerasimporttensorflowastf

加載數(shù)據(jù)

由于內存有限,我們不會在所有的類別進行訓練。我們只使用100個類別的數(shù)據(jù)集。在Google Cloud 的quickdraw_dataset 上每個類別的數(shù)據(jù)都可以用形狀表示為[N,784]的numpy數(shù)組,其中N是該特定類的的圖像數(shù)量。我們首先下載數(shù)據(jù)集:

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%的用于測試的數(shù)據(jù)。

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

預處理數(shù)據(jù)

我們對數(shù)據(jù)進行預處理,為訓練做準備。該模型將采用 [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)

創(chuàng)建模型

我們將創(chuàng)建一個簡單的CNN。參數(shù)數(shù)量越少,模型就越簡單越好。因為我們是在瀏覽器上進行轉換后運行模型,并且希望模型能夠快速運行以便進行預測。下面模型包含了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個輪數(shù)和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/

創(chuàng)建了一些權重文件和包含模型體系結構的json文件。

壓縮模型,準備將其下載到我們的本地計算機中:

!zip-rmodel.zipmodel

最后下載模型:

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

下面將展示如何加載模型并進行推理。假設我們有一個300x300大小的畫布。

加載模型

要使用TensorFlow.js,請首先運行以下腳本:

注意:需要在本地計算機上運行服務器,

然后,使用瀏覽器加載模型(await關鍵字用于等待瀏覽器加載模型)

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

預處理

在做預測之前,我們需要先對數(shù)據(jù)進行預處理。首先從畫布中獲取圖像數(shù)據(jù)變量dpi用于根據(jù)屏幕像素的密度對畫布進行拉伸。

//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);

我們將畫布當前的圖像數(shù)據(jù)轉換為一個張量,調整大小并進行規(guī)范化。

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()

然后我們可以用簡單的函數(shù)來求前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}}

測試繪圖

下圖展示了一些第一次繪圖和最高百分比級別。所有的圖畫都是我用鼠標繪制的。如果用一支電腦繪圖筆可以獲得更好的準確率:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)集

    關注

    4

    文章

    1197

    瀏覽量

    24532
  • tensorflow
    +關注

    關注

    13

    文章

    327

    瀏覽量

    60413

原文標題:TensorFlow 發(fā)布新版本v1.9(附應用實踐教程)

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于 TensorFlow

    。學生、研究員、愛好者、極客、工程師、開發(fā)者、發(fā)明家、創(chuàng)業(yè)者等等都可以在Apache 2.0 開源協(xié)議下使用TensorflowTensorflow 還沒竣工,它需要被進一步擴展和上層建構。我們剛發(fā)布
    發(fā)表于 03-30 19:57

    深度學習框架TensorFlow&TensorFlow-GPU詳解

    TensorFlow&TensorFlow-GPU:深度學習框架TensorFlow&TensorFlow-GPU的簡介、安裝、使用方法詳細攻略
    發(fā)表于 12-25 17:21

    請問mini stm32 board v1.9現(xiàn)在賣多少錢了?

    mini stm32 board v1.9 有改動嗎?現(xiàn)在賣多少錢了?
    發(fā)表于 09-11 21:38

    情地使用Tensorflow吧!

    Tensorflow 還沒竣工,它需要被進一步擴展和上層建構。我們剛發(fā)布了源代碼的最初版本,并且將持續(xù)完善它。我們希望大家通過直接向源代碼貢獻,或者提供反饋,來建立一個活躍的開源社區(qū),以推動這個代碼庫
    發(fā)表于 07-22 10:13

    TensorFlow是什么

    更長。TensorFlow 使這一切變得更加簡單快捷,從而縮短了想法到部署之間的實現(xiàn)時間。在本教程中,你將學習如何利用 TensorFlow 的功能來實現(xiàn)深度神經網絡。TensorFlow 是由
    發(fā)表于 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
    發(fā)表于 07-22 10:25

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

    2015年11月在GitHub上開源,在2016年4月補充了分布式版本,最新版本為1.10,2018年下半年將發(fā)布Tensorflow 2.0預覽版。Tensorflow目前仍處于快速開發(fā)迭代中,不斷推出新功能和優(yōu)化性能,現(xiàn)已成
    發(fā)表于 11-23 09:56

    TensorFlow的經典案例

    本文是TensorFlow實現(xiàn)流行機器學習算法的教程匯集,目標是讓讀者可以輕松通過清晰簡明的案例深入了解TensorFlow。這些案例適合那些想要實現(xiàn)一些TensorFlow案例的初學者。本教程包含還包含筆記和帶有注解的代碼。
    發(fā)表于 11-27 16:51 ?8767次閱讀

    TensorFlow是什么?如何啟動并運行TensorFlow

    TensorFlow 是一款用于數(shù)值計算的強大的開源軟件庫,特別適用于大規(guī)模機器學習的微調。 它的基本原理很簡單:首先在 Python 中定義要執(zhí)行的計算圖(例如圖 9-1),然后 TensorFlow 使用該圖并使用優(yōu)化的 C++ 代碼高效運行該圖。
    的頭像 發(fā)表于 07-29 11:16 ?1.7w次閱讀

    TensorFlow的2.0 版本將來臨

    TensorFlow 的 contrib 模塊已經超越了單個存儲庫中可以維護和支持的模塊。較大的項目最好分開維護,我們將在 TensorFlow 的主代碼里添加一些規(guī)模較小的擴展。因此,作為發(fā)布
    的頭像 發(fā)表于 08-15 09:01 ?5421次閱讀

    TensorFlow安裝手冊之如何利用pip安裝 TensorFlow

    關于 TensorFlow 安裝,有很多方法可以實踐。本文將為大家詳細介紹如何利用 pip 安裝 TensorFlow 。
    的頭像 發(fā)表于 10-28 10:57 ?1.3w次閱讀

    tensorflow和python的關系_tensorflow與pytorch的區(qū)別

    Tensorflow和Python有什么關系?Tensorflow是Python的機器學習庫,Python的庫有很多,如Tensorflow、NumPy、Httpie、Django、Flask、Ansible。我們知道章魚有很多
    的頭像 發(fā)表于 12-04 14:54 ?1.9w次閱讀

    谷歌正式發(fā)布TensorFlow 圖神經網絡

    日前,我們很高興發(fā)布TensorFlow 圖神經網絡 (Graph Neural Networks, GNNs),此庫可以幫助開發(fā)者利用 TensorFlow 輕松處理圖結構化數(shù)據(jù)。
    的頭像 發(fā)表于 01-05 13:44 ?1417次閱讀

    TensorFlow-DirectML TensorFlow的GPU范圍擴展

    ./oschina_soft/tensorflow-directml.zip
    發(fā)表于 06-17 09:18 ?1次下載
    <b class='flag-5'>TensorFlow</b>-DirectML <b class='flag-5'>TensorFlow</b>的GPU范圍擴展

    tensorflow和pytorch哪個好

    tensorflow和pytorch都是非常不錯的強大的框架,TensorFlow還是PyTorch哪個更好取決于您的具體需求,以下是關于這兩個框架的一些關鍵點: TensorFlow發(fā)
    的頭像 發(fā)表于 07-05 09:42 ?437次閱讀