嘗試寫一下Keras的一些東西刊驴,算是必要的時候能備忘一下吧疮薇!希望大家多提提意見胸墙,畢竟我文筆太差,不太會寫東西按咒,留言私信都好迟隅。
以下大部分內(nèi)容來自Keras的教程,有興趣的同學(xué)可以看看原文励七,鏈接如下:
https://elitedatascience.com/keras-tutorial-deep-learning-in-python
一智袭、安裝Keras
Keras并不能直接用于構(gòu)建模型,它需要后端支持掠抬。
Keras 可以基于兩個Backend吼野,一個是 Theano,一個是 Tensorflow两波。如果我們選擇Theano作為Keras的Backend瞳步, 那么Keras就用 Theano 在底層搭建你需要的神經(jīng)網(wǎng)絡(luò);同樣腰奋,如果選擇 Tensorflow 单起,Keras 就使用 Tensorflow 在底層搭建神經(jīng)網(wǎng)絡(luò)。
所以我們需要先安裝tensorflow氛堕,其實安裝tensorflow還是蠻簡單的馏臭,這里不多說了野蝇。
安裝Keras其實就是一句話嘛讼稚!
sudo pip3 install keras
要修改后端就修改~/.keras/keras.json文件中的backend。
{
"image_dim_ordering": "tf",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "theano"
}
那么開始嘍绕沈!
二锐想、預(yù)置知識
我們需要學(xué)習(xí)一些機器學(xué)習(xí)和python的基礎(chǔ)知識,下面給兩個鏈接乍狐,有興趣的同學(xué)可以先去看看赠摇。
Understanding of essential machine learning concepts
Python programming skills
其實根據(jù)我的經(jīng)驗,一遍動手做,一遍查文檔學(xué)得會比較快藕帜。
三烫罩、超簡單的Keras例子
這個例子共分為5個步驟:
1、加載數(shù)據(jù)
2洽故、定義模型
3贝攒、編譯模型
4、訓(xùn)練模型
5时甚、評估模型
我們一步步來隘弊。
3.1 實驗數(shù)據(jù)
我們的研究對象是UCI上面的一個數(shù)據(jù)集。
Pima Indians onset of diabetes dataset
- Dataset File
-
Dataset Details
我們把數(shù)據(jù)下載下來之后保存為
pima-indians-diabetes.csv
我們先加載一下要用到的包荒适。
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
np.random.seed(2018)
接著我們加載實驗數(shù)據(jù)梨熙,數(shù)據(jù)分為9列,其中第九列是0或1刀诬,表示患病與否咽扇。
我們使用numpy的loadtxt加載數(shù)據(jù),具體參見之前的教程舅列。這里注意一下切片操作肌割,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設(shè)置為8赠橙,一共八個參數(shù)嘛耽装。后面的工作很簡單,因為在Sequential model中dense會默認設(shè)置除第一層外的各層的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激活函數(shù)凤薛,這樣收斂較快(sigmod函數(shù)兩端都很平姓建,梯度太小了)。
3.3編譯模型
Keras編譯模型非常簡單缤苫,只需要一句話速兔。
#Compile model
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
這里我們設(shè)置優(yōu)化器為adam。
3.4訓(xùn)練模型
訓(xùn)練模型使用fit函數(shù)活玲。
#Fit the model
model.fit(X,Y,epochs=150,batch_size=10)
我們把輪數(shù)設(shè)為150涣狗,batch_size為每次處理record數(shù)量谍婉,內(nèi)存大可以多設(shè)置些。
3.5評估模型
簡便起見镀钓,這里我們?nèi)匀皇褂肵穗熬,Y作為評估數(shù)據(jù),實際操作事可以利用sklearn的數(shù)據(jù)集劃分丁溅。
#evaluate the model
scores = model.evaluate(X,Y)
print("\n%s:%.2f%%" % (model.metrics_names[1],scores[1]*100))
四死陆、完整代碼
連注釋在內(nèi)一共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))