一次简简单单的实验课的内容而已。

首先把给出的样本素材放缩的32*32的大小,这部分可以用Python的批处理和opencv中的放缩函数resize()来做,在此我就不列出代码了。

列举出一部分放缩好的图片。

然后在利用keras简历卷积神经网络的模型,在做此实验之前,电脑要配置好Python+Theano+Keras的环境。

#生成一个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=(1,32,32))) model.add(Activation('sigmoid'))model.add(MaxPooling2D(pool_size=(2, 2)))#第二个卷积层,30个卷积核,每个卷积核大小5*5。#采用maxpooling,poolsize为(2,2)model.add(Convolution2D(30 , 5 , 5, border_mode='valid'))model.add(Activation('sigmoid'))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(500, init='normal'))model.add(Activation('sigmoid'))#Softmax分类,输出是4类别model.add(Dense(4, init='normal'))model.add(Activation('softmax'))

CNN调整参数是一个很麻烦的事情,上面各个层的参数和层数是我参考LENET-5然后自己调试出来的。我本来我没打算用keras做这个,是在caffe上做的,经过多次调整卷积核大小,模型层数,输出神经元个数等等。最后在caffe上跑出来的结果是98%也还不错。在keras上的效果更加理想。

Keras做卷积神经网络的另一个部分就是如何把图片样本变成合格的样本供其训练,具体说来就是分为两个列XY,其中X列是一个四维数组X(x1,x2,x3,x4).x1表示的是样本的数目;x2,表示图片的通道值,是RGB还是灰度图;x3,x4表示图片像素点的矩阵,一般为统一大小(这就是前面为什么要划分成32*32的原因,开心的话划分成64*64也行)。

Y列标记的就是和X列对应的图片的标记。划分的函数代码如下:

#统计样本的数目
def __getnum__(path):fm=os.listdir(path)i=0for f in fm:ff= os.listdir(path+f+'/')for n in ff:i+=1return i      #生成X,Y列
def __data_label__(path,count): data = np.empty((count,1,32,32),dtype="float32")label = np.empty((count,),dtype="uint8")i=0;filename= os.listdir(path)for ff in filename :fi=os.listdir(path+ff+'/')for f in fi:img = cv2.imread(path+ff+'/'+f,0)arr = np.asarray(img,dtype="float32")data[i,:,:,:] = arrlabel[i]=int(ff)i+=1return data,label

代码写好,各个参数调整好以后,在虚拟机或者直接调用终端运行程序,便可以得到训练的结果的啦。

(依我看,就速度方面而言,keras远胜于caffe。准确率也挺高的。我在cafe上调了无数的参数最后准确率也就98%最多了,然而相同的模型放在keras下就只错几个或者根本不错。究其原因,我还不知道,还要继续努力学习呀QAQ)

下面是这次实验的源代码:

# coding=utf-8
import cv2
import os
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
import numpy as np
from PIL import Image
from keras import backend as k#统计样本的数目
def __getnum__(path):fm=os.listdir(path)i=0for f in fm:ff= os.listdir(path+f+'/')for n in ff:i+=1return i      #生成X,Y列
def __data_label__(path,count): data = np.empty((count,1,32,32),dtype="float32")label = np.empty((count,),dtype="uint8")i=0;filename= os.listdir(path)for ff in filename :fi=os.listdir(path+ff+'/')for f in fi:img = cv2.imread(path+ff+'/'+f,0)arr = np.asarray(img,dtype="float32")data[i,:,:,:] = arrlabel[i]=int(ff)i+=1return 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=(1,32,32))) model.add(Activation('sigmoid'))model.add(MaxPooling2D(pool_size=(2, 2)))#第二个卷积层,30个卷积核,每个卷积核大小5*5。#采用maxpooling,poolsize为(2,2)model.add(Convolution2D(30 , 5 , 5, border_mode='valid'))model.add(Activation('sigmoid'))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(500, init='normal'))model.add(Activation('sigmoid'))#Softmax分类,输出是4类别model.add(Dense(4, init='normal'))model.add(Activation('softmax'))##############开始训练模型###############使用SGD + momentum冲量sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)#model.compile里的参数loss就是损失函数(目标函数)  model.compile(loss='binary_crossentropy', optimizer=sgd,metrics=['accuracy'])#开始训练, show_accuracy在每次迭代后显示正确率 。  batch_size是每次带入训练的样本数目 , nb_epoch 是迭代次数,  shuffle 是打乱样本随机。  model.fit(traindata, trainlabel, batch_size=16,nb_epoch=15,shuffle=True,verbose=1,show_accuracy=True,validation_data=(testdata, testlabel))#设置测试评估参数,用测试集样本model.evaluate(testdata, testlabel, batch_size=16,verbose=1,show_accuracy=True)############
#主模块
############
trainpath = '/home/emmons/carband_resize/train/'
testpath = '/home/emmons/carband_resize/test/'
testcount=__getnum__(testpath)
traincount=__getnum__(trainpath)
testdata,testlabel= __data_label__(testpath, testcount)
traindata,trainlabel= __data_label__(trainpath, traincount)#label为0~3共4个类别,keras要求格式为binary class matrices,转化一下,直接调用keras提供的这个函数
testlabel = np_utils.to_categorical(testlabel, 4)
trainlabel = np_utils.to_categorical(trainlabel, 4)__CNN__(testdata, testlabel, traindata, trainlabel)

【深度学习】简单地利用keras做车标识别相关推荐

  1. 常用深度学习框——Caffe/TensorFlow / Keras/ PyTorch/MXNet

    常用深度学习框--Caffe/TensorFlow / Keras/ PyTorch/MXNet 一.概述 近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括Tensor ...

  2. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)

    初学者快速掌握主流深度学习框架Tensorflow.Keras.Pytorch学习代码 一.TensorFlow 1.资源地址: 2.资源介绍: 3.配置环境: 4.资源目录: 二.Keras 1.资 ...

  3. 深度学习入门实例——基于keras的mnist手写数字识别

    本文介绍了利用keras做mnist数据集的手写数字识别. 参考网址 http://www.cnblogs.com/lc1217/p/7132364.html mnist数据集中的图片为28*28的单 ...

  4. 日月光华深度学习(一、二)深度学习基础和tf.keras

    日月光华深度学习(一.二)深度学习基础和tf.keras [2.2]--tf.keras实现线性回归 [2.5]--多层感知器(神经网络)的代码实现 [2.6]--逻辑回归与交叉熵 [2.7]--逻辑 ...

  5. 深度学习 Day 15——利用卷神经网络实现好莱坞明星识别

    深度学习 Day 15--利用卷神经网络实现好莱坞明星识别 文章目录 深度学习 Day 15--利用卷神经网络实现好莱坞明星识别 一.前言 二.我的环境 三.前期工作 1.导入依赖项并设置GPU 2. ...

  6. 深度学习 Day 4——利用RNN玩转股票预测

    深度学习 Day 4--利用RNN玩转股票预测 文章目录 深度学习 Day 4--利用RNN玩转股票预测 一.前言 二.准备工作 1.我的环境 2.设置GPU 3.加载数据 三.数据预处理 1.归一化 ...

  7. 深度学习(4)手写数字识别实战

    深度学习(4)手写数字识别实战 Step0. 数据及模型准备 1. X and Y(数据准备) 2. out=relu{relu{relu[X@W1+b1]@W2+b2}@W3+b3}out=relu ...

  8. 【深度学习-语音分类】婴儿啼哭声识别挑战赛Baseline

    [深度学习-语音分类]婴儿啼哭声识别挑战赛Baseline 比赛简介: Baseline: 1. 加载并保存数据: 2. 设置训练数据: 3. 搭建LSTM模型: 最终结果: 有需求的大佬欢迎加入我的 ...

  9. 深度学习(3)手写数字识别问题

    深度学习(3)手写数字识别问题 1. 问题归类 2. 数据集 3. Image 4. Input and Output 5. Regression VS Classification 6. Compu ...

  10. 深度学习 卷积神经网络-Pytorch手写数字识别

    深度学习 卷积神经网络-Pytorch手写数字识别 一.前言 二.代码实现 2.1 引入依赖库 2.2 加载数据 2.3 数据分割 2.4 构造数据 2.5 迭代训练 三.测试数据 四.参考资料 一. ...

最新文章

  1. Spring Boot 青睐的数据库连接池HikariCP为什么是史上最快的?
  2. 转载:Quartz.NET 入门
  3. 思科防火墙PIX ASA精华配置总结
  4. db和model用哪个开发大型项目 thinkphp_Java程序员开发大型应用程序时,必须要掌握几个的技巧...
  5. Java Spring Data Redis实战与配置参数详解 application.properties...
  6. Android4.1 onTouchEvent分析 (选字模式等)
  7. 【Python基础知识-pycharm版】第七节-函数
  8. 【笔记】jQuery源码(节点遍历)
  9. 洛谷 题解 P1135 【奇怪的电梯】
  10. js拦截物联返回键跳转到指定页面
  11. maven的常用指令
  12. 【HDU5698】瞬间移动(杨辉三角+逆元)
  13. 代理商为何要卖增值业务?
  14. javaweb项目实训总结_java web实训心得体会
  15. 云南马铃薯种薯质量追溯系统
  16. 5G 几年了,高铁信号怎么还是这么差?
  17. zoom会议设置,zoom 如何设置会议密码,每一步骤都要看一下。
  18. 安装elevation_mapping与traversability_estimation
  19. simulation(模拟器) 与 emulation(仿真器)的区别
  20. C语言中(%d %.2d %2d %02d)(%2x, %02x, %-2x, %.2x)(%f, %.2f, %2.2f)(%e, %.2e,%3.2e)的区别

热门文章

  1. 基于Html5的移动端APP开发框架
  2. manjaro linux vmware,Manjaro Linux处理vmware的vmmon、vmnet8、Network configuration is missing一堆问题的记录...
  3. StdAfx.h显示错误,无法打开
  4. MySQL下载步骤详解
  5. matlab进行下采样
  6. 用js判断ie版本,ie11被识别为ie7
  7. ipad浏览器安装java_360浏览器苹果平板下载
  8. 谷歌浏览器安装FeHelper插件
  9. PLSQL导入导出表数据、表结构
  10. quartz定时任务cron表达式详解