ORL人脸识别tensorflow实现
#识别率有98%左右,数据集可以百度下载,代码简洁,适合新手学习
''' author:zhipeng li ''' import numpy as np import tensorflow as tf import random,os,cv2,glob import timebatch_size = 50 def loadImageSet(folder=u'data_faces', sampleCount=5): #加载图像集,随机选择sampleCount张图片用于训练 trainData = []; testData = [];yTrain2=[];yTest2=[]#print(yTest) for k in range(40):yTrain1 = np.zeros(40)yTest1 = np.zeros(40)folder2 = os.path.join(folder, 's%d' % (k+1))""" a=glob.glob(os.path.join(folder2, '*.pgm')) for d in a: #print(d) img=cv2.imread(d)#imread读取图像返回的是三维数组,返回值是3个数组:I( : , : ,1) I( : , : ,2) I( : , : ,3) 这3个数组中应该存放的是RGB的值 #print(img)#112*92*3 cv2.imshow('image', img) """ #data 每次10*112*92 data = [ cv2.imread(d,0) for d in glob.glob(os.path.join(folder2, '*.pgm'))]#cv2.imread()第二个参数为0的时候读入为灰度图,即使原图是彩色图也会转成灰度图#glob.glob匹配所有的符合条件的文件,并将其以list的形式返回 sample = random.sample(range(10), 5)#random.sample()可以从指定的序列中,随机的截取指定长度的片断,不作原地修改 #print(sample) #sample=[0,1,2,3,4] #print(sample) trainData.extend([data[i].ravel() for i in range(10) if i in sample])#ravel将多维数组降位一维####40*5*112*92 testData.extend([data[i].ravel() for i in range(10) if i not in sample])#40*5*112*92 yTrain1[k]=1 yTest1[k]=1 #yTest.extend([]* (10-sampleCount)) #yTrain.extend([k]* sampleCount) yTrain = np.matrix(yTrain1)yTrain= np.tile(yTrain1,5)# np.tile(a,(2,1))就是把a先沿x轴(就这样称呼吧)复制1倍,即没有复制,仍然是 [0,1,2]。 再把结果沿y方向复制2倍 yTest=np.tile(yTest1,5)#沿着x轴复制5倍,增加列数 """ yTrain.shape=5,40 yTest.shape=5,40 """ yTrain2.extend(yTrain)yTest2.extend(yTest)return np.array(trainData), np.array(yTrain2), np.array(testData), np.array(yTest2)def weight_variable(shape):inital=tf.truncated_normal(shape,stddev=0.1) #产生随机变量tf.truncated_normal(shape, mean, stddev) :shape表示生成张量的维度,mean是均值,stddev是标准差。这个函数产生正太分布,均值和标准差自己设定 return tf.Variable(inital) def bias_variable(shape):inital=tf.constant(0.1,shape=shape)return tf.Variable(inital) def conv2d(x,W):#stride[1,x_movment,y_movment,1] # Must have strides[0] = strides[3] = 1 return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding="SAME") def max_pool_2x2(x):return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding="SAME")def main():#loadImageSet() xTrain_, yTrain, xTest_, yTest = loadImageSet()# 200*10304 yTrain.shape=200,40 yTest.shape=200,40 def return_next_batch(batch_size, pos):start = pos * batch_sizeend = start + batch_sizereturn xTrain_[start:end], yTrain[start:end]###定义变量占位符 x = tf.placeholder(tf.float32, [None, 10304])#112X92 y_=tf.placeholder(tf.float32,[None,40])keep_prob=tf.placeholder(tf.float32)x_image=tf.reshape(x,[-1,112,92,1])# -1表示任意数量的样本数,chanel黑白为1 print(x_image.shape)####conv1 layer### W_conv1=weight_variable([32,32,1,32])#patch 32x32,in size=1,0utsize=32 b_conv1=bias_variable([32])h_conv1=tf.nn.relu(conv2d(x_image,W_conv1)+b_conv1)#output size 112x92x32 h_pool1=max_pool_2x2(h_conv1) #output size 56x46x32 #####conv2 layer### W_conv2 = weight_variable([5, 5, 32, 64]) # patch 5x5,in size=32,0utsize=64 b_conv2 = bias_variable([64])h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) # output size 56x46x64 h_pool2 = max_pool_2x2(h_conv2) # output size 28x23x64 print(h_conv2)##func1 layer## W_fc1=weight_variable([28*23*64,800])b_fc1=bias_variable([800])# [n_samples, 28, 23, 64] ->> [n_samples, 28*23*64] h_pool2_fat=tf.reshape(h_pool2,[-1,28*23*64])h_fc1=tf.nn.sigmoid(tf.matmul(h_pool2_fat,W_fc1)+b_fc1)h_fc1_drop=tf.nn.dropout(h_fc1,keep_prob) ###dropout防止过拟合### ##func2 layer## W_fc2 = weight_variable([800, 40])b_fc2 = bias_variable([40])prediction=tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2)+b_fc2)###定义损失函数和优化器 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(prediction)))train_step = tf.train.AdagradOptimizer(1e-3).minimize(cross_entropy)def compute_accuracy(v_xs, v_ys):y_pre = sess.run(prediction, feed_dict={x: v_xs, keep_prob: 1})correct_prediction = tf.equal(tf.argmax(y_pre, 1), tf.argmax(v_ys, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))result = sess.run(accuracy, feed_dict={x: v_xs, y_: v_ys, keep_prob: 1})return resultgpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))sess.run(tf.global_variables_initializer())for i in range(10000):for j in range(4):batch_x, batch_y =return_next_batch(batch_size, j)batch_x=batch_x/255 #归一化 # training train_step 和 loss 都是由 placeholder 定义的运算,所以这里要用 feed 传入参数 sess.run(train_step, feed_dict={x: np.matrix( batch_x), y_: np.matrix(batch_y),keep_prob:0.5})if i%50==0:correct_prediction = tf.equal(tf.argmax(prediction, 1), tf.argmax(y_, 1))# 计算正确预测项的比例,因为tf.equal返回的是布尔值,使用tf.cast可以把布尔值转换成浮点数,tf.reduce_mean是求平均值 accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))# 在session中启动accuracy,输入是orl中的测试集 print("识别率:%.2f%%" % ((sess.run(accuracy, feed_dict={x: np.matrix(xTest_ / 255), y_: np.matrix(yTest),keep_prob: 1})) * 100))# 计算正确预测项的比例,因为tf.equal返回的是布尔值,使用tf.cast可以把布尔值转换成浮点数,tf.reduce_mean是求平均值 # 在session中启动accuracy,输入是orl中的测试集 #print(sess.run(cross_entropy, feed_dict={x: np.matrix((batch_x)), y_: np.matrix(batch_y)})) #if(sess.run(cross_entropy, feed_dict={x: np.matrix((batch_x)), y_: np.matrix(batch_y)})==0): # break # 评估模型,tf.argmax能给出某个tensor对象在某一维上数据最大值的索引。因为标签是由0,1组成了one-hot vector,返回的索引就是数值为1的位置 #correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) correct_prediction = tf.equal(tf.argmax(prediction, 1), tf.argmax(y_, 1))# 计算正确预测项的比例,因为tf.equal返回的是布尔值,使用tf.cast可以把布尔值转换成浮点数,tf.reduce_mean是求平均值 accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))# 在session中启动accuracy,输入是orl中的测试集 print("识别率:%.2f%%" %((sess.run(accuracy, feed_dict={x:np.matrix(xTest_/255), y_: np.matrix(yTest),keep_prob: 1}))*100))if __name__ == '__main__':main()
ORL人脸识别tensorflow实现相关推荐
- 基于PCA方法的ORL人脸识别及Python代码实现
基于PCA方法的ORL人脸识别及Python代码实现 PCA算法 方案设计 代码实现 结果分析 参考文献 PCA的理论知识已经有很多博客做了清晰的解释,主要概括为找到投影的面使得类间误差最大,转化为找 ...
- 基于神经网络的人脸识别(Tensorflow,opencv,dlib,cnn,)
写个神经网络(Tensorflow,opencv,dlib,cnn,人脸识别) lvying 20180427 基于TensorFlow训练的人脸识别神经网络 训练一个神经网络 这段时间正在学习ten ...
- 百度人脸识别 人脸识别模型_当我说人脸识别很容易时,他们笑了。 但是可以。...
百度人脸识别 人脸识别模型 by Tirmidzi Faizal Aflahi 通过提尔米兹·法扎尔·阿弗拉希 当我说人脸识别很容易时,他们笑了. 但是可以. (They laughed when I ...
- 【模式识别1】PCA+FLD人脸识别
基于OpenCV的PCA+FLD人脸识别 1. 了解ORL人脸识别数据集格式 2. OpenCV环境配置 3. 理解人脸识别OpenCV教程特别是PCA和FLD部分代码,在ORL上运行并分析它们识别结 ...
- 人工智能大作业——人脸识别系统(最终)
写在前面 时间过得飞快,时间已经距离我发第一篇文章过去2年多了,也不再从事代码工作,偶然间上到csdn翻看文章经过,看到还是有些人关注人脸识别系统的后续的,我猜大概率是学弟学妹们正在被期末实验折磨中, ...
- OpenCV+Tensorflow实现实时人脸识别演示
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 Facenet网络介绍FaceNet是 ...
- TensorFlow--实现人脸识别实验精讲 (Face Recognition using Tensorflow)
做一个人脸检测实验. 1.获取数据集(LFW) Labeled Faces in the Wild Home Menu->Download->All images as gzipped t ...
- TensorFlow 人脸识别实验 ImportError: No module named 'sklearn.model_selection'
今天在运行TensorFlow 人脸识别 python项目时,报 ImportError: No module named 'sklearn.model_selection',当我使用pip inst ...
- TensorFlow实现人脸检测和人脸识别
facenet 进行人脸识别测试 1.简介:facenet 是基于 TensorFlow 的人脸识别开源库,有兴趣的同学可以扒扒源代码:https://github.com/davidsandberg ...
- 利用卷积神经网络实现人脸识别(python+TensorFlow)
利用CNN卷积神经网络实现人脸识别(python+TensorFlow) 使用的人脸数据是耶鲁大学的一个人脸数据集Yale_64x64.mat,数据集已经上传Yale 64x64.mat 程序: '' ...
最新文章
- c++ssh连接_一步步使SSH连接您的github仓库
- Access和SQL SERVER两种数据库的直接转换,不需要第三方工具
- Ubuntu 18.04 安装 redis入门使用
- android+mvp+登录案例,android mvp实现登录
- 有趣的MS Live Labs
- 网易云信荣获第十五届中国企业年终评选「IT行业优秀技术奖」!
- leetcode题解77-子集
- DHCP Snooping,Dynamic ARP Inspection实现
- Linux串口驱动分析初始化
- 云南机房建设整体解决方案、华为智能模块化数据中心机房
- C# 读写json文件
- 关于路由器,摄像头,防火墙的搜索方法(IOT设备)
- 苹果手机几月份最便宜_苹果手机越来越便宜,安卓手机越来越贵,果真是这样吗?...
- 云原生之使用Docker部署Python应用
- 小白福利-手把手教你如何重新安装你的系统
- SAS9.4+sid更新
- 开发笔记--项目部署到linux服务器
- render方法的使用
- Docker学习1——Docker入门
- 农业信息化技术与应用案例test
热门文章
- C语言程序设计实验报告——实验四
- 计量经济学计算机实验报告,计量经济学实验报告.doc
- 实用供暖通风空调设计手册 第三版_实用供热空调设计手册第三版即将出版随想...
- AvalonDock
- php李炎恢代码,李炎恢老师thinkphp5.1视频教程含课程讲义代码SQL文件php视频
- eyb:Java代码通过FastDFS实现文件上传
- 解决联想电脑“未安装音频设备”问题
- 计算机网络的性能指标
- Head First 深入浅出系列 电子书
- 计算机系统常见故障分析与排除,电脑常见网络故障分析与排除方法