上一篇的最後我跑起了最簡單的MNIST分類訓練,但結果顯示 它並沒有使用GPU啊!!!!!!
原因在於龜毛如我,就是希望使用conda來管理我的環境,而我所做的更是使用conda安裝包的cudaToolKits
安裝方法,直接將特定版本的cuda安裝在虛擬環境之中,目的在於防止當Tensorflow更新後,很可能會去支援不同的cuda版本,我將其完美地切開,在環境管理上可謂非常輕鬆。而面對這麼風騷的操作,結果顯示... 失敗~!
好吧...這是你們逼我的,我只好用回來最簡單的了Deep Learning VM
同樣的配置方式,同樣的操作
不同在於它並非使用conda管理環境 而且擺明了要你用母環境就好(啊~我的強迫症啊!)
幫你裝好jupyter、tensorflow、cuda、cudnn,你要做的事情就是先布置jupyter和連上jupyter
如果有設定預設目錄,出現權限問題,可以使用
$sudo -R chmod 777 /<你的目錄>/
即可解決
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
60000/60000 [==============================] - 20s 331us/sample - loss: 2.2820 - acc: 0.1399 - val_loss: 2.2545 - val_acc: 0.2962
Epoch 2/12
60000/60000 [==============================] - 7s 119us/sample - loss: 2.2359 - acc: 0.2354 - val_loss: 2.1975 - val_acc: 0.4533
Epoch 3/12
60000/60000 [==============================] - 7s 116us/sample - loss: 2.1762 - acc: 0.3255 - val_loss: 2.1190 - val_acc: 0.5295
Epoch 4/12
60000/60000 [==============================] - 7s 116us/sample - loss: 2.0925 - acc: 0.4062 - val_loss: 2.0107 - val_acc: 0.5934
Epoch 5/12
60000/60000 [==============================] - 7s 116us/sample - loss: 1.9781 - acc: 0.4721 - val_loss: 1.8633 - val_acc: 0.6533
Epoch 6/12
60000/60000 [==============================] - 7s 116us/sample - loss: 1.8306 - acc: 0.5328 - val_loss: 1.6781 - val_acc: 0.7165
Epoch 7/12
60000/60000 [==============================] - 7s 116us/sample - loss: 1.6638 - acc: 0.5802 - val_loss: 1.4720 - val_acc: 0.7579
Epoch 8/12
60000/60000 [==============================] - 7s 116us/sample - loss: 1.4903 - acc: 0.6161 - val_loss: 1.2714 - val_acc: 0.7808
Epoch 9/12
60000/60000 [==============================] - 7s 116us/sample - loss: 1.3371 - acc: 0.6424 - val_loss: 1.0988 - val_acc: 0.7991
Epoch 10/12
60000/60000 [==============================] - 7s 116us/sample - loss: 1.2049 - acc: 0.6692 - val_loss: 0.9603 - val_acc: 0.8138
Epoch 11/12
60000/60000 [==============================] - 7s 116us/sample - loss: 1.1046 - acc: 0.6845 - val_loss: 0.8539 - val_acc: 0.8262
Epoch 12/12
60000/60000 [==============================] - 7s 116us/sample - loss: 1.0229 - acc: 0.7028 - val_loss: 0.7719 - val_acc: 0.8327
Test loss: 0.771869880771637
Test accuracy: 0.8327
- | CPU | GPU |
---|---|---|
時間 | 75s | 7s |
嗯! 10倍呢!
另外再給他多訓練幾次,準確度要上到90%以上是完全沒問題的XD
大致分三種,全鏈結、捲積和時間序列
又名「全鏈結神經網路」,這邊一定要推廣一下在Google Study Jam的Launching into Machine Learning課程,有個單元叫做Tensorflow Playground
的實作,淺顯易懂地帶領你走進NN這個世界。
訓練過程中可以看著自己的幾個neural被不斷地更新權重,且神奇地去Fit到圖片 這絕對不是迴歸(Regression)可以做到的事情 其中最大的關鍵就是使用activation function...不說了,實際玩一遍吧!
其中一個例子漩渦圖
Batch size
、Activation
、HIDDEN LATERS
,而Epoch代表開始後,訓練了幾次,更厲害的是,你建立的神經網路可以自己去調整每條線的權重,可以試著調整看看能不能自己調整成功。 此外,在沒有HIDDEN LAYERS的情況下,可以想像成就是Regression附上我自己亂玩的結果
又名「捲積神經網路」,本文開頭第一個範例就是使用CNN。要了解這個就要稍微提一下影像處理中的捲積
是什麼?
簡單來說,捲積我們都會有一個「捲積核」(kernel)下去掃描(如上圖中間那六個),其類似於加權平均的計算後會得到一個值,然後往左或往下跳幾格做下一次的加權平均。在CV領域已經有不少應用了,可以查看維基百科-Kernel (image processing),立面列舉如果要讓圖像模糊或是取邊緣所需要用到的 捲積和參數
那麼CNN呢?
CNN概念很簡單,就是假設 我不知道這個核參數是多少,我們希望找到它 ,然後使用梯度下降法和海量的資料去找到它們 (我自己覺得這個解釋很棒呀XD),所以才會看到淺層的CNN輸出結果可以取得簡單的邊,深層的輸出結果可以越來越趨近於一個物件,如同在上方TensorFlow Playground
中,中間層所輸出的特徵般。
又名「遞歸神經網絡」,其宗旨在於可以預測 時間序列 型的資料,如 : 說話人、文字訊息...等,與時間相關的資訊。
以上就是簡單地介紹三種網路,我希望盡可能地將我的理解分享出去,下方表格是簡單的 應用向 的整理
- | 應用 |
---|---|
FC | 分類 |
CNN | 取特徵 |
RNN | 處理時間序列問題 |
選擇模型是個很重要的關卡,但不代表必須要第一次選擇就對,而是應該在訓練過程中發現哪個模型比較好再去修改。
相信很明顯地股票是一個跟著時間在跑的資料,早些時間股票浮動可能會影響晚些的股票交易。 所以要使用RNN嗎? 再思考一下,RNN雖然處理時間序列資料,但明顯地「股票」這東西,有時候受大環境影響,有時候又有人為炒作的成分在裡面,如果能夠區分此時的資料是 人為炒作 還是 受大環境影響 呢? 抱歉,機器不會知道...
所以...RNN ?
接下來我會先使用RNN-LSTM來做看看,因為我也沒有做過,所以要等結果出來後再看看要改哪裡XD
An intuitive guide to Convolutional Neural Networks