1. 首页
  2. 教育
  3. 深度学习

使用keras来简单的进行图片识别分类

接触深度学习3个月以来,从当初的小白零基础学习,过程十分艰苦,看了几章大牛YoshuaBengio写的deeplearning一书,粗略了解了基本常用的神经网络以及梯度更新策略,参数优化,也了解以及简单的使用常用的深度学习开发框架caffe,tensorflow,theano,sklearn机器学习库,目前keras比较火,所以使用keras来简单的进行图片识别分类。

接触深度学习3个月以来,从当初的小白零基础学习,过程十分艰苦,看了几章大牛YoshuaBengio写的deeplearning一书,粗略了解了基本常用的神经网络以及梯度更新策略,参数优化,也了解以及简单的使用常用的深度学习开发框架caffe,tensorflow,theano,sklearn机器学习库,目前keras比较火,所以使用keras来简单的进行图片识别分类。

数据集准备:

看caffe博客的时候看到的数据集,然后就下载使用,数据集可以在最后下载。

数据集一共有5类图片,一共500张,每类图片100张,训练集400张,每类80张,测试集100张,每类20张

第一步:

数据集进行处理:

使用opencv对图片进行处理,缩放图片大小为128×128大小,通道为单通道灰度图像

#coding:utf8

importos

importcv2.cvascv

importcv2

#遍历指定目录,显示目录下的所有文件名

width_scale=192#缩放尺寸宽度

height_scale=128#缩放尺寸高度

write_path=”/home/zhanghao/data/classification/test_scale/”#要写入的图片路径

#遍历每一张图片进行处理

defeachFile(filepath):

pathDir=os.listdir(filepath)

forallDirinpathDir:

child=os.path.join(‘%s%s’%(filepath,allDir))

write_child=os.path.join(‘%s%s’%(write_path,allDir))

image=cv.LoadImage(child,0)

des_image=cv.CreateImage((width_scale,height_scale),image.depth,1)

cv.Resize(image,des_image,cv2.INTER_AREA)

#cv.ShowImage(‘afe‘,des_image)

cv.SaveImage(write_child,des_image)

#break

if__name__==’__main__’:

filePathC=”/home/zhanghao/data/classification/test/”

eachFile(filePathC)

使用keras来简单的进行图片识别分类

第二步

把图片集制作成keras识别的数据集

#制作数据集

defdata_label(path,count):

data=np.empty((count,1,128,192),dtype=’float32′)#建立空的四维张量类型32位浮点

label=np.empty((count,),dtype=’uint8′)

i=0

pathDir=os.listdir(path)

foreach_imageinpathDir:

all_path=os.path.join(‘%s%s’%(path,each_image))#路径进行连接

image=cv2.imread(all_path,0)

mul_num=re.findall(r”d”,all_path)#寻找字符串中的数字,由于图像命名为300.jpg标签设置为0

num=int(mul_num[0])-3

#printnum,each_image

#cv2.imshow(“fad”,image)

#printchild

array=np.asarray(image,dtype=’float32′)

data[i,:,:,:]=array

label[i]=int(num)

i+=1

returndata,label

第三步

构建卷积神经网络进行训练和测试

#构建卷积神经网络

defcnn_model(train_data,train_label,test_data,test_label):

model=Sequential()

model.add(Convolution2D(

nb_filter=12,

nb_row=3,

nb_col=3,

border_mode=’valid’,

dim_ordering=’th’,

input_shape=(1,128,192)))

model.add(Activation(‘relu’))#激活函数使用修正线性单元

model.add(MaxPooling2D(

pool_size=(2,2),

strides=(2,2),

border_mode=’valid’))

model.add(Convolution2D(

24,

3,

3,

border_mode=’valid’,

dim_ordering=’th’))

model.add(Activation(‘relu’))

#池化层24×29×29

model.add(MaxPooling2D(

pool_size=(2,2),

strides=(2,2),

border_mode=’valid’))

model.add(Convolution2D(

48,

3,

3,

border_mode=’valid’,

dim_ordering=’th’))

model.add(Activation(‘relu’))

model.add(MaxPooling2D(

pool_size=(2,2),

strides=(2,2),

border_mode=’valid’))

model.add(Flatten())

model.add(Dense(20))

model.add(Activation(LeakyReLU(0.3)))

model.add(Dropout(0.5))

model.add(Dense(20))

model.add(Activation(LeakyReLU(0.3)))

model.add(Dropout(0.4))

model.add(Dense(5,init=’normal’))

model.add(Activation(‘softmax’))

adam=Adam(lr=0.001)

model.compile(optimizer=adam,

loss=’categorical_crossentropy’,

metrics=[‘accuracy’])

print’—————-training———————–‘

model.fit(train_data,train_label,batch_size=12,nb_epoch=35,shuffle=True,show_accuracy=True,validation_split=0.1)

print’—————-testing————————‘

loss,accuracy=model.evaluate(test_data,test_label)

print’testloss:’,loss

print’testaccuracy’,accuracy

第四步

调用上述函数进行训练预测

train_path=’/home/zhanghao/data/classification/train_scale/’

test_path=’/home/zhanghao/data/classification/test_scale/’

train_count=getnum(train_path)

test_count=getnum(test_path)

train_data,train_label=data_label(train_path,train_count)

test_data,test_label=data_label(test_path,test_count)

train_label=np_utils.to_categorical(train_label,nb_classes=5)

test_label=np_utils.to_categorical(test_label,nb_classes=5)

cnn_model(train_data,train_label,test_data,test_label)

用到的头文件

importre

importcv2

importos

importnumpyasnp

importcv2.cvascv

fromkeras.modelsimportSequential

fromkeras.layers.coreimportDense,Activation,Flatten

fromkeras.layers.convolutionalimportConvolution2D,MaxPooling2D

fromkeras.optimizersimportAdam

fromkeras.layers.advanced_activationsimportLeakyReLU

fromkeras.utilsimportnp_utils

cpu运行,迭代50次,预测准确率达到92%,还算可以的准确率

具体实现代码:https://github.com/zhanghao-JNU/keras-training

路漫漫其修远兮,吾将上下而求索

使用keras来简单的进行图片识别分类

责任编辑:lq

免责声明:本站旨在传递信息,不代表有传资讯的观点和立场。本站遵循行业规范,如转载您的文章未标注版权,请联系我们(QQ:78799268)改正。本站的原创文章,如若转载,请注明出处:http://www.ainoline.cn/jiaoyu/shenduxuexi/17147.html

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:78799268@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code