嘗試寫一下Keras的一些東西,算是必要的時候能備忘一下吧!希望大家多提提意見,畢竟我文筆太差,不太會寫東西,留言私信都好。
以下大部分內容來自Keras的教程,有興趣的同學可以看看原文,鏈接如下:
https://elitedatascience.com/keras-tutorial-deep-learning-in-python
一、安裝Keras
Keras并不能直接用于構建模型,它需要后端支持。
Keras 可以基于兩個Backend,一個是 Theano,一個是 Tensorflow。如果我們選擇Theano作為Keras的Backend, 那么Keras就用 Theano 在底層搭建你需要的神經網絡;同樣,如果選擇 Tensorflow ,Keras 就使用 Tensorflow 在底層搭建神經網絡。
所以我們需要先安裝tensorflow,其實安裝tensorflow還是蠻簡單的,這里不多說了。
安裝Keras其實就是一句話嘛!
sudo pip3 install keras
要修改后端就修改~/.keras/keras.json文件中的backend。
{
"image_dim_ordering": "tf",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "theano"
}
那么開始嘍!
二、預置知識
我們需要學習一些機器學習和python的基礎知識,下面給兩個鏈接,有興趣的同學可以先去看看。
Understanding of essential machine learning concepts
Python programming skills
其實根據我的經驗,一遍動手做,一遍查文檔學得會比較快。
三、超簡單的Keras例子
這個例子共分為5個步驟:
1、加載數據
2、定義模型
3、編譯模型
4、訓練模型
5、評估模型
我們一步步來。
3.1 實驗數據
我們的研究對象是UCI上面的一個數據集。
Pima Indians onset of diabetes dataset
- Dataset File
-
Dataset Details
我們把數據下載下來之后保存為
pima-indians-diabetes.csv
我們先加載一下要用到的包。
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
np.random.seed(2018)
接著我們加載實驗數據,數據分為9列,其中第九列是0或1,表示患病與否。
我們使用numpy的loadtxt加載數據,具體參見之前的教程。這里注意一下切片操作,X = dataset[:,0:8],是不含第9列的,即取到[8]之前(0-7列)。而Y = dataset[:,8]取得就是第九列。
#load prima indians dataset
dataset = np.loadtxt("pima-indians-diabetes.csv", delimiter=",")
#split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
3.2定義模型
我們來定義一個非常簡單的模型。這個模型是一些layers一個接一個連接在一起。先來確定一下輸入inputs。我們把input_dim設置為8,一共八個參數嘛。后面的工作很簡單,因為在Sequential model中dense會默認設置除第一層外的各層的inputs,畢竟是全連接嘛!
# create model
model = Sequential()
model.add(Dense(12,input_dim = 8,activation = 'relu'))
model.add(Dense(10,activation = 'relu'))
model.add(Dense(8,activation = 'relu'))
model.add(Dense(1,activation = 'sigmoid'))
我們定義了四層layer,除最后一層外我們都采用relu激活函數,這樣收斂較快(sigmod函數兩端都很平,梯度太小了)。
3.3編譯模型
Keras編譯模型非常簡單,只需要一句話。
#Compile model
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
這里我們設置優化器為adam。
3.4訓練模型
訓練模型使用fit函數。
#Fit the model
model.fit(X,Y,epochs=150,batch_size=10)
我們把輪數設為150,batch_size為每次處理record數量,內存大可以多設置些。
3.5評估模型
簡便起見,這里我們仍然使用X,Y作為評估數據,實際操作事可以利用sklearn的數據集劃分。
#evaluate the model
scores = model.evaluate(X,Y)
print("\n%s:%.2f%%" % (model.metrics_names[1],scores[1]*100))
四、完整代碼
連注釋在內一共20多行代碼,可謂非常簡單了。希望這個簡單的例子可以幫助大家入門。
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
np.random.seed(2018)
#load prima indians dataset
dataset = np.loadtxt("pima-indians-diabetes.csv", delimiter=",")
#split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12,input_dim = 8,activation = 'relu'))
model.add(Dense(10,activation = 'relu'))
model.add(Dense(8,activation = 'relu'))
model.add(Dense(1,activation = 'sigmoid'))
#Compile model
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#Fit the model
model.fit(X,Y,epochs=150,batch_size=10)
#evaluate the model
scores = model.evaluate(X,Y)
print("\n%s:%.2f%%" % (model.metrics_names[1],scores[1]*100))