有关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还是不太方便。