原标题:用深度学习keras的cnn做图像识别分类,准确率达97%
Keras是一个简约,高度模块化的神经网络库。
可以很容易和快速实现原型(通过总模块化,极简主义,和可扩展性)
同时支持卷积网络(vision)和复发性的网络(序列数据)。以及两者的组合。
无缝地运行在CPU和GPU上。
keras的资源库网址为https://github.com/fchollet/keras
olivettifaces人脸数据库介绍
Olivetti Faces是纽约大学的一个比较小的人脸库,由 40个人的400张图片构成,即每个人的人脸图片为10张。每张图片的灰度级为8位,每个像素的灰度大小位于0-255之间,每张图片大小为64×64。 如下图,这个图片大小是1140942,一共有2020张人脸,故每张人脸大小是(1140/20)(942/20)即5747=2679:
预处理模块
使用了PIL(Python Imaging Library)模块,是Python平台事实上的图像处理标准库。
预处理流程是:打开文件-》归一化-》将图片转为数据集-》生成label-》使用pickle序列化数据集
numpy.ndarray.flatten函数的功能是将一个矩阵平铺为向量
from PIL import Image
import numpy
import cPickle
img = Image.open('G:dataolivettifaces.gif')
# numpy supports conversion from image to ndarray and normalization by dividing 255
# 1140 * 942 ndarray
img_ndarray = numpy.asarray(img, dtype='float64') / 255
# create numpy array of 400*2679
img_rows, img_cols = 57, 47
face_data = numpy.empty((400, img_rows*img_cols))
# convert 1140*942 ndarray to 400*2679 matrix
for row in range(20):
for col in range(20):
face_data[row*20+col] = numpy.ndarray