您的位置:首頁>>電腦軟件

龙珠激斗和龙珠觉醒:如何用Paddle Fluid API搭建一個簡單的神經網絡?這里有一份編程指南

發布時間:2019-05-27 17:26:37  來源:互聯網    背景:

龙珠激斗2.0 www.ogzfz.icu   PaddlePaddle 是百度自主研發,集深度學習核心框架、工具組件和服務平臺為一體的開源深度學習平臺。該平臺技術領先、功能完備。Paddle Fluid 是 PaddlePaddle 的核心框架,滿足模型開發、訓練、部署的全流程需求。本文將展示如何用 Paddle Fluid API 編程并搭建一個簡單的神經網絡。

  那么,Paddle Fluid 有哪些核心概念?如何在 Paddle Fluid 中定義運算過程?如何使用executor 運行 Paddle Fluid 操作?如何從邏輯層對實際問題建模?如何調用 API(層,數據集,損失函數,優化方法等等)呢?

  一、 使用 Tensor 表示數據

  Paddle Fluid 和其它主流框架一樣,使用 Tensor 數據結構來承載數據。Tensor 可以簡單理解成一個多維數組,一般而言可以有任意多的維度。不同的 Tensor 可以具有自己的數據類型和形狀,同一 Tensor 中每個元素的數據類型是一樣的,Tensor 的形狀就是 Tensor 的維度。

  下圖直觀地表示 1~6 維的 Tensor:

  在 Paddle Fluid 中存在三種特殊的 Tensor:

  1. 模型中的可學習參數 模型中的可學習參數(包括網絡權重、偏置等)生存期和整個訓練任務一樣長,會接受優化算法的更新,在 Paddle Fluid 中以 Variable 的子類 Parameter 表示。

  在 Paddle Fluid 中可以通過 fluid.layers.create_parameter 來創建可學習參數:

  一般情況下,您不需要自己來創建網絡中的可學習參數,Paddle Fluid 為大部分常見的神經網絡基本計算??槎繼峁┝朔庾?。以最簡單的全連接模型為例,下面的代碼片段會直接為全連接層創建連接權值(W)和偏置(bias)兩個可學習參數,無需顯式地調用 Parameter 相關接口來創建。

  2.輸入輸出 Tensor :整個神經網絡的輸入數據也是一個特殊的 Tensor,在這個 Tensor 中,一些維度的大小在定義模型時無法確定(通常包括:batch size,如果 mini-batch 之間數據可變,也會包括圖片的寬度和高度等),在定義模型時需要占位。

  Paddle Fluid 中使用 fluid.layers.data 來接收輸入數據,fluid.layers.data 需要提供輸入 Tensor 的形狀信息,當遇到無法確定的維度時,相應維度指定為 None 或 -1,如下面的代碼片段所示:

  其中,dtype="int64" 表示有符號 64 位整數數據類型,更多 Paddle Fluid 目前支持的數據類型請在官網查閱://paddlepaddle.org/documentation/docs/zh/1.4/user_guides/howto/prepare_data/feeding_data.html#fluid。

  3.常量 Tensor Paddle Fluid 通過 fluid.layers.fill_constant 來實現常量 Tensor,用戶可以指定 Tensor 的形狀,數據類型和常量值。代碼實現如下所示:

  需要注意的是,上述定義的 tensor 并不具有值,它們僅表示將要執行的操作,如您直接打印 data 將會得到描述該 data 的一段信息:

  輸出結果:

  具體輸出數值將在 Executor 運行時得到,詳細過程會在后文展開描述。

  數據傳入

  Paddle Fluid 有特定的數據傳入方式:

  您需要使用 fluid.layers.data 配置數據輸入層,并在 fluid.Executor 或 fluid.ParallelExecutor 中,使用 executor.run(feed=...) 傳入訓練數據。

  具體的數據準備過程,您可以閱讀官網使用指南「準備數據」章節。

  使用 Operator 表示對數據的操作

  在 Paddle Fluid 中,所有對數據的操作都由 Operator 表示,您可以使用內置指令來描述它們的神經網絡。為了便于用戶使用,在 Python 端,Paddle Fluid 中的 Operator 被一步封裝入 paddle.fluid.layers,paddle.fluid.nets 等???。這是因為一些常見的對 Tensor 的操作可能是由更多基礎操作構成,為了提高使用的便利性,框架內部對基礎 Operator 進行了一些封裝,包括創建 Operator 依賴可學習參數,可學習參數的初始化細節等,減少用戶重復開發的成本。例如用戶可以利用 paddle.fluid.layers.elementwise_add() 實現兩個輸入 Tensor 的加法運算:

  輸出結果:

  本次運行時,輸入 a=7,b=3,得到 outs=10。

  您可以復制這段代碼在本地執行,根據指示輸入其它數值觀察計算結果。

  如果想獲取網絡執行過程中的 a,b 的具體值,可以將希望查看的變量添加在 fetch_list 中。

  輸出結果:

  使用 Program 描述神經網絡模型

  Paddle Fluid 不同于其它大部分深度學習框架,去掉了靜態計算圖的概念,代之以 Program 的形式動態描述計算過程。這種動態的計算描述方式兼具網絡結構修改的靈活性和模型搭建的便捷性,在保證性能的同時極大地提高了框架對模型的表達能力。

  開發者的所有 Operator 都將寫入 Program,在 Paddle Fluid 內部將自動轉化為一種叫作 ProgramDesc 的描述語言,Program 的定義過程就像在寫一段通用程序,有開發經驗的用戶在使用 Paddle Fluid 時,會很自然的將自己的知識遷移過來。

  其中,Paddle Fluid 通過提供順序、分支和循環三種執行結構的支持,讓用戶可以通過組合描述任意復雜的模型。

  順序執行:

  用戶可以使用順序執行的方式搭建網絡:

  條件分支——switch、if else:

  Paddle Fluid 中有 switch 和 if-else 類來實現條件選擇,用戶可以使用這一執行結構在學習率調節器中調整學習率或其它希望的操作:

  關于 Paddle Fluid 中 Program 的詳細設計思想,可以參考閱讀官網進階使用「設計思想」中更多 Fluid 中的控制流,可以參考閱讀 API 文檔。

  使用 Executor 執行 Program

  Paddle Fluid 的設計思想類似于高級編程語言 C++和 JAVA 等。程序的執行過程被分為編譯和執行兩個階段。用戶完成對 Program 的定義后,Executor 接受這段 Program 并轉化為 C++后端真正可執行的 FluidProgram,這一自動完成的過程叫做編譯。編譯過后需要 Executor 來執行這段編譯好的 FluidProgram。例如上文實現的加法運算,當構建好 Program 后,需要創建 Executor,進行初始化 Program 和訓練 Program:

  代碼實例

  您已經對 Paddle Fluid 核心概念有了初步認識了,不妨嘗試配置一個簡單的網絡吧。如果感興趣的話可以跟隨本部分,完成一個非常簡單的數據預測。

  從邏輯層面明確了輸入數據格式、模型結構、損失函數以及優化算法后,需要使用 Paddle Fluid 提供的 API 及算子來實現模型邏輯。一個典型的模型主要包含 4 個部分,分別是:輸入數據格式定義,模型前向計算邏輯,損失函數以及優化算法。

  1、問題描述 : 給定一組數據 <x,y>,求解出函數 f,使得 y=f(x),其中 X,Y 均為一維張量。最終網絡可以依據輸入 x,準確預測出 y_predict。

  2、定義數據 : 假設輸入數據 X=[1 2 3 4],Y=[2,4,6,8],在網絡中定義:

  3、搭建網絡(定義前向計算邏輯) : 接下來需要定義預測值與輸入的關系,本次使用一個簡單的線性回歸函數進行預測:

  這樣的網絡就可以進行預測了,雖然輸出結果只是一組隨機數,離預期結果仍相差甚遠:

  輸出結果:

  4、添加損失函數 : 完成模型搭建后,如何評估預測結果的好壞呢?我們通常在設計的網絡中添加損失函數,以計算真實值與預測值的差。在本例中,損失函數采用均方差函數:

  

  輸出一輪計算后的預測值和損失函數:

  輸出結果:

  可以看到第一輪計算后的損失函數為 9.0,仍有很大的下降空間。

  5、網絡優化 確定損失函數后,可以通過前向計算得到損失值,然后通過鏈式求導法則得到參數的梯度值?;袢√荻戎島笮枰虜問?,最簡單的算法是隨機梯度下降法:w=w−η⋅g,由 fluid.optimizer.SGD 實現:

  讓我們的網絡訓練 100 次,查看結果:

  輸出結果:

  可以看到 100 次迭代后,預測值已經非常接近真實值了,損失值也從初始值 9.05 下降到了 0.01。至此,恭喜您!已經成功使用 PaddlePaddle 核心框架 Paddle Fluid 搭建了一個簡單網絡。如果您還想嘗試更多,可以從官網繼續閱讀相關的文檔及更多豐富的模型實例。

  參考:

  PaddlePaddle 項目地址:https://github.com/PaddlePaddle

  PaddlePaddle 官網使用指南地址://paddlepaddle.org/documentation/docs/zh/1.4/user_guides/index_cn.html

特別提醒:本網內容轉載自其他媒體,目的在于傳遞更多信息,并不代表本網贊同其觀點。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,并請自行核實相關內容。本站不承擔此類作品侵權行為的直接責任及連帶責任。如若本網有任何內容侵犯您的權益,請及時聯系我們,本站將會在24小時內處理完畢。


龙珠激斗2.0 本文來源:互聯網

本文評論
友情提示:評論功能暫時關閉,請掃描上方二維碼進群交流!
為國產辦公應用正名 萬興PDF專家軟件評測
近年來,國產辦公效率類軟件快速崛起,各式各樣的辦公效率類軟件進入職場,但是,就選擇一款使用方...
日期:08-21
萬興PDF專家評測:消除PDF文檔使用痛點,強大功能終將 成為“爆款”軟件
時光荏苒,歲月如梭,轉眼間酷熱難耐的夏天已經帶著一絲不舍向我們揮手道別,而“立秋”...
日期:08-21
CRM進入工作手機時代 訊眾通信要進入CRM領域?
最初,銷售管理就是填各種表,后來引入銷售管理軟件,開始信息化管理。有了移動互聯網之后,銷售管...
日期:08-20
妙筆2.0升級系統不容小覷,快速抓住傳播營銷新趨勢
2019年8月,在藍色光標AD大會上,妙筆智能公司正式推出了智能撰稿機器人2.0系統。在該系統下,通過"...
日期:08-16
這個 WPS 高效功能,讓你輕松制作高水平簡歷
目前,正值招聘的黃金時期「秋招季」,各大企業的集中招聘正在火熱展開。如何能在千百位應聘者中脫...
日期:08-15
聽音樂時不想收到語音消息 訊飛輸入法語音輸入更方便看
近日,微博#用手機聽音樂時收到語音消息#這一話題備受關注。相信很多手機聽歌收到微信語音時的內心O...
日期:08-09
“輕量化”成趨勢,辦公OA系統如何選擇?
“輕量化”,本是汽車生產技術之一,可以做到保證汽車基本性能的情況下,降低重量提高操...
日期:08-09
索泰發布新款迷你PC:搭載9代酷睿和RTX顯卡
8月8日消息 索泰今天發布了MAGNUS E系列ZBOX迷你PC,62.2毫米厚,搭載9代英特爾酷睿處理器和NVIDIA ...
日期:08-08
AMD 霄龍發布會現場實拍:雙路EPYC,超大被動散熱器
8月8日消息 舊金山時間8月7日下午,AMD召開發布會,正式推出了7nm EPYC 7002系列處理器,最高64核12...
日期:08-08
萬物互聯時代,一款遠程控制軟件的十年進化之路
遠程控制作為一種新興的互聯網操作方式,正在成為一種潮流。
日期:08-07
破解數字化轉型的密碼  用友2019全球企業服務大會即將揭幕
如今,云計算、大數據、5G、AI人工智能、IoT物聯網等新興技術突飛猛進,已經成為改變生活、產業和社...
日期:08-02
這個高效神器,讓你的PPT字體更好看
相信不少小伙伴們都知道,字體對于PPT制作、宣傳海報設計而言,重要性不言而喻,字體若是使用得當,...
日期:08-02
迅雷破解版盤點,VIP破解版無限加速去廣告統統不靠譜!
提到下載電影、游戲、軟件等,相信不少小伙伴都想到迅雷,作為一款裝機必備的軟件,網上也流傳著很...
日期:08-02
十年遠控品牌向日葵亮相海納匯,助力物聯網企業數字化
2019年7月20日,海納匯聯盟年度全國巡展第六站在杭州成功舉辦。
日期:07-29
貨架革命,如何拿下終端貨架高地?
數據顯示,
  每位消費者在超市每個終端展示貨架前平均停留15秒,
  75%的人會在5秒...
日期:07-25
簡單3步解決文檔丟失?試試WPS高效辦公小妙招《四》
決定職場人升職加薪的主要因素除老板外,還有你的工作文檔。為什么呢?因為這些文檔也是你工作成果最...
日期:07-25
科創板開市大漲引股民搶投,騰訊手機管家精準查殺5款病毒炒股APP
近日,科創板鳴鑼開市,首批25只新股正式在上交所開始交易,開盤全部大漲,甚至有的漲幅達520%,上...
日期:07-24
有人打電話喊你投資《星球大戰9》,騰訊手機管家精準攔截詐騙電話
《星球大戰》在全球擁有數以億計的粉絲,其天行者系列終章《星球大戰9》在前段時間宣布12月20日在北...
日期:07-15
二三四五好壓防護文件安全 MD5校驗成亮點
?二三四五好壓自上線以來,因其“小、快、輕、便”的特點,在眾多壓縮軟件中獨樹一幟。...
日期:07-12
Vue開發者指南:2019你最需要學些什么?
作為 Vue 的初學者,您或許已經聽過很多關于它的專業術語了,例如:單頁面應用程序、異步組件、服務...
日期:07-08
  專欄介紹
王涵 的專欄
王涵發表的文章
積分:
自我介紹 :