有關keras(Ubuntu14.04,python2.7)


第一部分:安裝

     由於我的電腦之前已經已經配置好了caffe,因此有關python的一切相關包都已經安裝完成。因此,即使不用Anaconda安裝依然很簡單。

     sudo pip install tensorflow

     sudo pip install keras

     測試:

     python

     from keras.models import Sequential

 

 

第二部分:如何用keras從本地中讀取圖片,並做一個二分類的神經網絡,直接貼出代碼:

# coding=utf-8
##

import os   ##和文件目錄相關的都用到該模塊"""  
from PIL import Image  ##python imaging library""" 
import numpy as np

#導入各種用到的模塊組件
#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, ZeroPadding2D
from keras.optimizers import SGD, Adadelta, Adagrad
from keras.utils import np_utils, generic_utils

def __getnum__(path):         ##統計樣本數目的函數
    fm=os.listdir(path)
    i=0
    for f in fm:           ##對於在fm中的文件
        i+=1

    return i      

def load_data(path,count):     ##數據轉換函數
    data = np.empty((count,100,100,3),dtype="float32")   
    label = np.empty((count,),dtype="int") 
    imgs = os.listdir(path)  
    num = len(imgs) 
    
    for i in range(num):  
        img = Image.open(path+imgs[i])  
        arr = np.asarray(img,dtype="float32")
        data[i,:,:,:] = arr     
        ##print i
        if i<num/2:             ##前一半label為0,后一部分數據label為1
            label[i] = int(0)  
        else:  
            label[i] = int(1) 

        return data,label         

###############
#開始建立CNN模型
###############

#生成一個model
def __CNN__(testdata,testlabel,traindata,trainlabel):
    model = Sequential()
#第一個卷積層,4個卷積核,每個卷積核大小5*5。1表示輸入的圖片的通道,灰度圖為1通道。
    model.add(Convolution2D(20 , 5 , 5, border_mode='valid',input_shape=(100,100,3))) 
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    #第二個卷積層,30個卷積核,每個卷積核大小5*5。
    #采用maxpooling,poolsize為(2,2)
    model.add(Convolution2D(20 , 3 , 3, border_mode='valid'))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    #第三個卷積層,16個卷積核,每個卷積核大小3*3
    #激活函數用tanh
    #采用maxpooling,poolsize為(2,2)
    model.add(Convolution2D(16 , 3 , 3, border_mode='valid')) 
    model.add(Activation('tanh'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

     model.add(Flatten())
    model.add(Dense(128, init='normal'))
    model.add(Activation('relu'))

    #Softmax分類,輸出是4類別
    model.add(Dense(2, init='normal'))
    model.add(Activation('softmax'))


####訓練模型
 #使用SGD + momentum沖量
    sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(loss='binary_crossentropy', optimizer=sgd,metrics=['accuracy'])

    #開始訓練, show_accuracy在每次迭代后顯示正確率 。  batch_size是每次帶入訓練的樣本數目 , nb_epoch 是迭代次數,  shuffle 是打亂樣本隨機。  
    model.fit(traindata, trainlabel, batch_size=20,epochs=100)
    #設置測試評估參數,用測試集樣本
    model.evaluate(testdata, testlabel, batch_size=20)

############
#主模塊
############
trainpath = '/home/lyyang/keras/data/train/'
testpath = '/home/lyyang/keras/data/test/'

testcount=__getnum__(testpath)
traincount=__getnum__(trainpath)

#print testcount
#print traincount

testdata,testlabel= load_data(testpath,testcount)
traindata,trainlabel= load_data(trainpath,traincount)

#print testlabel.shape
#print testlabel
#print trainlabel.shape
#print trainlabel

#label為0~1共2個類別,keras要求格式為binary class matrices,轉化一下,直接調用keras提供的這個函數
testlabel = np_utils.to_categorical(testlabel, 2)      
trainlabel = np_utils.to_categorical(trainlabel, 2)

__CNN__(testdata, testlabel, traindata, trainlabel)

    使用貓狗數據進行分類,數據可以在kaggle網站上下載。

    運行的話,

    python

    python   ***.py 

 

     不過,我沒有配置python 的 IDE,感覺寫大的project還是不太方便。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM