# 六、TensorFlow 和 Keras 中的 RNN
在涉及有序數據序列的問題中,例如**時間序列預測**和**自然語言處理**,上下文對于預測輸出非常有價值。可以通過攝取整個序列而不僅僅是最后一個數據點來確定這些問題的上下文。因此,先前的輸出成為當前輸入的一部分,并且當重復時,最后的輸出結果是所有先前輸入的結果以及最后一個輸入。 **循環神經網絡**(**RNN**)架構是用于處理涉及序列的機器學習問題的解決方案。
**循環神經網絡**(**RNN**)是一種用于處理順序數據的專用神經網絡架構。順序數據可以是一段時間內的觀察序列,如時間序列數據,或字符序列,單詞和句子,如文本數據。
標準神經網絡的一個假設是,輸入數據的排列方式是一個輸入不依賴于另一個輸入。然而,對于時間序列數據和文本數據,該假設不成立,因為序列中稍后出現的值通常受到之前出現的值的影響。
為了實現這一目標,RNN 通過以下方式擴展了標準神經網絡:
* 通過在計算圖中添加循環或循環,RNN 增加了將一個層的輸出用作相同或前一層的輸入的特性。
* RNN 添加存儲器單元以存儲可在當前計算中使用的先前輸入和輸出。
在本章中,我們將介紹以下有關 RNN 的主題:
* 簡單的循環神經網絡
* RNN 變種
* LSTM
* GRU
* TensorFlow 中的 RNN
* Keras 中的 RNN
* Keras 中用于 MNIST 數據的 RNN
接下來的兩章將介紹在 TensorFlow 和 Keras 中為時間序列和文本(NLP)數據構建 RNN 模型的實際示例。
# 簡單循環神經網絡
這是一個帶循環的簡單神經網絡:
RNN Network
在該圖中,神經網絡`N`接受輸入`x[t]`以產生輸出`y[t]`。由于循環,在下一步`t+1`,輸入`y[t]`和輸入`x[t+1]`產生輸出`y[t+1]`。在數學上,我們將其表示為以下等式:

當我們展開循環時,RNN 架構在時間步`t1`看起來如下:

隨著時間步長的發展,這個循環在時間步驟 5 展開如下:

在每個時間步驟,使用相同的學習函數`φ(·)`和相同的參數,`w`和`b`。
輸出`y`并不總是在每個時間步產生。相反,在每個時間步產生輸出`h`,并且對該輸出`h`應用另一個激活函數以產生輸出`y`。 RNN 的等式現在看起來像這樣:


其中,
* `w(hx)`是連接到隱藏層的`x`輸入的權重向量
* `w(hh)`是來自前一時間步的`h`的值的權重向量
* `w(yh)`是連接隱藏層和輸出層的層的權重向量
* 用于`h[t]`的函數通常是非線性函數,例如 tanh 或 ReLU
在 RNN 中,在每個時間步使用相同的參數`w(hx), w(hh), w(yh), b(h), b(y)`。這一事實大大減少了我們需要學習的基于序列模型的參數數量。
由此, RNN 在時間步`t5`如下展開,假設輸出`y`僅在時間步`t5`產生:

簡單的 RNN 由 Elman 在 1990 年引入,因此它也被稱為 Elman 網絡。然而,簡單的 RNN 無法滿足我們今天的處理需求,因此我們將在下一節中了解 RNN 的變體。
閱讀 Elman 的原始研究論文,了解 RNN 架構的起源:
```
J. L. Elman, Finding Structure in Time, Cogn. Sci., vol. 14, no. 2, pp. 179–211, 1990.
```
# RNN 變種
RNN 架構已經以多種方式擴展,以適應某些問題中的額外需求,并克服簡單 RNN 模型的缺點。我們列出了下面的 RNN 架構的一些主要擴展。
* **雙向 RNN**(**BRNN**)用于輸出依賴于序列的前一個和后一個元素的情況。 BRNN 通過堆疊兩個 RNN(稱為前向和后向層)來實現,輸出是前向和后向層 RNN 的隱藏狀態的結果。在前向層中,存儲器狀態 h 從時間步長`t`流向時間步長`t + 1`,并且在后向層中,存儲器狀態從時間步長`t`流出。到時間步`t-1`。兩個層在時間步`t`時采用相同的輸入`x[t]`,但它們在時間步`t`共同產生輸出。
* **深雙向 RNN**(**DBRNN**)通過添加多個層進一步擴展 BRNN。 BRNN 在時間維度上隱藏了層或單元。但是,通過堆疊 BRNN,我們可以在 DBRNN 中獲得分層表示。其中一個顯著差異是,在 BRNN 中,我們對同一層中的每個單元使用相同的參數,但在 DBRNN 中,我們對每個堆疊層使用不同的參數。
* **長短期記憶**(**LSTM**)網絡通過使用涉及多個非線性函數而不是一個簡單非線性函數的架構來擴展 RNN 隱藏狀態。 LSTM 由稱為**單元**的黑盒組成,取三個輸入:時間`t-1`的工作記憶(`h[t-1]`),當前輸入(`x[t]`)和時間`t-1`的長期記憶(`c[t-1]`),并產生兩個輸出:更新的工作記憶(`h[t]`)和長期記憶(`c[t]`)。單元使用稱為門的函數來決定從記憶中選擇性地保存和擦除的內容。我們在下面的部分中詳細描述了 LSTM。
閱讀以下關于 LSTM 的研究論文,以獲得有關 LSTM 起源的更多信息:
```
S. Hochreiter and J. Schmidhuber, Long Short-Term Memory, Neural Comput., vol. 9, no. 8, pp. 1735–1780, 1997.http://www.bioinf.jku.at/publications/older/2604.pdf
```
* **門控循環單元**(**GRU**)網絡是 LSTM 的簡化變體。 結合遺忘和輸入的功能,在更簡單的更新門中進行門控。它還將隱藏狀態和單元狀態組合成一個單一狀態。因此,與 LSTM 相比,GRU 在計算上更便宜。 我們在下面的部分中詳細描述了 GRU。
閱讀以下研究論文以探索 GRU 的更多細節:
```
K. Cho, B. van Merrienboer, C. Gulcehre, D. Bahdanau, F. Bougares, H. Schwenk, and Y. Bengio, Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation, 2014.https://arxiv.org/abs/1406.1078
J. Chung, C. Gulcehre, K. Cho, and Y. Bengio, Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling, pp. 1–9, 2014.?https://arxiv.org/abs/1412.3555
```
* **seq2seq** 模型將編碼器 - 解碼器架構與 RNN 架構相結合。在 Seq2Seq 架構中,模型訓練數據序列,例如文本數據或時間序列數據,然后該模型用于生成輸出序列。例如,在英文文本上訓練模型,然后從模型生成西班牙文本。 Seq2Seq 模型由編碼器和解碼器模型組成,它們都使用 RNN 架構構建。可以堆疊 Seq2Seq 模型以構建分層多層模型。
# LSTM 網絡
當 RNN 在很長的數據序列上進行訓練時,梯度往往變得非常大或非常小,它們會消失到幾乎為零。 **長短期記憶**(**LSTM**)網絡通過添加用于控制對過去信息的訪問的門,來解決消失/爆炸梯度問題。 LSTM 概念最初由 Hochreiter 和 Schmidhuber 在 1997 年引入。
閱讀以下關于 LSTM 的研究論文,以獲得有關 LSTM 起源的更多信息:
```
S. Hochreiter and J. Schmidhuber, Long Short-Term Memory, Neural Comput., vol. 9, no. 8, pp. 1735–1780, 1997.?http://www.bioinf.jku.at/publications/older/2604.pdf
```
在 RNN 中,使用重復使用的學習函數`φ`的單個神經網絡層,而在 LSTM 中,使用由四個主要函數組成的重復模塊。構建 LSTM 網絡的模塊稱為**單元**。 LSTM 單元通過選擇性地學習或擦除信息,有助于在長序列通過時更有效地訓練模型。組成單元的函數也稱為門,因為它們充當傳入和傳出單元的信息的網守。
LSTM 模型有兩種記憶:
* 用`h`(隱藏狀態)表示的工作記憶
* 用`c`(單元狀態)表示的長期記憶。
單元狀態或長期記憶僅在兩個線性相互作用下從一個單元流向另一個單元。 LSTM 將信息添加到長期記憶中,或通過門從長期記憶中刪除信息。
下圖描繪了 LSTM 單元:
The LSTM Cell
通過 LSTM 單元中的門的內部流動如下:
1. **遺忘門(或記憶門)`f()`**:`h[t-1]`和`x[t]`按照以下等式作為輸入流向`f()`門:

遺忘門的功能是決定忘記哪些信息以及要記住哪些信息。這里使用`sigmoid`激活函數,因此輸出 1 表示信息被轉移到單元內的下一步驟,輸出 0 表示信息被選擇性地丟棄。
2. **輸入門(或保存門)`i()`**:`h[t-1]`和`x[t]`按照以下等式作為輸入流向`i()`門:

輸入門的功能是決定是保存還是丟棄輸入。輸入功能還允許單元了解要保留或丟棄的候選存儲器的哪個部分。
3. **候選長期記憶**:候選長期記憶由`h[t-1]`和`x[t]`使用激活函數計算,主要是`tanh`,按照下式:

4. 接下來,組合前面的三個計算以得到更新長期記憶,由`c[t]`表示,如下式所示:

5. **輸出門(或聚焦/關注門)`o()`**:`h[t-1]`和`x[t]`按照以下等式作為輸入流向`o()`門:

輸出門的功能是決定多少信息可用于更新工作記憶。
6. 接下來,工作記憶`h[t]`從長期記憶`c[t]`和焦點/注意力向量更新,如下式所示:

其中`φ(·)`是激活函數,通常是`tanh`。
# GRU 網絡
LSTM 網絡的計算成本很高,因此,研究人員發現了一種幾乎同樣有效的 RNN 配置,稱為**門控循環單元**(**GRU**)架構。
在 GRU 中,不使用工作和長期記憶,只使用一種記憶,用`h`(隱藏狀態)表示。 GRU 單元通過**復位**和**更新**門,將信息添加到此狀態存儲器,或從該狀態存儲器中刪除信息。
下圖描繪了 GRU 單元(說明如下圖):
The GRU Cell
GRU 單元中通過門的內部流量如下:
1. **更新門`u()`**:輸入`h[t-1]`和`x[t]`按照以下公式流向`u()`門:

2. **復位門`r()`**:輸入`h[t-1]`和`x[t]`按照以下公式流向`r()`門:

1. **候選狀態記憶**:候選長期記憶是根據`r()`門,`h[t-1]`和`x[t]`的輸出計算出來的,按照下列公式:

2. 接下來,組合前面的三個計算以得到更新的狀態存儲器,由`h[t]`,表示,如下式所示:

閱讀以下研究論文以探索 GRU 的更多細節:
```
K. Cho, B. van Merrienboer, C. Gulcehre, D. Bahdanau, F. Bougares, H. Schwenk, and Y. Bengio, Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation, 2014.?https://arxiv.org/abs/1406.1078
J. Chung, C. Gulcehre, K. Cho, and Y. Bengio, Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling, pp. 1–9, 2014.?https://arxiv.org/abs/1412.3555
```
# TensorFlow RNN
在低級 TensorFlow 庫中創建 RNN 模型的基本工作流程與 MLP 幾乎相同:
* 首先創建形狀的輸入和輸出占位符`(None, #TimeSteps, #Features)`或`(批量大小, #TimeSteps, #Features)`
* 從輸入占位符中,創建一個長度為`#TimeSteps`的列表,其中包含形狀的張量`(None, #特征)`或`(批量大小, #特征)`
* 從`tf.rnn.rnn_cell`模塊創建所需 RNN 類型的單元
* 使用先前創建的單元和輸入張量列表來創建靜態或動態 RNN
* 創建輸出權重和偏差變量,并定義損失和優化器函數
* 對于所需的周期數,使用損失和優化器函數訓練模型
這個基本工作流程將在下一章的示例代碼中演示。讓我們看看可用于支持先前工作流程的各種類。
# TensorFlow RNN 單元類
`tf.nn.rnn_cell`模塊包含以下用于在 TensorFlow 中創建不同類型單元的類:
| **類** | **描述** |
| --- | --- |
| `BasicRNNCell` | 提供 RNN 單元的實現 |
| `BasicLSTMCell` | 提供 LSTM RNN 單元的實現,基于[這個頁面](http://arxiv.org/abs/1409.2329) |
| `LSTMCell` | 提供 LSTM RNN 單元,基于[這個頁面](http://deeplearning.cs.cmu.edu/pdfs/Hochreiter97_lstm.pdf)和[這個頁面](https://research.google.com/pubs/archive/43905.pdf) |
| `GRUCell` | 提供 GRU RNN 單元,基于[這個頁面](http://arxiv.org/abs/1406.1078) |
| `MultiRNNCell` | 提供由連續連接的多個簡單單元組成的 RNN 單元 |
`tf.contrib.rnn`模塊提供以下額外的類用于在 TensorFlow 中創建不同類型的單元:
| **類** | **描述** |
| --- | --- |
| `LSTMBlockCell` | 提供塊 LSTM RNN 單元,基于[這個頁面](http://arxiv.org/abs/1409.2329) |
| `LSTMBlockFusedCell` | 提供塊融合 LSTM RNN 單元,基于[這個頁面](http://arxiv.org/abs/1409.2329) |
| `GLSTMCell` | 提供分組 LSTM 單元,基于[這個頁面](https://arxiv.org/abs/1703.10722) |
| `GridLSTMCell` | 提供網格 LSTM RNN 單元,基于[這個頁面](http://arxiv.org/abs/1507.01526) |
| `GRUBlockCell` | 提供塊 GRU RNN 單元,基于[這個頁面](http://arxiv.org/abs/1406.1078) |
| `BidirectionalGridLSTMCell` | 僅在頻率上而不是在時間上提供雙向網格 LSTM |
| `NASCell` | 提供神經架構搜索 RNN 單元,基于[這個頁面](https://arxiv.org/abs/1611.01578) |
| `UGRNNCell` | 提供更新門 RNN 單元,基于[這個頁面](https://arxiv.org/abs/1611.09913) |
# TensorFlow RNN 模型構建類
TensorFlow 提供了從 RNN 單元對象創建 RNN 模型的類。靜態 RNN 類在編譯時為時間步驟添加展開的單元,而動態 RNN 類在運行時添加展開的單元用于時間步長。
* `tf.nn.static_rnn`
* `tf.nn.static_state_saving_rnn`
* `tf.nn.static_bidirectional_rnn`
* `tf.nn.dynamic_rnn`
* `tf.nn.bidirectional_dynamic_rnn`
* `tf.nn.raw_rnn`
* `tf.contrib.rnn.stack_bidirectional_dynamic_rnn`
# TensorFlow RNN 單元包裝器類
TensorFlow 還提供包裝其他單元類的類:
* `tf.contrib.rnn.LSTMBlockWrapper`
* `tf.contrib.rnn.DropoutWrapper`
* `tf.contrib.rnn.EmbeddingWrapper`
* `tf.contrib.rnn.InputProjectionWrapper`
* `tf.contrib.rnn.OutputProjectionWrapper`
* `tf.contrib.rnn.DeviceWrapper`
* `tf.contrib.rnn.ResidualWrapper`
有關 TensorFlow 中 RNN 的最新文檔,[請訪問此鏈接](https://www.tensorflow.org/api_guides/python/contrib.rnn)。
# Keras 中的 RNN
與 TensorFlow 相比,在 Keras 中創建 RNN 要容易得多。正如您在第 3 章中學到的,Keras 提供了用于創建循環網絡的函數式和順序 API。要構建 RNN 模型,您必須從`kera.layers.recurrent`模塊添加層。 Keras 在`keras.layers.recurrent`模塊中提供以下類型的循環層:
* `SimpleRNN`
* LSTM
* GRU
**有狀態模型**
Keras 循環層還支持 RNN 模型,可在批次之間保存狀態。您可以通過將`stateful`參數作為`True`傳遞來創建有狀態 RNN,LSTM 或 GRU 模型。對于有狀態模型,為輸入指定的批量大小必須是固定值。在有狀態模型中,從訓練批次中學到的隱藏狀態將重新用于下一批。如果您想在訓練期間的某個時刻重置記憶,可以通過調用`model.reset_states()`或`layer.reset_states()`函數使用額外的代碼來完成。
我們將在下一章中看到使用 Keras 構建 RNN 的示例。
[有關 Keras 循環層的最新文檔可在此鏈接中找到](https://keras.io/layers/recurrent/)。
# RNN 的應用領域
RNN 更頻繁使用的一些應用領域如下:
* **自然語言模型**:RNN 模型已用于自然語言處理(NLP),用于自然語言理解和自然語言生成任務。在 NLP 中,RNN 模型被給予一系列單詞并且它預測另一個單詞序列。因此,訓練的模型可用于生成單詞序列,稱為文本生成的字段。例如,生成故事和劇本。 NLP 的另一個領域是語言翻譯,其中給定一種語言的一系列單詞,該模型預測另一種語言的單詞序列。
* **語音和語音識別**:RNN 模型非常適用于構建模擬音頻數據的模型。在語音識別中,RNN 模型被給予音頻數據并且它預測一系列語音片段。它可用于訓練模型以識別語音命令,甚至用于與基于語音的聊天機器人的對話。
* **圖像/視頻描述或字幕生成**:RNN 模型可與 CNN 結合使用,以生成圖像和視頻中找到的元素的描述。這些描述也可用于生成圖像和視頻的標題。
* **時間序列數據**:最重要的是,RNN 對時間序列數據非常有用。大多數傳感器和系統生成時間順序很重要的數據。 RNN 模型非常適合于查找模式和預測此類數據。
通過此鏈接了解有關 RNN 的更多信息:
<http://karpathy.github.io/2015/05/21/rnn-effectiveness/>
<http://colah.github.io/posts/2015-08-Understanding-LSTMs/>
<http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/>
<https://r2rt.com/written-memories-understanding-deriving-and-extending-the-lstm.html>
# Keras 中的用于 MNIST 數據的 RNN
雖然 RNN 主要用于序列數據,但它也可用于圖像數據。我們知道圖像具有最小的兩個維度 - 高度和寬度。現在將其中一個維度視為時間步長,將其他維度視為特征。對于 MNIST,圖像大小為`28 x 28`像素,因此我們可以將 MNIST 圖像視為具有 28 個時間步長,每個時間步長具有 28 個特征。
我們將在下一章中提供時間序列和文本數據的示例,但讓我們為 Keras 中的 MNIST 構建和訓練 RNN,以快速瀏覽構建和訓練 RNN 模型的過程。
您可以按照 Jupyter 筆記本中的代碼`ch-06_RNN_MNIST_Keras`。
導入所需的模塊:
```py
import keras
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.layers.recurrent import SimpleRNN
from keras.optimizers import RMSprop
from keras.optimizers import SGD
```
獲取 MNIST 數據并將數據從 1D 中的 784 像素轉換為 2D 中的`28 x 28`像素:
```py
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets(os.path.join(datasetslib.datasets_root,
'mnist'),
one_hot=True)
X_train = mnist.train.images
X_test = mnist.test.images
Y_train = mnist.train.labels
Y_test = mnist.test.labels
n_classes = 10
n_classes = 10
X_train = X_train.reshape(-1,28,28)
X_test = X_test.reshape(-1,28,28)
```
在 Keras 構建`SimpleRNN`模型:
```py
# create and fit the SimpleRNN model
model = Sequential()
model.add(SimpleRNN(units=16, activation='relu', input_shape=(28,28)))
model.add(Dense(n_classes))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer=RMSprop(lr=0.01),
metrics=['accuracy'])
model.summary()
```
該模型如下:
```py
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
simple_rnn_1 (SimpleRNN) (None, 16) 720
_________________________________________________________________
dense_1 (Dense) (None, 10) 170
_________________________________________________________________
activation_1 (Activation) (None, 10) 0
=================================================================
Total params: 890
Trainable params: 890
Non-trainable params: 0
_________________________________________________________________
```
訓練模型并打印測試數據集的準確率:
```py
model.fit(X_train, Y_train,
batch_size=100, epochs=20)
score = model.evaluate(X_test, Y_test)
print('\nTest loss:', score[0])
print('Test accuracy:', score[1])
```
我們得到以下結果:
```py
Test loss: 0.520945608187
Test accuracy: 0.8379
```
# 總結
在本章中,我們了解了循環神經網絡(RNN)。我們了解了 RNN 的各種變體,并詳細描述了其中的兩個:長短期記憶(LSTM)網絡和門控循環單元(GRU)網絡。我們還描述了可用于在 TensorFlow 和 Keras 中構建 RNN 單元,模型和層的類。我們構建了一個簡單的 RNN 網絡,用于對 MNIST 數據集的數字進行分類。
在下一章中,我們將學習如何構建和訓練時間序列數據的 RNN 模型。
- TensorFlow 1.x 深度學習秘籍
- 零、前言
- 一、TensorFlow 簡介
- 二、回歸
- 三、神經網絡:感知器
- 四、卷積神經網絡
- 五、高級卷積神經網絡
- 六、循環神經網絡
- 七、無監督學習
- 八、自編碼器
- 九、強化學習
- 十、移動計算
- 十一、生成模型和 CapsNet
- 十二、分布式 TensorFlow 和云深度學習
- 十三、AutoML 和學習如何學習(元學習)
- 十四、TensorFlow 處理單元
- 使用 TensorFlow 構建機器學習項目中文版
- 一、探索和轉換數據
- 二、聚類
- 三、線性回歸
- 四、邏輯回歸
- 五、簡單的前饋神經網絡
- 六、卷積神經網絡
- 七、循環神經網絡和 LSTM
- 八、深度神經網絡
- 九、大規模運行模型 -- GPU 和服務
- 十、庫安裝和其他提示
- TensorFlow 深度學習中文第二版
- 一、人工神經網絡
- 二、TensorFlow v1.6 的新功能是什么?
- 三、實現前饋神經網絡
- 四、CNN 實戰
- 五、使用 TensorFlow 實現自編碼器
- 六、RNN 和梯度消失或爆炸問題
- 七、TensorFlow GPU 配置
- 八、TFLearn
- 九、使用協同過濾的電影推薦
- 十、OpenAI Gym
- TensorFlow 深度學習實戰指南中文版
- 一、入門
- 二、深度神經網絡
- 三、卷積神經網絡
- 四、循環神經網絡介紹
- 五、總結
- 精通 TensorFlow 1.x
- 一、TensorFlow 101
- 二、TensorFlow 的高級庫
- 三、Keras 101
- 四、TensorFlow 中的經典機器學習
- 五、TensorFlow 和 Keras 中的神經網絡和 MLP
- 六、TensorFlow 和 Keras 中的 RNN
- 七、TensorFlow 和 Keras 中的用于時間序列數據的 RNN
- 八、TensorFlow 和 Keras 中的用于文本數據的 RNN
- 九、TensorFlow 和 Keras 中的 CNN
- 十、TensorFlow 和 Keras 中的自編碼器
- 十一、TF 服務:生產中的 TensorFlow 模型
- 十二、遷移學習和預訓練模型
- 十三、深度強化學習
- 十四、生成對抗網絡
- 十五、TensorFlow 集群的分布式模型
- 十六、移動和嵌入式平臺上的 TensorFlow 模型
- 十七、R 中的 TensorFlow 和 Keras
- 十八、調試 TensorFlow 模型
- 十九、張量處理單元
- TensorFlow 機器學習秘籍中文第二版
- 一、TensorFlow 入門
- 二、TensorFlow 的方式
- 三、線性回歸
- 四、支持向量機
- 五、最近鄰方法
- 六、神經網絡
- 七、自然語言處理
- 八、卷積神經網絡
- 九、循環神經網絡
- 十、將 TensorFlow 投入生產
- 十一、更多 TensorFlow
- 與 TensorFlow 的初次接觸
- 前言
- 1.?TensorFlow 基礎知識
- 2. TensorFlow 中的線性回歸
- 3. TensorFlow 中的聚類
- 4. TensorFlow 中的單層神經網絡
- 5. TensorFlow 中的多層神經網絡
- 6. 并行
- 后記
- TensorFlow 學習指南
- 一、基礎
- 二、線性模型
- 三、學習
- 四、分布式
- TensorFlow Rager 教程
- 一、如何使用 TensorFlow Eager 構建簡單的神經網絡
- 二、在 Eager 模式中使用指標
- 三、如何保存和恢復訓練模型
- 四、文本序列到 TFRecords
- 五、如何將原始圖片數據轉換為 TFRecords
- 六、如何使用 TensorFlow Eager 從 TFRecords 批量讀取數據
- 七、使用 TensorFlow Eager 構建用于情感識別的卷積神經網絡(CNN)
- 八、用于 TensorFlow Eager 序列分類的動態循壞神經網絡
- 九、用于 TensorFlow Eager 時間序列回歸的遞歸神經網絡
- TensorFlow 高效編程
- 圖嵌入綜述:問題,技術與應用
- 一、引言
- 三、圖嵌入的問題設定
- 四、圖嵌入技術
- 基于邊重構的優化問題
- 應用
- 基于深度學習的推薦系統:綜述和新視角
- 引言
- 基于深度學習的推薦:最先進的技術
- 基于卷積神經網絡的推薦
- 關于卷積神經網絡我們理解了什么
- 第1章概論
- 第2章多層網絡
- 2.1.4生成對抗網絡
- 2.2.1最近ConvNets演變中的關鍵架構
- 2.2.2走向ConvNet不變性
- 2.3時空卷積網絡
- 第3章了解ConvNets構建塊
- 3.2整改
- 3.3規范化
- 3.4匯集
- 第四章現狀
- 4.2打開問題
- 參考
- 機器學習超級復習筆記
- Python 遷移學習實用指南
- 零、前言
- 一、機器學習基礎
- 二、深度學習基礎
- 三、了解深度學習架構
- 四、遷移學習基礎
- 五、釋放遷移學習的力量
- 六、圖像識別與分類
- 七、文本文件分類
- 八、音頻事件識別與分類
- 九、DeepDream
- 十、自動圖像字幕生成器
- 十一、圖像著色
- 面向計算機視覺的深度學習
- 零、前言
- 一、入門
- 二、圖像分類
- 三、圖像檢索
- 四、對象檢測
- 五、語義分割
- 六、相似性學習
- 七、圖像字幕
- 八、生成模型
- 九、視頻分類
- 十、部署
- 深度學習快速參考
- 零、前言
- 一、深度學習的基礎
- 二、使用深度學習解決回歸問題
- 三、使用 TensorBoard 監控網絡訓練
- 四、使用深度學習解決二分類問題
- 五、使用 Keras 解決多分類問題
- 六、超參數優化
- 七、從頭開始訓練 CNN
- 八、將預訓練的 CNN 用于遷移學習
- 九、從頭開始訓練 RNN
- 十、使用詞嵌入從頭開始訓練 LSTM
- 十一、訓練 Seq2Seq 模型
- 十二、深度強化學習
- 十三、生成對抗網絡
- TensorFlow 2.0 快速入門指南
- 零、前言
- 第 1 部分:TensorFlow 2.00 Alpha 簡介
- 一、TensorFlow 2 簡介
- 二、Keras:TensorFlow 2 的高級 API
- 三、TensorFlow 2 和 ANN 技術
- 第 2 部分:TensorFlow 2.00 Alpha 中的監督和無監督學習
- 四、TensorFlow 2 和監督機器學習
- 五、TensorFlow 2 和無監督學習
- 第 3 部分:TensorFlow 2.00 Alpha 的神經網絡應用
- 六、使用 TensorFlow 2 識別圖像
- 七、TensorFlow 2 和神經風格遷移
- 八、TensorFlow 2 和循環神經網絡
- 九、TensorFlow 估計器和 TensorFlow HUB
- 十、從 tf1.12 轉換為 tf2
- TensorFlow 入門
- 零、前言
- 一、TensorFlow 基本概念
- 二、TensorFlow 數學運算
- 三、機器學習入門
- 四、神經網絡簡介
- 五、深度學習
- 六、TensorFlow GPU 編程和服務
- TensorFlow 卷積神經網絡實用指南
- 零、前言
- 一、TensorFlow 的設置和介紹
- 二、深度學習和卷積神經網絡
- 三、TensorFlow 中的圖像分類
- 四、目標檢測與分割
- 五、VGG,Inception,ResNet 和 MobileNets
- 六、自編碼器,變分自編碼器和生成對抗網絡
- 七、遷移學習
- 八、機器學習最佳實踐和故障排除
- 九、大規模訓練
- 十、參考文獻