小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

深度學(xué)習(xí)框架

 行走在理想邊緣 2023-05-24 發(fā)布于四川

 

一、背景

在這里插入圖片描述

  • 熟知有:

caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,theano,cntk,tiny-dnn,deeplearning4j,matconvnet

  • 一個合格的深度學(xué)習(xí)算法工程師:得熟悉其中的3個以上
  • 學(xué)習(xí)

不應(yīng)該停留在官方的demo上

  • 而是要學(xué)會以下等全方位進(jìn)行掌握:
  1. 從自定義數(shù)據(jù)的讀取
  2. 自定義網(wǎng)絡(luò)的搭建
  3. 模型的訓(xùn)練
  4. 模型的可視化
  5. 模型的測試與部署


深度學(xué)習(xí)系統(tǒng)通常有兩種編程方式

  1. 一種是聲明式編程(declarative programming):
    用戶只需要聲明要做什么,而具體執(zhí)行則由系統(tǒng)完成。
    Caffe,TensorFlow計算圖為代表。
  • 優(yōu)點
  1. 由于在真正開始計算的時候已經(jīng)拿到了整個計算圖,所以可以做一系列優(yōu)化提升性能
  2. 實現(xiàn)輔助函數(shù)也容易。
    例如對任何計算圖都提供forward和backward函數(shù)
  3. 另外也方便對計算圖進(jìn)行可視化
    將圖保存到硬盤和從硬盤讀取。
  • 缺點
  1. debug很麻煩,
    監(jiān)視一個復(fù)雜的計算圖中的某個節(jié)點的中間結(jié)果并不簡單
  2. 邏輯控制也不方便。
  1. 一種是命令式編程(imperative programming):
    numpy,torch/pytorch為代表
    每個語句按照原來的意思順序執(zhí)行。
  • 優(yōu)點
  1. 語義上容易理解,靈活,可以精確控制行為。
  2. 通常可以無縫地和主語言交互,方便地利用主語言的各類算法,工具包,debug性能調(diào)試器
  • 缺點:實現(xiàn)統(tǒng)一的輔助函數(shù)和提供整體優(yōu)化都很困難。

 

二、框架簡介

2.1 caffe

  1. 伯克利的賈揚清主導(dǎo)開發(fā),以C++/CUDA 代碼為主
  2. 最早的深度學(xué)習(xí)框架之一,比 TensorFlow、Mxnet、Pytorch等都更早
  3. 需要進(jìn)行編譯安裝。
  4. 支持命令行、Python和Matlab接口
  5. 單機多卡、多機多卡等都可以很方便的使用
  • caffe的使用通常是下面的流程:

在這里插入圖片描述
流程相互之間是解耦合的,所以caffe的使用非常優(yōu)雅簡單。

  • 優(yōu)點 & 缺點
  • 優(yōu)點:
  1. C++/CUDA/python代碼為主,速度快,性能高。
  2. 工廠設(shè)計模式,代碼結(jié)構(gòu)清晰,可讀性和拓展性強。
  3. 支持命令行、Python和Matlab接口,使用方便。
  4. CPU和GPU之間切換方便,多GPU訓(xùn)練方便。
  5. 工具豐富,社區(qū)活躍。
  • 缺點:
  1. 源代碼修改門檻較高,需要實現(xiàn)前向反向傳播,以及CUDA代碼。
  2. 不支持自動求導(dǎo)。
  3. 不支持模型級并行,只支持?jǐn)?shù)據(jù)級并行
  4. 不適合于非圖像任務(wù)

2.2 tensorflow

  1. Google brain推出的開源機器學(xué)習(xí)庫
  2. 與Caffe一樣,主要用作深度學(xué)習(xí)相關(guān)的任務(wù)
  3. 與Caffe相比TensorFlow的安裝簡單很多
  • TensorFlow = Tensor + Flow
  1. Tensor就是張量,代表N維數(shù)組,這與Caffe中的blob是類似的;
  2. Flow,代表基于數(shù)據(jù)流圖的計算。
  • 最大的特點是:計算圖
    即:先定義好圖,然后進(jìn)行運算
  • 所以所有的TensorFlow代碼,都包含兩部分
  • (1) 創(chuàng)建計算圖
  1. 表示計算的數(shù)據(jù)流
  2. 它做了什么呢?實際上就是定義好了一些操作,你可以將它看做是Caffe中的prototxt定義過程。
     
  • (2)運行會話
  1. 執(zhí)行圖中的運算,可以看作是Caffe中的訓(xùn)練過程。
  2. 只是TensorFlow的會話比Caffe靈活很多,由于是Python接口,取中間結(jié)果分析Debug等方便很多

2.3 mxnet

  • amazon的官方框架
  • 它嘗試將上面說的兩種模式無縫的結(jié)合起來。
  • 非常靈活,擴(kuò)展性很強的框架
  1. 命令式編程MXNet提供張量運算,進(jìn)行模型的迭代訓(xùn)練更新中的控制邏輯;
  2. 聲明式編程MXNet支持符號表達(dá)式,用來描述神經(jīng)網(wǎng)絡(luò),并利用系統(tǒng)提供的自動求導(dǎo)來訓(xùn)練模型

2.4 pytorch

  • Pytorch = Python + Torch
  1. Torch紐約大學(xué)的一個機器學(xué)習(xí)開源框架
  2. 幾年前在學(xué)術(shù)界非常流行,包括Lecun等大佬都在使用
  3. 但是由于使用的是一種絕大部分人絕對沒有聽過的Lua語言,導(dǎo)致很多人都被嚇退。
  4. 后來隨著Python的生態(tài)越來越完善,Facebook人工智能研究院推出了Pytorch并開源。
  • Pytorch不是簡單的封裝 Torch 并提供Python 接口

  • 而是對Tensor以上的所有代碼進(jìn)行了重構(gòu)

  • TensorFlow一樣,增加了自動求導(dǎo)。

  • 后來Caffe2全部并入Pytorch,如今已經(jīng)成為了非常流行的框架。

  • 很多最新的研究,如風(fēng)格化、GAN等大多數(shù)采用Pytorch源碼
     

  • 特點

  • 動態(tài)圖計算。
  1. TensorFlow靜態(tài)圖發(fā)展到了動態(tài)圖機制Eager Execution
  2. pytorch一開始就是動態(tài)圖機制
  3. 動態(tài)圖機制的好處就是隨時隨地修改,隨處debug沒有類似編譯的過程。
     
  • 簡單
  1. 相比TensorFlow1.0中Tensor、Variable、Session等概念充斥,數(shù)據(jù)讀取接口頻繁更新,tf.nn、tf.layers、tf.contrib各自重復(fù)
  2. Pytorch則是從TensorVariable再到nn.Module
    最新的Pytorch已經(jīng)將Tensor和Variable合并
    這分別就是從數(shù)據(jù)張量到網(wǎng)絡(luò)的抽象層次的遞進(jìn)。
    TensorFlow的設(shè)計是“make it complicated”,那么 Pytorch的設(shè)計就是“keep it simple”。

2.5 keras

  • Keras是一個非常流行、簡單的深度學(xué)習(xí)框架

  • 它的設(shè)計參考了torch,用Python語言編寫,是一個高度模塊化神經(jīng)網(wǎng)絡(luò)庫

  • 能夠在TensorFlowCNTKTheano之上運行

  • Keras的特點是能夠快速實現(xiàn)模型的搭建,是高效地進(jìn)行科學(xué)研究的關(guān)鍵

    對小白用戶非常友好而簡單的深度學(xué)習(xí)框架
    嚴(yán)格來說并不是一個開源框架,而是一個高度模塊化的神經(jīng)網(wǎng)絡(luò)庫。
     

  • 特點
  1. 高度模塊化,搭建網(wǎng)絡(luò)非常簡潔。
  2. API簡單,具有統(tǒng)一的風(fēng)格。
  3. 容易擴(kuò)展,只需使用python添加新類和函數(shù)。

2.6 paddlepaddle

  • googletensorflow,facebookpytorch,amazonmxnet
  • 作為國內(nèi)機器學(xué)習(xí)的先驅(qū),百度也有PaddlePaddle
  • 其中PaddleParallel Distributed Deep Learning(并行分布式深度學(xué)習(xí))
  • 整體使用起來與tensorflow非常類似
  • 特點:
  1. 性能也很不錯,整體使用起來與tensorflow非常類似
  2. 擁有中文幫助文檔,在百度內(nèi)部也被用于推薦等任務(wù)
  3. 另外,配套了一個可視化框架visualdl,與tensorboard也有異曲同工之妙。
  4. 國產(chǎn)框架為數(shù)不多的之一

2.7 其他

  • 除了以上最常用的框架
  • 還有theano,cntktiny-dnn,deeplearning 4j,matconvnet

2.7.1 CNTK

  • 概述
  1. 微軟開源的深度學(xué)習(xí)工具包
  2. 它通過有向圖神經(jīng)網(wǎng)絡(luò)描述為一系列計算步驟

有向圖中,葉節(jié)點表示輸入值或網(wǎng)絡(luò)參數(shù),而其他節(jié)點表示其輸入上的矩陣運算

  1. CNTK允許用戶非常輕松地實現(xiàn)和組合流行的模型

包括前饋DNN,卷積網(wǎng)絡(luò)(CNN)循環(huán)網(wǎng)絡(luò)(RNN / LSTM)。

  1. 與目前大部分框架一樣,實現(xiàn)了自動求導(dǎo),利用隨機梯度下降方法進(jìn)行優(yōu)化。
  • 特點
  1. NTK性能較高,按照其官方的說法,比其他的開源框架性能都更高。
  2. 適合做語音,CNTK本就是微軟語音團(tuán)隊開源的,自然是更合適做語音任務(wù)
  3. 使用RNN等模型,以及在時空尺度分別進(jìn)行卷積非常容易。

2.7.2 Matconvnet

  • 概述
  1. 不同于各類深度學(xué)習(xí)框架廣泛使用的語言Python
  2. MatConvnet是用**matlab作為接口語言開源深度學(xué)習(xí)庫**,底層語言cuda。
  • 特點
  1. 因為是在matlab下面,所以debug的過程非常的方便
  2. 因為本身就有很多的研究者一直都使用matlab語言,所以其實該語言的群體非常大。

2.7.3 Deeplearning4j

  • 概述
  1. 不同于深度學(xué)習(xí)廣泛應(yīng)用的語言Python,
  2. DL4J是為javajvm編寫的開源深度學(xué)習(xí)庫,支持各種深度學(xué)習(xí)模型。
  • 特點
  1. 最重要的特點是支持分布式,可以在Spark和Hadoop上運行
  2. 支持分布式CPU和GPU運行。
  3. DL4J是為商業(yè)環(huán)境,而非研究所設(shè)計的,因此更加貼近某些生產(chǎn)環(huán)境。

2.7.4 Chainer

  • 概述
  1. chainer也是一個基于python的深度學(xué)習(xí)框架
  2. 能夠輕松直觀地編寫復(fù)雜的神經(jīng)網(wǎng)絡(luò)架構(gòu),在日本企業(yè)中應(yīng)用廣泛。
  • 特點
  1. 采用“Define-by-Run”方案,即通過實際的前向計算動態(tài)定義網(wǎng)絡(luò)。
  2. 更確切地說,chainer存儲計算歷史不是編程邏輯
  3. pytorch動態(tài)圖機制思想主要就來源于chainer。

2.7.5 Lasagne/Theano

  • 概述
  1. 其實就是封裝了theano,后者是一個很老牌的框架
  2. 在2008年的時候就由Yoshua Bengio領(lǐng)導(dǎo)的蒙特利爾LISA組開源了。
  • 特點
  1. 使用成本高,需要從底層開始寫代碼構(gòu)建模型
  2. Lasagen對其進(jìn)行了封裝,使得theano使用起來更簡單。

2.7.6 Darknet

  • 概述
  1. Darknet本身是Joseph Redmon為了Yolo系列開發(fā)的框架。
  2. Joseph Redmon提出了Yolo v1,Yolo v2,Yolo v3。
  • 特點
  1. Darknet幾乎沒有依賴庫
  2. C和CUDA開始撰寫的深度學(xué)習(xí)開源框架
  3. 支持CPU和GPU
  4. Darknet跟caffe頗有幾分相似之處,卻更加輕量級,非常值得學(xué)習(xí)使用。

三、學(xué)習(xí)Tips

3.1 選擇

  1. 不管怎么說,tensorflow/pytorch你都必須會,這是目前開發(fā)者最喜歡,開源項目最豐富的兩個框架。

  2. 如果你要進(jìn)行移動端算法的開發(fā),那么Caffe是不能不會的。

  3. 如果你非常熟悉Matlab,matconvnet你不應(yīng)該錯過。

  4. 如果你追求高效輕量,那么darknetmxnet你不能不熟悉。

  5. 如果你很懶,想寫最少的代碼完成任務(wù),那么用keras吧。

  6. 如果你是java程序員,那么掌握deeplearning4j沒錯的。

  7. 其他的框架,也自有它的特點,大家可以自己多去用用。

 

3.2 如何學(xué)習(xí)開源框架

  • 要掌握好一個開源框架,通常需要做到以下幾點:

    1. 熟練掌握 不同任務(wù)數(shù)據(jù)的準(zhǔn)備和使用。
    2. 熟練掌握 模型的定義
    3. 熟練掌握 訓(xùn)練過程結(jié)果的可視化。
    4. 熟練掌握 訓(xùn)練方法測試方法
  • 學(xué)習(xí)不應(yīng)該停留在跑通官方的demo上,而是要解決實際的問題。

    • 一個框架,官方都會開放有若干的案例
    • 最常見的案例就是 以MNISI數(shù)據(jù)接口+預(yù)訓(xùn)練模型的形式,供大家快速獲得結(jié)果
  • 我們要學(xué)會從自定義數(shù)據(jù)讀取接口,自定義網(wǎng)絡(luò)的搭建,模型的訓(xùn)練,模型的可視化,模型的測試與部署等全方位進(jìn)行掌握。
     

3.3 訓(xùn)練任務(wù)

  • 所有框架的學(xué)習(xí)過程中,我們都要完成下面這個流程,只有這樣,才能叫做真正的完成了一個訓(xùn)練任務(wù)。
    在這里插入圖片描述
  • 所有的框架都可以使用同樣的一個模型
  • 網(wǎng)絡(luò)結(jié)構(gòu):優(yōu)化的時候根據(jù)不同的框架,采用了略有不同的方案。

 


四、百度百科

4.1 Pytorch

  • PyTorch是一個開源的Python機器學(xué)習(xí)庫,基于Torch,用于自然語言處理等應(yīng)用程序。
  • 由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。
  • 兩個高級功能
  1. 具有強大的GPU加速的張量計算(如NumPy)。
  2. 包含自動求導(dǎo)系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)。

 

  1. PyTorch的前身是Torch,其底層和Torch框架一樣
  2. 但是使用Python重新寫了很多內(nèi)容,不僅更加靈活,支持動態(tài)圖,而且提供了Python接口
  3. Torch7團(tuán)隊開發(fā),是一個以Python優(yōu)先的深度學(xué)習(xí)框架,不僅能夠?qū)崿F(xiàn)強大的GPU加速,同時還支持動態(tài)神經(jīng)網(wǎng)絡(luò)。
  4. PyTorch既可以看作加入了GPU支持的numpy,同時也可以看成一個擁有自動求導(dǎo)功能的強大的深度神經(jīng)網(wǎng)絡(luò)。
     
  • 優(yōu)點:
  1. PyTorch是相當(dāng)簡潔且高效快速的框架
  2. 設(shè)計追求最少的封裝
  3. 設(shè)計符合人類思維,它讓用戶盡可能地專注于實現(xiàn)自己的想法
  4. 與google的Tensorflow類似,F(xiàn)AIR的支持足以確保PyTorch獲得持續(xù)的開發(fā)更新
  5. PyTorch作者親自維護(hù)的論壇 : 供用戶交流和求教問題
  6. 入門簡單
  • 環(huán)境搭建
  • 根據(jù)PyTorch官網(wǎng),對系統(tǒng)選擇和安裝方式等靈活選擇即可。
  • 這里以anaconda為例。
  • 需要說明的是:在1.2版本以后,Pytorch只支持**cuda 9.2**以上了,所以需要對cuda進(jìn)行升級
#默認(rèn) 使用 cuda10.1
pip3 install torch===1.3.0 torchvision===0.4.1 -f https://download.pytorch.org/whl/torch_stable.
 
#cuda 9.2
pip3 install torch==1.3.0+cu92 torchvision==0.4.1+cu92 -f https://download.pytorch.org/whl/torch_stable.html
 
#cpu版本
pip3 install torch==1.3.0+cpu torchvision==0.4.1+cpu -f https://download.pytorch.org/whl/torch_stable.html

驗證輸入python 進(jìn)入

import torchtorch.__version__# 得到結(jié)果'1.3.0'

 

4.2 TensorFlow

  • TensorFlow是一個基于數(shù)據(jù)流編程(dataflow programming)的符號數(shù)學(xué)系統(tǒng)
  • 被廣泛應(yīng)用于各類機器學(xué)習(xí)(machine learning)算法的編程實現(xiàn)
  • 其前身是谷歌的神經(jīng)網(wǎng)絡(luò)算法庫DistBelief
     
  • Tensorflow擁有多層級結(jié)構(gòu)
  • 可部署于各類服務(wù)器、PC終端網(wǎng)頁支持GPU和TPU高性能數(shù)值計算
  • 被廣泛應(yīng)用于谷歌內(nèi)部的產(chǎn)品開發(fā)和各領(lǐng)域的科學(xué)研究
     
  • TensorFlow由谷歌人工智能團(tuán)隊谷歌大腦(Google Brain)開發(fā)和維護(hù)
  • 擁有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在內(nèi)的多個項目以及各類應(yīng)用程序接口(Application Programming Interface, API
  • 自2015年11月9日起,TensorFlow依據(jù)阿帕奇授權(quán)協(xié)議(Apache 2.0 open source license)開放源代碼
  • 谷歌大腦自2011年——> 大規(guī)模深度學(xué)習(xí)應(yīng)用研究 其早期工作即是TensorFlow的前身DistBelief
    DistBelief的功能是構(gòu)建各尺度下的神經(jīng)網(wǎng)絡(luò)分布式學(xué)習(xí)和交互系統(tǒng),也被稱為“第一代機器學(xué)習(xí)系統(tǒng)

  • 2015年11月,在DistBelief的基礎(chǔ)上,谷歌大腦完成了對“第二代機器學(xué)習(xí)系統(tǒng)TensorFlow的開發(fā)并對代碼開源。
    相比于前作,TensorFlow在性能上有顯著改進(jìn)、構(gòu)架靈活性和可移植性也得到增強

 
 

  • 安裝
    TensorFlow支持多種客戶端語言下的安裝和運行。
    截至版本1.12.0,綁定完成并支持版本兼容運行的語言為C和Python,
    其它(試驗性)綁定完成的語言為JavaScript、C++、Java、Go和Swift,依然處于開發(fā)階段的包括C#、Haskell、Julia、Ruby、Rust和Scala

  • Python版本

    • TensorFlow提供Python語言下的四個不同版本CPU版本(tensorflow)、包含GPU加速的版本(tensorflow-gpu),以及它們的每日編譯版本(tf-nightly、tf-nightly-gpu)。
    • TensorFlow的Python版本支持Ubuntu 16.04、Windows 7、macOS 10.12.6 Sierra、Raspbian 9.0及對應(yīng)的更高版本,其中macOS版不包含GPU加速
    • 安裝Python版TensorFlow可以使用模塊管理工具pip/pip3anaconda并在終端直接運行。
    pip install tensorflow
    conda install -c conda-forge tensorflow
    
    • 此外Python版TensorFlow也可以使用Docker安裝
    docker pull tensorflow/tensorflow:latest
    # 可用的tag包括latest、nightly、version等
    # docker鏡像文件:https://hub./r/tensorflow/tensorflow/tags/
    docker run -it -p 8888:8888 tensorflow/tensorflow:latest
    # dock下運行jupyter notebook
    docker run -it tensorflow/tensorflow bash
    # 啟用編譯了tensorflow的bash環(huán)境
    

 

  • 配置GPU
  1. TensorFlow支持在Linux和Window系統(tǒng)下使用統(tǒng)一計算架構(gòu)(Compute Unified Device Architecture, CUDA)高于3.5的NVIDIA GPU
  2. 配置GPU時要求系統(tǒng)有**NVIDIA GPU驅(qū)動384.x及以上版本**、CUDA ToolkitCUPTI(CUDA Profiling Tools Interface)9.0版本、cuDNN SDK7.2以上版本。
  3. 可選配置包括NCCL 2.2用于多GPU支持、TensorRT 4.0用于TensorFlow模型優(yōu)化
  • Linux系統(tǒng)下使用docker安裝的Python版TensorFlow也可配置GPU加速無需CUDA Toolkit

    # 確認(rèn)GPU狀態(tài)
    lspci | grep -i nvidia
    # 導(dǎo)入GPU加速的TensorFlow鏡像文件
    docker pull tensorflow/tensorflow:latest-gpu
    # 驗證安裝
    docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
    # 啟用bash環(huán)境
    docker run --runtime=nvidia -it tensorflow/tensorflow:latest-gpu bash
    

 

  • 組件與工作原理

    • TensorFlow的代碼結(jié)構(gòu)
  • 低階API

  1. 張量(tf.Tensor)
  • 張量是TensorFlow的核心數(shù)據(jù)單位
  • 在本質(zhì)上是一個任意維的數(shù)組
  • 可用的張量類型包括常數(shù)、變量、張量占位符和稀疏張量
  • 一個對各類張量進(jìn)行定義的例子:
在這里插入代碼片import numpy as np
import tensorflow as tf
# tf.constant(value, dtype=None, name='Const', verify_shape=False)
tf.constant([0, 1, 2], dtype=tf.float32) # 定義常數(shù)
# tf.placeholder(dtype, shape=None, name=None)
tf.placeholder(shape=(None, 2), dtype=tf.float32) # 定義張量占位符
#tf.Variable(<initial-value>, name=<optional-name>)
tf.Variable(np.random.rand(1, 3), name='random_var', dtype=tf.float32) # 定義變量
# tf.SparseTensor(indices, values, dense_shape)
tf.SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4]) # 定義稀疏張量
# tf.sparse_placeholder(dtype, shape=None, name=None)
tf.sparse_placeholder(dtype=tf.float32)
  • 張量的是它的維數(shù),而它的形狀是一個整數(shù)元組,指定了數(shù)組中每個維度的長度
  • 張量按NumPy數(shù)組的方式進(jìn)行切片和重構(gòu)
  • 一個進(jìn)行張量操作的例子:
# 定義二階常數(shù)張量
a = tf.constant([[0, 1, 2, 3], [4, 5, 6, 7]], dtype=tf.float32)
a_rank = tf.rank(a) # 獲取張量的秩
a_shape = tf.shape(a) # 獲取張量的形狀
b = tf.reshape(a, [4, 2]) # 對張量進(jìn)行重構(gòu)
# 運行會話以顯示結(jié)果
with tf.Session() as sess:
   print('constant tensor: {}'.format(sess.run(a)))
   print('the rank of tensor: {}'.format(sess.run(a_rank)))
   print('the shape of tensor: {}'.format(sess.run(a_shape)))
   print('reshaped tensor: {}'.format(sess.run(b)))
   # 對張量進(jìn)行切片
   print("tensor's first column: {}".format(sess.run(a[:, 0])))

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多