日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CS224d-Day 2:TensorFlow 入门

發(fā)布時(shí)間:2023/12/18 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CS224d-Day 2:TensorFlow 入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CS224d-Day 2:

在 Day 1 里,先了解了一下 NLP 和 DP 的主要概念,對(duì)它們有了一個(gè)大體的印象,用向量去表示研究對(duì)象,用神經(jīng)網(wǎng)絡(luò)去學(xué)習(xí),用 TensorFlow 去訓(xùn)練模型,基本的模型和算法包括 word2vec,softmax,RNN,LSTM,GRU,CNN,大型數(shù)據(jù)的 seq2seq,還有未來(lái)比較火熱的研究方向 DMN,還有模型的調(diào)優(yōu)。

今天先不直接進(jìn)入理論學(xué)習(xí),而是先學(xué)習(xí)一下 TensorFlow,在原課程里,這部分在第7講,但是我覺(jué)得最高效地學(xué)習(xí)算法的方式,就是一邊學(xué)理論,一邊寫(xiě)代碼,實(shí)踐中才能理解更深刻。

Day 2 先認(rèn)識(shí) TensorFlow,了解一下基本用法,下一次就寫(xiě)代碼來(lái)訓(xùn)練模型算法,以問(wèn)題為導(dǎo)向,以項(xiàng)目為驅(qū)動(dòng)。


本文結(jié)構(gòu):

  • 1. TensorFlow 是什么
  • 2. 為什么需要 TensorFlow
  • 3. TensorFlow 的優(yōu)點(diǎn)
  • 4. TensorFlow 的工作原理
  • 5. 安裝
  • 6. TensorFlow 基本用法
    • 要點(diǎn)
    • 例子
    • 概念
    • 張量
    • 會(huì)話(huà)

1. TensorFlow 是什么

是一個(gè)深度學(xué)習(xí)庫(kù),由 Google 開(kāi)源,可以對(duì)定義在 Tensor(張量)上的函數(shù)自動(dòng)求導(dǎo)。

Tensor(張量)意味著 N 維數(shù)組,Flow(流)意味著基于數(shù)據(jù)流圖的計(jì)算,TensorFlow即為張量從圖的一端流動(dòng)到另一端。

它的一大亮點(diǎn)是支持異構(gòu)設(shè)備分布式計(jì)算,它能夠在各個(gè)平臺(tái)上自動(dòng)運(yùn)行模型,從電話(huà)、單個(gè)CPU / GPU到成百上千GPU卡組成的分布式系統(tǒng)。

支持CNN、RNN和LSTM算法,是目前在 Image,NLP 最流行的深度神經(jīng)網(wǎng)絡(luò)模型。


2. 為什么需要 TensorFlow 等庫(kù)

深度學(xué)習(xí)通常意味著建立具有很多層的大規(guī)模的神經(jīng)網(wǎng)絡(luò)。

除了輸入X,函數(shù)還使用一系列參數(shù),其中包括標(biāo)量值、向量以及最昂貴的矩陣和高階張量。

在訓(xùn)練網(wǎng)絡(luò)之前,需要定義一個(gè)代價(jià)函數(shù),常見(jiàn)的代價(jià)函數(shù)包括回歸問(wèn)題的方差以及分類(lèi)時(shí)候的交叉熵。

訓(xùn)練時(shí),需要連續(xù)的將多批新輸入投入網(wǎng)絡(luò),對(duì)所有的參數(shù)求導(dǎo)后,代入代價(jià)函數(shù),從而更新整個(gè)網(wǎng)絡(luò)模型。

這個(gè)過(guò)程中有兩個(gè)主要的問(wèn)題:1. 較大的數(shù)字或者張量在一起相乘百萬(wàn)次的處理,使得整個(gè)模型代價(jià)非常大。2. 手動(dòng)求導(dǎo)耗時(shí)非常久。

所以 TensorFlow 的對(duì)函數(shù)自動(dòng)求導(dǎo)以及分布式計(jì)算,可以幫我們節(jié)省很多時(shí)間來(lái)訓(xùn)練模型。


3. TensorFlow 的優(yōu)點(diǎn)

第一,基于Python,寫(xiě)的很快并且具有可讀性。

第二,在多GPU系統(tǒng)上的運(yùn)行更為順暢。

第三,代碼編譯效率較高。

第四,社區(qū)發(fā)展的非常迅速并且活躍。

第五,能夠生成顯示網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和性能的可視化圖。


4. TensorFlow 的工作原理

TensorFlow是用數(shù)據(jù)流圖(data flow graphs)技術(shù)來(lái)進(jìn)行數(shù)值計(jì)算的。

數(shù)據(jù)流圖是描述有向圖中的數(shù)值計(jì)算過(guò)程。

有向圖中,節(jié)點(diǎn)通常代表數(shù)學(xué)運(yùn)算,邊表示節(jié)點(diǎn)之間的某種聯(lián)系,它負(fù)責(zé)傳輸多維數(shù)據(jù)(Tensors)。

節(jié)點(diǎn)可以被分配到多個(gè)計(jì)算設(shè)備上,可以異步和并行地執(zhí)行操作。因?yàn)槭怯邢驁D,所以只有等到之前的入度節(jié)點(diǎn)們的計(jì)算狀態(tài)完成后,當(dāng)前節(jié)點(diǎn)才能執(zhí)行操作。


5. 安裝

極客學(xué)院有官方文檔翻譯版,講的很清楚,有各種安裝方式的講解。

我選擇基于 Anaconda 的安裝,因?yàn)檫@個(gè)很方便。

Anaconda 是一個(gè)集成許多第三方科學(xué)計(jì)算庫(kù)的 Python 科學(xué)計(jì)算環(huán)境,用 conda 作為自己的包管理工具,同時(shí)具有自己的計(jì)算環(huán)境,類(lèi)似 Virtualenv。

  • 安裝 Anaconda
    我之前已經(jīng)安裝過(guò) Anaconda 了,直接從下面進(jìn)行:

  • 建立一個(gè) conda 計(jì)算環(huán)境

# 計(jì)算環(huán)境名字叫 tensorflow: # Python 2.7 $ conda create -n tensorflow python=2.7
  • 激活環(huán)境,使用 conda 安裝 TensorFlow
$ source activate tensorflow (tensorflow)$ # Your prompt should change# Mac OS X, CPU only: (tensorflow)$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0rc0-py2-none-any.whl
  • 安裝成功后,每次使用 TensorFlow 的時(shí)候需要激活 conda 環(huán)境

  • conda 環(huán)境激活后,你可以測(cè)試是否成功,在終端進(jìn)入 python,輸入下面代碼,沒(méi)有提示錯(cuò)誤,說(shuō)明安裝 TensorFlow 成功:

$ python ... >>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() >>> print(sess.run(hello)) Hello, TensorFlow! >>> a = tf.constant(10) >>> b = tf.constant(32) >>> print(sess.run(a + b)) 42 >>>
  • 當(dāng)你不用 TensorFlow 的時(shí)候,關(guān)閉環(huán)境:
(tensorflow)$ source deactivate$ # Your prompt should change back
  • 再次使用的時(shí)候再激活:
$ source activate tensorflow (tensorflow)$ # Run Python programs that use TensorFlow. ...(tensorflow)$ source deactivate

在 Jupyter notebook 里用 TensorFlow
我在 (tensorflow)$ 直接輸入 jupyter notebook 后,輸入 import tensorflow as tf 是有錯(cuò)誤的,可以參考這里。


6. TensorFlow 基本用法

接下來(lái)按照官方文檔中的具體代碼,來(lái)看一下基本用法。

你需要理解在TensorFlow中,是如何:

  • 將計(jì)算流程表示成圖;
  • 通過(guò)Sessions來(lái)執(zhí)行圖計(jì)算;
  • 將數(shù)據(jù)表示為tensors;
  • 使用Variables來(lái)保持狀態(tài)信息;
  • 分別使用feeds和fetches來(lái)填充數(shù)據(jù)和抓取任意的操作結(jié)果;

先看個(gè)栗子:
例1,生成三維數(shù)據(jù),然后用一個(gè)平面擬合它:

# (tensorflow)$ python 用 Python API 寫(xiě) TensorFlow 示例代碼import tensorflow as tf import numpy as np# 用 NumPy 隨機(jī)生成 100 個(gè)數(shù)據(jù) x_data = np.float32(np.random.rand(2, 100)) y_data = np.dot([0.100, 0.200], x_data) + 0.300# 構(gòu)造一個(gè)線(xiàn)性模型 b = tf.Variable(tf.zeros([1])) W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0)) y = tf.matmul(W, x_data) + b# 最小化方差 loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss)# 初始化變量 init = tf.initialize_all_variables()# 啟動(dòng)圖 (graph) sess = tf.Session() sess.run(init)# 擬合平面 for step in xrange(0, 201):sess.run(train)if step % 20 == 0:print step, sess.run(W), sess.run(b)# 輸出結(jié)果為: 0 [[-0.14751725 0.75113136]] [ 0.2857058] 20 [[ 0.06342752 0.32736415]] [ 0.24482927] 40 [[ 0.10146417 0.23744738]] [ 0.27712563] 60 [[ 0.10354312 0.21220125]] [ 0.290878] 80 [[ 0.10193551 0.20427427]] [ 0.2964265] 100 [[ 0.10085492 0.201565 ]] [ 0.298612] 120 [[ 0.10035028 0.20058727]] [ 0.29946309] 140 [[ 0.10013894 0.20022322]] [ 0.29979277] 160 [[ 0.1000543 0.20008542]] [ 0.29992008] 180 [[ 0.10002106 0.20003279]] [ 0.29996923] 200 [[ 0.10000814 0.20001261]] [ 0.29998815]

注意這幾條代碼:

W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))y = tf.matmul(W, x_data) + binit = tf.initialize_all_variables()sess = tf.Session() sess.run(init)sess.run(train) print step, sess.run(W), sess.run(b)

接下來(lái)看具體概念:

  • TensorFlow 用圖來(lái)表示計(jì)算任務(wù),圖中的節(jié)點(diǎn)被稱(chēng)之為operation,縮寫(xiě)成op。
  • 一個(gè)節(jié)點(diǎn)獲得 0 個(gè)或者多個(gè)張量 tensor,執(zhí)行計(jì)算,產(chǎn)生0個(gè)或多個(gè)張量。
  • 圖必須在會(huì)話(huà)(Session)里被啟動(dòng),會(huì)話(huà)(Session)將圖的op分發(fā)到CPU或GPU之類(lèi)的設(shè)備上,同時(shí)提供執(zhí)行op的方法,這些方法執(zhí)行后,將產(chǎn)生的張量(tensor)返回。

1. 構(gòu)建圖
例2,計(jì)算矩陣相乘:

import tensorflow as tf# 創(chuàng)建一個(gè) 常量 op, 返回值 'matrix1' 代表這個(gè) 1x2 矩陣. matrix1 = tf.constant([[3., 3.]])# 創(chuàng)建另外一個(gè) 常量 op, 返回值 'matrix2' 代表這個(gè) 2x1 矩陣. matrix2 = tf.constant([[2.],[2.]])# 創(chuàng)建一個(gè)矩陣乘法 matmul op , 把 'matrix1''matrix2' 作為輸入. # 返回值 'product' 代表矩陣乘法的結(jié)果. product = tf.matmul(matrix1, matrix2)

默認(rèn)圖有三個(gè)節(jié)點(diǎn), 兩個(gè) constant() op, 和一個(gè) matmul() op. 為了真正進(jìn)行矩陣相乘運(yùn)算, 并得到矩陣乘法的結(jié)果, 你必須在會(huì)話(huà)里啟動(dòng)這個(gè)圖.

2. 張量 Tensor
從向量空間到實(shí)數(shù)域的多重線(xiàn)性映射(multilinear maps)(v是向量空間,v*是對(duì)偶空間)
例如代碼中的 [[3., 3.]],Tensor 可以看作是一個(gè) n 維的數(shù)組或列表。在 TensorFlow 中用 tensor 數(shù)據(jù)結(jié)構(gòu)來(lái)代表所有的數(shù)據(jù), 計(jì)算圖中, 操作間傳遞的數(shù)據(jù)都是 tensor。

3. 在一個(gè)會(huì)話(huà)中啟動(dòng)圖
創(chuàng)建一個(gè) Session 對(duì)象, 如果無(wú)任何創(chuàng)建參數(shù), 會(huì)話(huà)構(gòu)造器將啟動(dòng)默認(rèn)圖。
會(huì)話(huà)負(fù)責(zé)傳遞 op 所需的全部輸入,op 通常是并發(fā)執(zhí)行的。

# 啟動(dòng)默認(rèn)圖. sess = tf.Session()# 調(diào)用 sess 的 'run()' 方法, 傳入 'product' 作為該方法的參數(shù), # 觸發(fā)了圖中三個(gè) op (兩個(gè)常量 op 和一個(gè)矩陣乘法 op), # 向方法表明, 我們希望取回矩陣乘法 op 的輸出. result = sess.run(product)# 返回值 'result' 是一個(gè) numpy `ndarray` 對(duì)象. print result # ==> [[ 12.]]# 任務(wù)完成, 需要關(guān)閉會(huì)話(huà)以釋放資源。 sess.close()

交互式使用
在 Python API 中,使用一個(gè)會(huì)話(huà) Session 來(lái) 啟動(dòng)圖, 并調(diào)用 Session.run() 方法執(zhí)行操作.

為了便于在 IPython 等交互環(huán)境使用 TensorFlow,需要用 InteractiveSession 代替 Session 類(lèi), 使用 Tensor.eval() 和 Operation.run() 方法代替 Session.run()。

例3,計(jì)算 ‘x’ 減去 ‘a(chǎn)’:

# 進(jìn)入一個(gè)交互式 TensorFlow 會(huì)話(huà). import tensorflow as tf sess = tf.InteractiveSession()x = tf.Variable([1.0, 2.0]) a = tf.constant([3.0, 3.0])# 使用初始化器 initializer op 的 run() 方法初始化 'x' x.initializer.run()# 增加一個(gè)減法 sub op, 從 'x' 減去 'a'. 運(yùn)行減法 op, 輸出結(jié)果 sub = tf.sub(x, a) print sub.eval() # ==> [-2. -1.]

變量 Variable

上面用到的張量是常值張量(constant)。

變量 Variable,是維護(hù)圖執(zhí)行過(guò)程中的狀態(tài)信息的. 需要它來(lái)保持和更新參數(shù)值,是需要?jiǎng)討B(tài)調(diào)整的。

下面代碼中有 tf.initialize_all_variables,是預(yù)先對(duì)變量初始化,
Tensorflow 的變量必須先初始化,然后才有值!而常值張量是不需要的。

下面的 assign() 操作和 add() 操作,在調(diào)用 run() 之前, 它并不會(huì)真正執(zhí)行賦值和加和操作。

例4,使用變量實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)數(shù)器:

# -創(chuàng)建一個(gè)變量, 初始化為標(biāo)量 0. 初始化定義初值 state = tf.Variable(0, name="counter")# 創(chuàng)建一個(gè) op, 其作用是使 state 增加 1 one = tf.constant(1) new_value = tf.add(state, one) update = tf.assign(state, new_value)# 啟動(dòng)圖后, 變量必須先經(jīng)過(guò)`初始化` (init) op 初始化, # 才真正通過(guò)Tensorflow的initialize_all_variables對(duì)這些變量賦初值 init_op = tf.initialize_all_variables()# 啟動(dòng)默認(rèn)圖, 運(yùn)行 op with tf.Session() as sess:# 運(yùn)行 'init' opsess.run(init_op)# 打印 'state' 的初始值# 取回操作的輸出內(nèi)容, 可以在使用 Session 對(duì)象的 run() 調(diào)用 執(zhí)行圖時(shí), # 傳入一些 tensor, 這些 tensor 會(huì)幫助你取回結(jié)果. # 此處只取回了單個(gè)節(jié)點(diǎn) state,# 也可以在運(yùn)行一次 op 時(shí)一起取回多個(gè) tensor: # result = sess.run([mul, intermed])print sess.run(state)# 運(yùn)行 op, 更新 'state', 并打印 'state'for _ in range(3):sess.run(update)print sess.run(state)# 輸出:# 0 # 1 # 2 # 3

上面的代碼定義了一個(gè)如下的計(jì)算圖:

Ok,總結(jié)一下,來(lái)一個(gè)清晰的代碼:
過(guò)程就是:建圖->啟動(dòng)圖->運(yùn)行取值

計(jì)算矩陣相乘:

import tensorflow as tf# 建圖 matrix1 = tf.constant([[3., 3.]]) matrix2 = tf.constant([[2.],[2.]])product = tf.matmul(matrix1, matrix2)# 啟動(dòng)圖 sess = tf.Session()# 取值 result = sess.run(product) print resultsess.close()

上面的幾個(gè)代碼介紹了基本用法,通過(guò)觀察,有沒(méi)有覺(jué)得 tf 和 numpy 有點(diǎn)像呢。

TensorFlow和普通的Numpy的對(duì)比
在cs224d的課件中有下面這個(gè)代碼,來(lái)看一下二者之間的區(qū)別:

eval()

在 Python 中定義完 a 后,直接打印就可以看到 a。

In [37]: a = np.zeros((2,2))In [39]: print(a) [[ 0. 0.][ 0. 0.]]``` 但是在 Tensorflow 中需要顯式地輸出(evaluation,也就是說(shuō)借助eval()函數(shù))!

In [38]: ta = tf.zeros((2,2))

In [40]: print(ta)
Tensor(“zeros_1:0”, shape=(2, 2), dtype=float32)

In [41]: print(ta.eval())
[[ 0. 0.]
[ 0. 0.]]
“`

通過(guò)幾個(gè)例子了解了基本的用法,feed 在上面的例子中還沒(méi)有寫(xiě)到,下一次就能用到了,其他的可以查詢(xún)這里。


Day 1 宏觀了解了 NLP,Day 2 搞定了工具,下次要直接先進(jìn)入實(shí)戰(zhàn),訓(xùn)練模型,先從 Logistic 和 NN 開(kāi)始,一邊看模型一邊寫(xiě)代碼一邊思考模型原理,這樣理解才會(huì)更深刻!

推薦閱讀
歷史技術(shù)博文鏈接匯總
也許可以找到你想要的

總結(jié)

以上是生活随笔為你收集整理的CS224d-Day 2:TensorFlow 入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。