1. 程式人生 > >入手Keras的一系列問題(1)

入手Keras的一系列問題(1)

0. 寫在前面

從幾天開始,我就新跳入了一個坑裡,這個坑就是大家基本上競相跳的深度學習-Keras。但是入手並不順利啊,雖然它已經是深度學習中,封裝的十分棒的框架了,但是就和武器一樣,越是厲害的武器,限制條件越多。下面看看我的坎坷之路。

1. Keras安裝

1.1安裝前準備

咱屬於個人開發,要啥沒啥,環境只能是筆記本+windows+anaconda+python3.5+pycharm。
那裝Keras需要裝什麼,大家可以先看一下這裡:Keras的裝置推薦
說是要裝很多,基本上使用anaconda+pycharm的話,直接在pycharm裡直接安裝就好了。

2.2安裝後填坑

這要填的第一個坑,就是它的計算框架,預設的是TensorFlow,雖然它支援Theano,但是你想要調換的話,還需要參考:Keras切換後端,不然它預設的是TensorFlow。

缺什麼咱們再補什麼唄,於是就從Pycharm裡的庫包下載那邊去找tensorflow,別說還真有,但是安裝,額,安裝失敗。

我百思不得其解,看人家網上教程都裝的挺6的,雖然人家是linux下的吧,但也不至於裝不上吧。後來忽然想起了一個重要問題,我這是在中國。

對,tensorflow是谷歌的,於是需要翻牆。我又氣喘吁吁的翻了牆,把Tensorflow安裝了上去,我是筆記本,自己的,燒壞了顯示卡多不好,我就沒裝GPU版本的。

至此,基本上都能運行了。在我嘗試運行了一個Test以後,發現又有很多問題,原來看的是Keras中文文件。覺得不錯啊,有中文學起來快多了,後來才發現,開什麼玩笑,一個都沒法執行,總是報各種各樣的錯。後來我才去找了Keras英文文件,這才發現什麼是差距啊,英文文件寫的很好,而且還帶連線,有問題了直接就能連結過去,哎,連結過去,連結,連結不過去。。。原來是又被強了,只好又翻牆,到了TensorFlow的官方windos安裝幫助,才徹底解決。

反正中間也遇到了不少困難,報錯了,看一下報的錯,然後多去Stackoverflow那邊看看,英語的描述確實能恰到好處的解決。最後也歷經坎坷,能跑了一個測試樣例:

from keras.models import Sequential
from keras.layers import LSTM, Dense

import numpy as np
data_dim = 16
timesteps = 8
num_classes = 10

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

# Generate dummy training data
x_train = np.random.random((1000, timesteps, data_dim))
y_train = np.random.random((1000, num_classes))

# Generate dummy validation data
x_val = np.random.random((100, timesteps, data_dim))
y_val = np.random.random((100, num_classes))

model.fit(x_train, y_train,
          batch_size=64, epochs=1,
          validation_data=(x_val, y_val))

另外說一點,在英文的Keras指導手冊中,給了一個Github的Examples,Examples資料夾裡都是它文件中提到的例子,可是那些非常誘人的例子,例如使用多層感知機的路透社的新聞標題分類(2017NLPCC Shared Task也有類似的任務),結果資料集需要從網上下,然而一如既往的被強了,費了九牛二虎之力下完之後,才發現什麼不能解壓,是什麼鬼。暫時沒搞定,等我搞定了再來解釋。

2. 繪製Keras模型圖

我是剛剛入門深度學習,不太知道這些是啥意思,只聽過CNN、RNN、LSTM什麼的,根本沒有一個直觀的概念,還有什麼序貫模型和函式模型,不太懂,也沒有圖能解釋,等等!圖,在Keras中文指南里,有這樣一幅圖:
LSTM
我就想如果能視覺化多好了,才發現,確實可以,這個就用模型視覺化來解決。具體的參考Keras的模型視覺化。但是它有幾個問題,首先,我們使用的是整合開發環境,還用了Pycharm,因此我們可以去pycharm庫包那裡下載,不用那麼繁瑣,但是要下載的有這麼幾個模組:
graphviz,pydot,pydot_ng
但是graphviz使用包安裝以後還是不行,還是需要去官網安裝,並且配置環境變數。另外,最重要的一點是,當配置完環境變數以後,一定要重啟pycharm,這樣才行。

另外一點就是,現在的視覺化模組不叫做:keras.utils.visualize_util 了,改成了keras.utils.vis_utils了,因此引入的時候要特別注意。
等所有錯誤都不報的時候,我們就可以完成了繪圖的過程:

from keras.models import Sequential
from keras.layers import LSTM, Dense
#這一行新加的,用於匯入繪圖包
from keras.utils.vis_utils import plot_model

import numpy as np
data_dim = 16
timesteps = 8
num_classes = 10

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

# Generate dummy training data
x_train = np.random.random((1000, timesteps, data_dim))
y_train = np.random.random((1000, num_classes))

# Generate dummy validation data
x_val = np.random.random((100, timesteps, data_dim))
y_val = np.random.random((100, num_classes))

model.fit(x_train, y_train,
          batch_size=64, epochs=1,
          validation_data=(x_val, y_val))
#這一行新加的,用於繪圖
plot_model(model, to_file='model1.png',show_shapes=True)

3. 基本的執行過程

其實我也不太懂,只是剛開始的時候來對整個模型有一個淺顯的認識。總共做深度學習就這麼幾個步驟:
1. 載入訓練資料和測試資料
2. 訓練資料和測試資料預處理,比如向量化等。
3. 構造學習模型,也就是那個Add()那個。
4. 宣告模型的各個型別,也就是Compile()那個。
5. 然後就是fit()了,
6. 最後就是驗證模型、儲存模型等等之類的。

更細節的講解,我們需要在以後學習的過程中講解。