利用卷积神经网络实现人脸识别(python+TensorFlow)

利用CNN卷积神经网络实现人脸识别(python+TensorFlow)

使用的人脸数据是耶鲁大学的一个人脸数据集Yale_64x64.mat,数据集已经上传Yale 64x64.mat

程序:

'''''''''
使用Yale_64x64.mat人脸数据,利用CNN卷积神经网络实现人脸识别
Yale_64x64.mat数据构成:分为fea(人脸数据165x4096)  gnd(标签165x1)图像大小为64x64(64x64=4096)一共15个人的人脸,每个人11条人脸数据
'''
import tensorflow as tf
import numpy as np
import scipy.io as siof = open('Yale_64x64.mat','rb')
mdict = sio.loadmat(f)
# fea:数据    gnd:标签
train_data = mdict['fea']
train_label = mdict['gnd']# 将数据分为训练数据与测试数据
train_data = np.random.permutation(train_data)
train_label = np.random.permutation(train_label)
test_data = train_data[0:64]
test_label = train_label[0:64]
np.random.seed(100)
test_data = np.random.permutation(test_data)
np.random.seed(100)
test_label = np.random.permutation(test_label)
train_data = train_data.reshape(train_data.shape[0], 64, 64, 1).astype(np.float32)/255# 将标签数据改为one_hot编码格式的数据
train_labels_new = np.zeros((165, 15))
for i in range(0, 165):j = int(train_label[i, 0])-1train_labels_new[i, j] = 1test_data_input = test_data.reshape(test_data.shape[0], 64, 64, 1).astype(np.float32)/255
test_labels_input = np.zeros((64,15))
for i in range(0,64):j = int(test_label[i, 0])-1test_labels_input[i, j] = 1# CNN
data_input = tf.placeholder(tf.float32,[None, 64, 64, 1])
label_input = tf.placeholder(tf.float32,[None, 15])layer1 = tf.layers.conv2d(inputs=data_input, filters=32, kernel_size=2, strides=1, padding='SAME', activation=tf.nn.relu)
layer1_pool = tf.layers.max_pooling2d(layer1, pool_size=2, strides=2)
layer2 = tf.layers.conv2d(inputs=layer1_pool, filters=64, kernel_size=2, strides=1, padding='SAME', activation=tf.nn.relu)
layer2_pool = tf.layers.max_pooling2d(layer2, pool_size=2, strides=2)
layer3 = tf.reshape(layer2_pool, [-1,16*16*64])
layer3_relu = tf.layers.dense(layer3,1024, tf.nn.relu)
output = tf.layers.dense(layer3_relu, 15)# 计算损失函数  最小化损失函数  计算测试精确度
loss = tf.losses.softmax_cross_entropy(onehot_labels=label_input, logits=output)
train = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
accuracy = tf.metrics.accuracy(labels=tf.argmax(label_input,axis=1), predictions=tf.argmax(output, axis=1))[1]# 初始化 运行计算图
init = tf.group(tf.global_variables_initializer(),tf.local_variables_initializer())
with tf.Session() as sess:sess.run(init)tf.summary.FileWriter('D:/face_log', sess.graph)for i in range(0,1500):train_data_input = np.array(train_data)train_label_input = np.array(train_labels_new)sess.run([train, loss], feed_dict={data_input: train_data_input, label_input: train_label_input})acc = sess.run(accuracy, feed_dict={data_input: test_data_input, label_input: test_labels_input})print('step:%d  accuracy:%.2f%%' % (i+1, acc*100))

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ant语法和规范

一、前言: 以前在做JavaEE项目的时候曾经听说过这个名字,但是由于没有用到,所以也没有去学习。最近在研究Android打包的时候,看了下build.xml文件,甚是迷糊,于是学习一下,稍有心得。 二、什么是…

leetcode报错runtime error: reference binding to null pointer of type ‘std::vector<std::__cxx11::basic_

leetcode报错&#xff1a;runtime error: reference binding to null pointer of type std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::ch…

苹果开发者_苹果优秀开发者实锤 微软VS Code将支持Apple Silicon

原标题&#xff1a;苹果优秀开发者实锤 微软VS Code将支持Apple Silicon【CNMO新闻】前不久&#xff0c;苹果正式推出搭载Apple M1芯片的Mac产品&#xff0c;至此Mac产品线也将采用ARM架构。产品发布会后没多久&#xff0c;微软Visual Studio Code团队发文称&#xff0c;旗下的…

芯片的二线战场:14nm与12nm争夺战

来源&#xff1a;半导体行业观察在半导体制造领域&#xff0c;10nm、7nm及更先进制程的竞争正在变得越来越不激烈&#xff0c;其主要原因自然是投入巨大、风险高&#xff0c;愿意进入的玩家越来越少&#xff0c;目前只剩下台积电、三星和英特尔这三家了&#xff0c;这里显然成为…

python+OpenCV检测条形码

今天看到一篇关于条形码检测的文章&#xff0c;还是存在一些问题的&#xff0c;昨天我陪朋友去取快递的时候&#xff0c;看到了关于条形码检测在现实场景中的应用&#xff0c;于是&#xff0c;便想着实现一波&#xff0c;并且对程序中的一些问题做了一些修改。 首先要确定调用…

《软件测试》实验四

白盒测试 实验目的 &#xff08;1&#xff09; 掌握静态分析代码的技巧 &#xff08;2&#xff09; 学习黑盒测试中的等价类划分 实验内容 一、 找出函数中存在的问题。以下题目均在Lab04项目中完成。 1、 某站点通过用…

C++对字符串每个字母按照字典顺序排序

#include<iostream> #include<string> #include<algorithm> using namespace std;int main() {string ss"hello";sort(ss.begin(),ss.end());cout<<ss<<endl; //ehlloreturn 0; }

快搜浏览器_让微软丢大脸的edge浏览器终于出新版了!

九月份&#xff0c;基于 Chromium 内核的全新微软 Edge 浏览器开启 Beta 版本的测试&#xff0c;我看到使用全新内核的edge浏览器&#xff0c;以及官方加入的 IE 模式、隐私工具等一些更好用的新功能后&#xff0c;我暂时放下用了很长时间的老版本的edge浏览器&#xff0c;投入…

逻辑回归实现多分类任务(python+TensorFlow+mnist)

逻辑回归实现多分类任务&#xff08;pythonTensorFlowmnist&#xff09; 逻辑回归是统计学中的一种经典方法&#xff0c;虽然叫回归&#xff0c;但在机器学习领域&#xff0c;逻辑回归通常情况下当成一个分类任务&#xff0c;softmax就是由其演变而来&#xff0c;逻辑回归一般用…

物理哲学和生物哲学的对抗

来源&#xff1a;科学技术哲学相对论革命在上一讲中&#xff0c;我们提到第二次科学革命始于18世纪后期的化学革命&#xff0c;它的两大标志是&#xff1a;1. 近代西方科学的古典科学传统和培根科学传统融合&#xff0c;西方科学现代化&#xff1b;2. 科学和技术结合&#xff0…

pytorch将label转为one hot形式

label_one_hot torch.nn.functional.one_hot(labels, self.num_classes).float().to(self.device) https://pytorch.org/docs/stable/nn.functional.html#torch.nn.functional.one_hot

输入相关函数

1、cin>> &#xff08;1&#xff09;用法一&#xff1a;输入一个数字 #include using namespace std; main () { int a,b; cin>>a>>b; cout<<ab<<endl; } 输入&#xff1a; 2[回车]3[回车] 输出&#xff1a; 5 &#xff08;2&#xf…

cpu开核_新锐龙让AMD重返巅峰,但逆袭的50年里这些CPU也不应忘记

AMD从成立至今无疑有着许多神奇的经历&#xff0c;比如其创始人一开始只能艰难地筹集到5000美元创业&#xff0c;到如今AMD成为一家年营业额达到65亿美元的公司&#xff0c;这位创始人创始人杰里.桑德斯也赋予了AMD永不放弃&#xff0c;永不投降的精神。曾有过无比辉煌的历史&a…

二隐层的神经网络实现MNIST数据集分类

二隐层的神经网络实现MNIST数据集分类 传统的人工神经网络包含三部分&#xff0c;输入层、隐藏层和输出层。对于一个神经网络模型的确定需要考虑以下几个方面&#xff1a; 隐藏层的层数以及各层的神经元数量各层激活函数的选择输入层输入数据的shape输出层神经元的数量以上神经…

Android之SurfaceView

SurfaceView也是继承了View&#xff0c;但是我们并不需要去实现它的draw方法来绘制自己&#xff0c;为什么呢&#xff1f; 因为它和View有一个很大的区别&#xff0c;View在UI线程去更新自己&#xff1b;而SurfaceView则在一个子线程中去更新自己&#xff1b;这也显示出了它的…

MATLAB画图设置线条透明度

plot1 plot(x,y); plot1.Color(4) 0.5; 调节Color(4)这个参数可以设置不同的透明度

日韩决裂,半导体谁最受伤?

来源&#xff1a; 半导体行业观察日本政府于7月1日公布&#xff0c;要加强对韩国的出口管理&#xff0c;7月4日发起了“氟化聚酰亚胺&#xff08;Polymide&#xff09;”、“EUV Resist&#xff08;光阻剂&#xff09;”、“氟化氢”三种半导体材料的出口限制。根据此次出口限制…

验证码随机生成

验证码随机生成 这里主要使用到的库是captcha库&#xff0c;下载的命令如下&#xff1a; pip install captcha 验证码随机生成代码&#xff0c;(python 版本&#xff1a;3.6 captcha 版本&#xff1a;0.3) from captcha.image import ImageCaptcha import numpy as np …

oracle的基本数据类型(转载)

数据类型是在设计表结构中需要定义的&#xff0c;选择适当的数据类型可以节省存储空间&#xff0c;提高运算效率。 Oracle数据类型主要包括 1.字符型 适合保存字符串类型的数据&#xff0c;如姓名、地址、简介等等。 如&#xff1a;char(2000),nchar(2000),varchar(4000),nvarc…

台式电脑麦克风_还有人买台式PC吗?这份新品推荐攻略值得收藏

【科技犬】新品一&#xff0c;联想发布新款天逸510S台式机联想现已推出天逸 510S 小型主机&#xff0c;搭载了英特尔最新的十代酷睿处理器 i5-10400&#xff0c;8GB 内存 512GB SSD 售价 3499 元。联想新款天逸 510S 将于 7 月 23 日开卖&#xff0c;适合企业办公用户使用。天…