Reflection: Deep Learning with R-Ch3.2–3.4

imflorachen
9 min readApr 9, 2020

--

ch3.2-ch3.4

### 3.2. INTRODUCTION TO KERAS

* Keras 是 DL 的框架,提供方便的方式去訓練任何 DL 模型。

* 一開始主要目標是提供學者能夠快速地做實驗

* Keras 有以下的特色

- 在 CPU 和 GPU 上可以用一樣的 code

- 提供 user-friendly API

- 內建支援卷積網路、遞迴網路及兩種的組合

- 它支持任意網絡架構:多輸入或多輸出

模型,圖層共享,模型共享等。這意味著Keras基本上適合於構建任何深度學習模型。

* R interface (https://keras.rstudio.com)

#### 3.2.1. Keras, TensorFlow, Theano, and CNTK

* Keras為開發深度學習模型提供了高級構建塊。 它不處理諸如張量操縱和微分之類的底層操作。

* Keras以模塊化方式解決問題

* 可使用多種 backend engines,TensorFlow, Theano, Cognitive Toolkit(CNTK)

* Theano: by MILA lab at University de Montreal (http://deeplearning.net/software/theano)

* TensorFlow by Google(www.tensorflow.org)

* CNTK by Microsoft (https://github.com/Microsoft/CNTK)

* 建議使用 TensorFlow,最廣為接受,可擴展且可立即投入生產的產品。

* 在 GPU 上 TensorFlow 有封裝低階張量運算套件Eigen,且 TensorFlow 包裝了經過優化的庫深度學習操作稱為 NVIDIA CUDA Deep Neural Network library(CuDNN)

#### 3.2.2. Installing Keras

* CPU版

* GPU版-需有NVIDIA GPU, 並安裝 CUDA & cuDNN

#### 3.2.3. Developing with Keras: a quick overview

* 建模方式有兩種

- keras_model_sequential function: 僅適用於線性的層堆疊,這是目前最常見的網絡架構

- functional API: 用於層的有向無環圖,使您可以構建完全任意的體系結構。

- 有向無環圖:在圖論中,如果一個有向圖從任意頂點出發無法經過若干條邊回到該點,則這個圖是一個有向無環圖。

* 學習的過程設定於編譯步驟,設定模型的 optimizer 與 loss function 及 metrics

* 通過 fit()方法將輸入數據(和相應的目標數據)數組傳遞給模型

### 3.3. SETTING UP A DEEP-LEARNING WORKSTATION

* 使用卷積網絡進行圖像處理和使用遞歸神經網絡進行序列處理,在CPU上,甚至在快速的多核CPU上,都將非常慢。

* 如果不想安裝 GPU,則可以選擇在AWS EC2 GPU instance 或 Google Cloud Platform上運行實驗。但 cloud instance 用越久越貴。

* 最好是用 Unix 系統,如果是 windows 用戶,建議裝雙系統 Ubuntu。

#### 3.3.1. Getting Keras running: two options

* run Keras experiments within RStudio Server on EC2

* local Unix workstation,需先有 high-end NVIDIA GPU.

#### 3.3.2. Running deep-learning jobs in the cloud: pros and cons

* 在雲中運行深度學習實驗是一種簡單,低成本的方法,無需購買任何其他硬件即可開始使用的方法,如 AWS EC2 + RStudio Server.

* EC2 很貴,一小時0.9鎂,一顆GPU約1000–1500鎂。

#### 3.3.3. What is the best GPU for deep learning?

* NVIDIA GPU

* mid-2017: NVIDIA TITAN Xp

* 便宜一點的: GTX 1060

### 3.4. CLASSIFYING MOVIE REVIEWS: A BINARY CLASSIFICATION EXAMPLE

#### 3.4.1. The IMDB dataset

* 25,000 reviews for training and 25,000 reviews for testing, each set consisting of 50% negative and 50% positive reviews

* multi-assignment (%<-%) operator from zeallot package

* 變量train_data和test_data是評論列表,每個評論都是單詞索引列表(編碼單詞序列)。 train_labels和test_labels是0和1的列表,其中0代表負評,1代表好評:

* decode review 回英文單字:

#### 3.4.2. Preparing the data

* 不能直接餵 list 進模型,需要轉為 tensor

- embedding layer: 填充列表,以使它們都具有相同的長度,將它們變成整數張量shape(samples,word_indices),然後將能夠處理此類整數張量的層用作網絡中的第一層

- one-hot encode 變成 0, 1的 vector

#### 3.4.3. Building your network

* The input data is vectors, and the labels are scalars (1s and 0s)

* simple stack of fully connected (dense) layers with relu activations: layer_dense(units = 16, activation = “relu”).

* 16 是 layer 中 hidden units 的個數

* hidden unit 是圖層表示空間中的維度。

* output = relu(dot(W, input) + b),16 個 hidden units表示 W 維度是(input_dimension, 16),內積會將input data投影到16-dim的表示空間中,加上偏差向量b,最後套用relu運算。

* 中間層使用 relu 作為激活函數,最後一層用 sigmoid 輸出機率。

- relu

- sigmoid

* 網路架構

* dense layer 只有內積和加法,只會有線性的表現。為了有更多元更豐富的假設空間,該空間將受深層表示影響,則需要非線性或激活函數,如relu, prelu, elu等等。

* loss function: binary_crossentropy loss。當輸出為機率時最好使用crossentropy,是一種量測機率分配之間距離或ground-truth分配與預測值之間的距離

的量值。

* 可以 custom optimizer, loss, metric function。

#### 3.4.4. Validating your approach

* fit()返回物件history包含模型參數history$params,還有計算的metrics history$metrics。

* plot(history) 可以視覺化的觀察每個epoch的metrics。

* 觀察到何時overfitting後,就可以選擇適合的epoch數,再建模。(Listing 3.9.)

#### 3.4.5. Using a trained network to generate predictions on new data

* 預測評論是好評的機率:

* model %>% predict(x_test[1:10,])

#### 3.4.6. Further experiments

* 新增或減少 hidden layer,一層或三層…

* 新增或減少 hidden units,32 or 64 …

* 改用 mse 當作 loss function

* 改用 tanh 當作 activation

#### 3.4.7. Wrapping up

* preprocessing: 將有序的文字編碼為 binary vectors (or 其他方式)

* dense layer 和 relu activation 可以解決大部分的分類問題

* 二元分類問題,模型架構應該要以一層 1 個 unit 的 dense layer (sigmaoid activaiton)作為結尾,並且輸出0, 1之間的純量值作為機率。

* 應使用 binary_crossentropy 作為 loss function

* optimizer 選擇 rmsprop 最適合,這是最不需要擔心的部分。

* 注意測試資料的 performance 而不是訓練資料

--

--

imflorachen
imflorachen

Written by imflorachen

Hi i’m trying to write what i’ve learned from work or from books. Wish I could become a better data scientist.

No responses yet