keras是基於theano的乙個深度學習框架,它的設計參考了torch,用python語言編寫,是乙個高度模組化的神經網路庫,支援gpu和cpu。使用文件在這:這個框架貌似是剛剛火起來的,使用上的問題可以到github提issue:
下面簡單介紹一下怎麼使用keras,以mnist資料庫為例,編寫乙個cnn網路結構,你將會發現特別簡單。
讀取資料
keras要求輸入的資料格式是numpy.array型別(numpy是乙個python的數值計算的庫),所以需要寫乙個指令碼來讀入mnist影象,儲存為乙個四維的data,還有乙個一維的label,**:
#coding:utf-8
"""author:wepon
source:
file:data.py
"""import os
from pil import image
import numpy as np
#讀取資料夾mnist下的42000張,為灰度圖,所以為1通道,
#如果是將彩色圖作為輸入,則將1替換為3,影象大小28*28
def load_data():
data = np.empty((42000,1,28,28),dtype="float32")
label = np.empty((42000,),dtype="uint8")
imgs = os.listdir("./mnist")
num = len(imgs)
for i in range(num):
img = image.open("./mnist/"+imgs[i])
arr = np.asarray(img,dtype="float32")
data[i,:,:,:] = arr
label[i] = int(imgs[i].split('.')[0])
return data,label
#匯入各種用到的模組元件
from __future__ import absolute_import
from __future__ import print_function
from keras.preprocessing.image import imagedatagenerator
from keras.models import sequential
from keras.layers.core import dense, dropout, activation, flatten
from keras.layers.advanced_activations import prelu
from keras.layers.convolutional import convolution2d, maxpooling2d
from keras.optimizers import sgd, adadelta, adagrad
from keras.utils import np_utils, generic_utils
from six.moves import range
from data import load_data
#載入資料
data, label = load_data()
print(data.shape[0], ' samples')
#label為0~9共10個類別,keras要求格式為binary class matrices,轉化一下,直接呼叫keras提供的這個函式
label = np_utils.to_categorical(label, 10)
###############
#開始建立cnn模型
###############
#生成乙個model
model = sequential()
#第乙個卷積層,4個卷積核,每個卷積核大小5*5。1表示輸入的的通道,灰度圖為1通道。
#border_mode可以是valid或者full,具體看這裡說明:
#啟用函式用tanh
#你還可以在model.add(activation('tanh'))後加上dropout的技巧: model.add(dropout(0.5))
model.add(convolution2d(4, 1, 5, 5, border_mode='valid'))
model.add(activation('tanh'))
#第二個卷積層,8個卷積核,每個卷積核大小3*3。4表示輸入的特徵圖個數,等於上一層的卷積核個數
#啟用函式用tanh
#採用maxpooling,poolsize為(2,2)
model.add(convolution2d(8,4, 3, 3, border_mode='valid'))
model.add(activation('tanh'))
model.add(maxpooling2d(poolsize=(2, 2)))
#第三個卷積層,16個卷積核,每個卷積核大小3*3
#啟用函式用tanh
#採用maxpooling,poolsize為(2,2)
model.add(convolution2d(16, 8, 3, 3, border_mode='valid'))
model.add(activation('tanh'))
model.add(maxpooling2d(poolsize=(2, 2)))
#全連線層,先將前一層輸出的二維特徵圖flatten為一維的。
#全連線有128個神經元節點,初始化方式為normal
model.add(flatten())
model.add(dense(16*4*4, 128, init='normal'))
model.add(activation('tanh'))
#softmax分類,輸出是10類別
model.add(dense(128, 10, init='normal'))
model.add(activation('softmax'))
#############
#開始訓練模型
##############
#使用sgd + momentum
#model.compile裡的引數loss就是損失函式(目標函式)
sgd = sgd(l2=0.0,lr=0.05, decay=1e-6, momentum=0.9, nesterov=true)
model.compile(loss='categorical_crossentropy', optimizer=sgd,class_mode="categorical")
#呼叫fit方法,就是乙個訓練過程. 訓練的epoch數設為10,batch_size為100.
#資料經過隨機打亂shuffle=true。verbose=1,訓練過程中輸出的資訊,0、1、2三種方式都可以,無關緊要。show_accuracy=true,訓練時每乙個epoch都輸出accuracy。
#validation_split=0.2,將20%的資料作為驗證集。
model.fit(data, label, batch_size=100,nb_epoch=10,shuffle=true,verbose=1,show_accuracy=true,validation_split=0.2)
#fit方法在達到設定的nb_epoch時結束,並且自動地儲存了效果最好的model,之後你可以呼叫model.evaluate()方法對測試資料進行測試,
#還有model.predict_classes,model.predict_proba等方法,具體請看文件。
**放在我github的機器學習倉庫裡:/machinelearning,非github使用者直接點右下的downloadzip。
結果如下所示,在epoch 9達到了0.98的訓練集識別率和0.97的驗證集識別率:
Keras 資料集介紹
基本的使用情況差不多介紹的差不多了,我也是邊學習邊寫部落格,其中難免有很多理解錯誤的地方或者理解不到位的地方,還請各位博友多多指點。python view plain copy print?keras.datasets.cifar10 keras.datasets.cifar10cifar10資料集...
Keras函式式API介紹
參考文獻 g ron,aur lien.hands on machine learning with scikit learn,keras,and tensorflow concepts,tools,and techniques to build intelligent systems.o reil...
keras基本使用示例一
初步了解了tensorflow以後,發現了基於tensorflow的非常簡潔的深度學習框架keras,只需要短短幾行 就可以編寫網路模型 下面是示例一,最簡單的使用例子,採用最基本的序貫模型 import keras from keras.models import sequential from ...