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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow是什么?如何啟動并運(yùn)行TensorFlow?

lviY_AI_shequ ? 來源:未知 ? 作者:易水寒 ? 2018-07-29 11:16 ? 次閱讀

TensorFlow 是一款用于數(shù)值計(jì)算的強(qiáng)大的開源軟件庫,特別適用于大規(guī)模機(jī)器學(xué)習(xí)的微調(diào)。 它的基本原理很簡單:首先在 Python 中定義要執(zhí)行的計(jì)算圖(例如圖 9-1),然后 TensorFlow 使用該圖并使用優(yōu)化的 C++ 代碼高效運(yùn)行該圖。

最重要的是,Tensorflow 可以將圖分解為多個(gè)塊并在多個(gè) CPUGPU 上并行運(yùn)行(如圖 9-2 所示)。 TensorFlow 還支持分布式計(jì)算,因此您可以在數(shù)百臺服務(wù)器上分割計(jì)算,從而在合理的時(shí)間內(nèi)在龐大的訓(xùn)練集上訓(xùn)練龐大的神經(jīng)網(wǎng)絡(luò)(請參閱第 12 章)。 TensorFlow 可以訓(xùn)練一個(gè)擁有數(shù)百萬個(gè)參數(shù)網(wǎng)絡(luò),訓(xùn)練集由數(shù)十億個(gè)具有數(shù)百萬個(gè)特征的實(shí)例組成。 這應(yīng)該不會讓您吃驚,因?yàn)?TensorFlow 是 由Google 大腦團(tuán)隊(duì)開發(fā)的,它支持谷歌的大量服務(wù),例如 Google Cloud Speech,Google Photos 和 Google Search。

當(dāng) TensorFlow 于 2015 年 11 月開放源代碼時(shí),已有許多深度學(xué)習(xí)的流行開源庫(表 9-1 列出了一些),公平地說,大部分 TensorFlow 的功能已經(jīng)存在于一個(gè)庫或另一個(gè)庫中。 盡管如此,TensorFlow 的整潔設(shè)計(jì),可擴(kuò)展性,靈活性和出色的文檔(更不用說谷歌的名字)迅速將其推向了榜首。 簡而言之,TensorFlow 的設(shè)計(jì)靈活性,可擴(kuò)展性和生產(chǎn)就緒性,現(xiàn)有框架可以說只有其中三種可用。 這里有一些 TensorFlow 的亮點(diǎn):

它不僅在 Windows,Linux 和 MacOS 上運(yùn)行,而且在移動設(shè)備上運(yùn)行,包括 iOSAndroid

它提供了一個(gè)非常簡單的 Python API,名為 TF.Learn2(tensorflow.con trib.learn),與 Scikit-Learn 兼容。正如你將會看到的,你可以用幾行代碼來訓(xùn)練不同類型的神經(jīng)網(wǎng)絡(luò)。之前是一個(gè)名為 Scikit Flow(或 Skow)的獨(dú)立項(xiàng)目。

它還提供了另一個(gè)簡單的稱為 TF-slim(tensorflow.contrib.slim)的 API 來簡化構(gòu)建,訓(xùn)練和求出神經(jīng)網(wǎng)絡(luò)。

其他幾個(gè)高級 API 已經(jīng)在 TensorFlow 之上獨(dú)立構(gòu)建,如Keras或Pretty Tensor。

它的主要 Python API 提供了更多的靈活性(以更高復(fù)雜度為代價(jià))來創(chuàng)建各種計(jì)算,包括任何你能想到的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。

它包括許多 ML 操作的高效 C ++ 實(shí)現(xiàn),特別是構(gòu)建神經(jīng)網(wǎng)絡(luò)所需的 C++ 實(shí)現(xiàn)。還有一個(gè) C++ API 來定義您自己的高性能操作。

它提供了幾個(gè)高級優(yōu)化節(jié)點(diǎn)來搜索最小化損失函數(shù)的參數(shù)。由于 TensorFlow 自動處理計(jì)算您定義的函數(shù)的梯度,因此這些非常易于使用。這稱為自動分解(或autodi)。

它還附帶一個(gè)名為 TensorBoard 的強(qiáng)大可視化工具,可讓您瀏覽計(jì)算圖表,查看學(xué)習(xí)曲線等。

Google 還推出了云服務(wù)來運(yùn)行 TensorFlow 表。

最后,它擁有一支充滿熱情和樂于助人的開發(fā)團(tuán)隊(duì),以及一個(gè)不斷成長的社區(qū),致力于改善它。它是 GitHub 上最受歡迎的開源項(xiàng)目之一,并且越來越多的優(yōu)秀項(xiàng)目正在構(gòu)建之上(例如,查看https://www.tensorflow.org/或https://github.com/jtoy/awesome-tensorflow)。 要問技術(shù)問題,您應(yīng)該使用http://stackoverflow.com/并用tensorflow標(biāo)記您的問題。您可以通過 GitHub 提交錯誤和功能請求。有關(guān)一般討論,請加入Google 小組。

在本章中,我們將介紹 TensorFlow 的基礎(chǔ)知識,從安裝到創(chuàng)建,運(yùn)行,保存和可視化簡單的計(jì)算圖。 在構(gòu)建第一個(gè)神經(jīng)網(wǎng)絡(luò)之前掌握這些基礎(chǔ)知識很重要(我們將在下一章中介紹)。

安裝

讓我們開始吧!假設(shè)您按照第 2 章中的安裝說明安裝了 Jupyter 和 Scikit-Learn,您可以簡單地使用pip來安裝 TensorFlow。 如果你使用virtualenv創(chuàng)建了一個(gè)獨(dú)立的環(huán)境,你首先需要激活它:

$ cd $ML_PATH #Your ML working directory(e.g., $HOME/ml)$ source env/bin/activate

下一步,安裝 Tensorflow。

$ pip3 install --upgrade tensorflow

對于 GPU 支持,你需要安裝tensorflow-gpu而不是tensorflow。具體請參見 12 章內(nèi)容。

為了測試您的安裝,請輸入一下命令。其輸出應(yīng)該是您安裝的 Tensorflow 的版本號。

$ python -c 'import tensorflow; print(tensorflow.__version__)'1.0.0

創(chuàng)造第一個(gè)圖譜,然后運(yùn)行它

import tensorflow as tf x = tf.Variable(3, name="x") y = tf.Variable(4, name="y") f = x*x*y + y + 2

這就是它的一切! 最重要的是要知道這個(gè)代碼實(shí)際上并不執(zhí)行任何計(jì)算,即使它看起來像(尤其是最后一行)。 它只是創(chuàng)建一個(gè)計(jì)算圖譜。 事實(shí)上,變量都沒有初始化.要求出此圖,您需要打開一個(gè) TensorFlow 會話并使用它初始化變量并求出f。TensorFlow 會話負(fù)責(zé)處理在諸如 CPU 和 GPU 之類的設(shè)備上的操作并運(yùn)行它們,并且它保留所有變量值。以下代碼創(chuàng)建一個(gè)會話,初始化變量,并求出f,然后關(guān)閉會話(釋放資源):

# way1 sess = tf.Session() sess.run(x.initializer) sess.run(y.initializer) result = sess.run(f) print(result) sess.close()

不得不每次重復(fù)sess.run() 有點(diǎn)麻煩,但幸運(yùn)的是有一個(gè)更好的方法:

# way2 with tf.Session() as sess: x.initializer.run() y.initializer.run() result = f.eval() print(result)

在with塊中,會話被設(shè)置為默認(rèn)會話。 調(diào)用x.initializer.run()等效于調(diào)用tf.get_default_session().run(x.initial),f.eval()等效于調(diào)用tf.get_default_session().run(f)。 這使得代碼更容易閱讀。 此外,會話在塊的末尾自動關(guān)閉。

你可以使用global_variables_initializer()函數(shù),而不是手動初始化每個(gè)變量。 請注意,它實(shí)際上沒有立即執(zhí)行初始化,而是在圖譜中創(chuàng)建一個(gè)當(dāng)程序運(yùn)行時(shí)所有變量都會初始化的節(jié)點(diǎn):

# way3 # init = tf.global_variables_initializer() # with tf.Session() as sess: # init.run() # result = f.eval() # print(result)

在 Jupyter 內(nèi)部或在 Python shell 中,您可能更喜歡創(chuàng)建一個(gè)InteractiveSession。 與常規(guī)會話的唯一區(qū)別是,當(dāng)創(chuàng)建InteractiveSession時(shí),它將自動將其自身設(shè)置為默認(rèn)會話,因此您不需要使用模塊(但是您需要在完成后手動關(guān)閉會話):

# way4 init = tf.global_variables_initializer() sess = tf.InteractiveSession() init.run() result = f.eval() print(result) sess.close()

TensorFlow 程序通常分為兩部分:第一部分構(gòu)建計(jì)算圖譜(這稱為構(gòu)造階段),第二部分運(yùn)行它(這是執(zhí)行階段)。 建設(shè)階段通常構(gòu)建一個(gè)表示 ML 模型的計(jì)算圖譜,然后對其進(jìn)行訓(xùn)練,計(jì)算。 執(zhí)行階段通常運(yùn)行循環(huán),重復(fù)地求出訓(xùn)練步驟(例如,每個(gè)小批次),逐漸改進(jìn)模型參數(shù)。

管理圖譜

您創(chuàng)建的任何節(jié)點(diǎn)都會自動添加到默認(rèn)圖形中:

>>> x1 = tf.Variable(1) >>> x1.graph is tf.get_default_graph() True

在大多數(shù)情況下,這是很好的,但有時(shí)您可能需要管理多個(gè)獨(dú)立圖形。 您可以通過創(chuàng)建一個(gè)新的圖形并暫時(shí)將其設(shè)置為一個(gè)塊中的默認(rèn)圖形,如下所示:

>>> graph = tf.Graph() >>> with graph.as_default(): ... x2 = tf.Variable(2) ... >>> x2.graph is graph True >>> x2.graph is tf.get_default_graph() False

在 Jupyter(或 Python shell)中,通常在實(shí)驗(yàn)時(shí)多次運(yùn)行相同的命令。 因此,您可能會收到包含許多重復(fù)節(jié)點(diǎn)的默認(rèn)圖形。 一個(gè)解決方案是重新啟動 Jupyter 內(nèi)核(或 Python shell),但是一個(gè)更方便的解決方案是通過運(yùn)行tf.reset_default_graph()來重置默認(rèn)圖。

節(jié)點(diǎn)值的生命周期

求出節(jié)點(diǎn)時(shí),TensorFlow 會自動確定所依賴的節(jié)點(diǎn)集,并首先求出這些節(jié)點(diǎn)。 例如,考慮以下代碼:

# w = tf.constant(3) # x = w + 2 # y = x + 5 # z = x * 3 # with tf.Session() as sess: # print(y.eval()) # print(z.eval())

首先,這個(gè)代碼定義了一個(gè)非常簡單的圖。然后,它啟動一個(gè)會話并運(yùn)行圖來求出y:TensorFlow 自動檢測到y(tǒng)取決于x,它取決于w,所以它首先求出w,然后x,然后y,并返回y的值。最后,代碼運(yùn)行圖來求出z。同樣,TensorFlow 檢測到它必須首先求出w和x。重要的是要注意,它不會復(fù)用以前的w和x的求出結(jié)果。簡而言之,前面的代碼求出w和x兩次。所有節(jié)點(diǎn)值都在圖運(yùn)行之間刪除,除了變量值,由會話跨圖形運(yùn)行維護(hù)(隊(duì)列和讀者也保持一些狀態(tài))。變量在其初始化程序運(yùn)行時(shí)啟動其生命周期,并且在會話關(guān)閉時(shí)結(jié)束。如果要有效地求出y和z,而不像之前的代碼那樣求出w和x兩次,那么您必須要求 TensorFlow 在一個(gè)圖形運(yùn)行中求出y和z,如下面的代碼所示:

# with tf.Session() as sess: # y_val, z_val = sess.run([y, z]) # print(y_val) # 10 # print(z_val) # 15

在單進(jìn)程 TensorFlow 中,多個(gè)會話不共享任何狀態(tài),即使它們復(fù)用同一個(gè)圖(每個(gè)會話都有自己的每個(gè)變量的副本)。 在分布式 TensorFlow 中,變量狀態(tài)存儲在服務(wù)器上,而不是在會話中,因此多個(gè)會話可以共享相同的變量。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131838
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84068
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    327

    瀏覽量

    60413

原文標(biāo)題:【翻譯】Sklearn 與 TensorFlow 機(jī)器學(xué)習(xí)實(shí)用指南 —— 第9章 (上)啟動并運(yùn)行TensorFlow

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    請問ESP32如何運(yùn)行TensorFlow模型?

    請問ESP32如何運(yùn)行TensorFlow模型?
    發(fā)表于 07-09 07:30

    關(guān)于 TensorFlow

    的底層數(shù)據(jù)操作,你也可以自己寫一點(diǎn)c++代碼來豐富底層的操作。真正的可移植性(Portability)Tensorflow 在CPU和GPU上運(yùn)行,比如說可以運(yùn)行在臺式機(jī)、服務(wù)器、手機(jī)移動設(shè)備等等。想要
    發(fā)表于 03-30 19:57

    本章的目的是讓你了解和運(yùn)行 TensorFlow!

    簡介本章的目的是讓你了解和運(yùn)行 TensorFlow!在開始之前, 讓我們先看一段使用 Python API 撰寫的 TensorFlow 示例代碼, 讓你對將要學(xué)習(xí)的內(nèi)容有初步的印象.這段很短
    發(fā)表于 03-30 19:58

    使用 TensorFlow, 你必須明白 TensorFlow

    TensorFlow 圖描述了計(jì)算的過程. 為了進(jìn)行計(jì)算, 圖必須在 會話 里被啟動. 會話 將圖的 op 分發(fā)到諸如 CPU 或 GPU 之類的 設(shè)備 上, 同時(shí)提供執(zhí)行 op 的方法. 這些方法
    發(fā)表于 03-30 20:03

    TensorFlow運(yùn)行時(shí)無法加載本機(jī)

    您好,我想在AI DevCloud的計(jì)算節(jié)點(diǎn)中運(yùn)行TensorFlow時(shí)出錯。[u19741 @ c009-n031~] $ pythonPython 3.6.3 |英特爾公司| (默認(rèn),2018年
    發(fā)表于 10-19 12:00

    Anaconda之tensorflow:深度學(xué)習(xí)之Anaconda下安裝tensorflow正確運(yùn)行之史上最強(qiáng)攻略

    Anaconda之tensorflow:深度學(xué)習(xí)之Anaconda下安裝tensorflow正確運(yùn)行之史上最強(qiáng)攻略
    發(fā)表于 12-21 10:40

    深度學(xué)習(xí)框架TensorFlow&TensorFlow-GPU詳解

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

    怎么運(yùn)行Faster RCNN的tensorflow代碼

    如何運(yùn)行Faster RCNN的tensorflow代碼
    發(fā)表于 06-15 09:25

    情地使用Tensorflow吧!

    和GPU上運(yùn)行,比如說可以運(yùn)行在臺式機(jī)、服務(wù)器、手機(jī)移動設(shè)備等等。想要在沒有特殊硬件的前提下,在你的筆記本上跑一下機(jī)器學(xué)習(xí)的新想法?Tensorflow可以辦到這點(diǎn)。準(zhǔn)備將你的訓(xùn)練模型在多個(gè)CPU上規(guī)模
    發(fā)表于 07-22 10:13

    TensorFlow是什么

    、Caffe 和 MxNet,那 TensorFlow 與其他深度學(xué)習(xí)庫的區(qū)別在哪里呢?包括 TensorFlow 在內(nèi)的大多數(shù)深度學(xué)習(xí)庫能夠自動求導(dǎo)、開源、支持多種 CPU/GPU、擁有預(yù)訓(xùn)練模型,支持常用
    發(fā)表于 07-22 10:14

    TensorFlow安裝和下載(超詳細(xì))

    conda 環(huán)境: 該命令應(yīng)提示: 根據(jù)要在 conda 環(huán)境中安裝的 TensorFlow 版本,輸入以下命令: 在命令行中輸入 python,輸入以下代碼: 輸出如下:在命令行中禁用
    發(fā)表于 07-22 10:25

    TensorFlow教程|常見問題

    此文檔對關(guān)于TensorFlow的一些常見問題提供了答案,如果這里沒有你問題的答案,你可能會在 社區(qū)資源 中找到它。內(nèi)容常見問題建立 TensorFlow graph運(yùn)行 TensorFlow
    發(fā)表于 07-27 18:33

    在Ubuntu 18.04 for Arm上運(yùn)行TensorFlow和PyTorch的Docker映像

    MKLDNN_VERBOSE=1 以驗(yàn)證構(gòu)建在運(yùn)行基準(zhǔn)測試時(shí)使用 oneDNN。概括AArch64 上的TensorFlow和PyTorch的Docker 映像現(xiàn)在可以在 Docker Hub 上獲取快速
    發(fā)表于 10-14 14:25

    提出一個(gè)快速啟動自己的 TensorFlow 項(xiàng)目模板

    簡潔而精密的結(jié)構(gòu)對于深度學(xué)習(xí)項(xiàng)目來說是必不可少的,在經(jīng)過多次練習(xí)和 TensorFlow 項(xiàng)目開發(fā)之后,本文作者提出了一個(gè)結(jié)合簡便性、優(yōu)化文件結(jié)構(gòu)和良好 OOP 設(shè)計(jì)的 TensorFlow 項(xiàng)目模板。該模板可以幫助你快速啟動
    的頭像 發(fā)表于 02-07 11:47 ?3041次閱讀
    提出一個(gè)快速<b class='flag-5'>啟動</b>自己的 <b class='flag-5'>TensorFlow</b> 項(xiàng)目模板

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

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