Keras初探(一)

嘗試寫一下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))
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容