第一部分:安裝
由於我的電腦之前已經已經配置好了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還是不太方便。