1. 程式人生 > >Keras初探(一)

Keras初探(一)

訪問本站觀看效果更佳 嘗試寫一下Keras的一些東西,算是必要的時候能備忘一下吧!希望大家多提提意見。

一、安裝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"
}

那麼開始嘍!

二、預置知識

1、載入資料 2、定義模型 3、編譯模型 4、訓練模型 5、評估模型

我們一步步來。

3.1 實驗資料

我們的研究物件是UCI上面的一個數據集。 Pima Indians onset of diabetes dataset

  • 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))