Keras的基本介紹

2021-07-27 22:46:35 字數 4012 閱讀 6230

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 ...