cnn 卷积神经网络 人脸识别
卷积网络博大精深,不同的网络模型,跑出来的结果是不一样,在不知道使用什么网络的情况下跑自己的数据集时,我建议最好去参考基于cnn的手写数字识别网络构建,在其基础上进行改进,对于一般测试数据集有很大的帮助。
分享一个网络构架和一中训练方法:
# coding:utf-8
import os
import tensorflow as tf os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # cnn模型高度抽象特征
def cnn_face_discern_model(X_,Y_):
weights = {
"wc1":tf.Variable(tf.random_normal([3,3,1,64],stddev=0.1)),
"wc2":tf.Variable(tf.random_normal([5,5,64,128],stddev=0.1)),
"wd3":tf.Variable(tf.random_normal([7*7*128,1024],stddev=0.1)),
"wd4": tf.Variable(tf.random_normal([1024, 12], stddev=0.1))
}
biases = {
"bc1":tf.Variable(tf.random_normal([64],stddev=0.1)),
"bc2":tf.Variable(tf.random_normal([128],stddev=0.1)),
"bd3": tf.Variable(tf.random_normal([1024],stddev=0.1)),
"bd4": tf.Variable(tf.random_normal([12],stddev=0.1))
}
x_input = tf.reshape(X_,shape=[-1,28,28,1]) # 第一层卷积层
_conv1 = tf.nn.conv2d(x_input,weights["wc1"],strides=[1,1,1,1],padding="SAME")
_conv1_ = tf.nn.relu(tf.nn.bias_add(_conv1,biases["bc1"]))
# 第一层池化层
_pool1 = tf.nn.max_pool(_conv1_,ksize=[1,2,2,1],strides=[1,2,2,1],padding="SAME")
# 第一层失活层
_pool1_dropout = tf.nn.dropout(_pool1,0.7) # 第二层卷积层
_conv2 = tf.nn.conv2d(_pool1_dropout,weights["wc2"],strides=[1,1,1,1],padding="SAME")
_conv2_ = tf.nn.relu(tf.nn.bias_add(_conv2,biases["bc2"]))
# 第二层池化层
_pool2 = tf.nn.max_pool(_conv2_,ksize=[1,2,2,1],strides=[1,2,2,1],padding="SAME")
# 第二层失活层
_pool2_dropout = tf.nn.dropout(_pool2,0.7) # 使用全连接层提取抽象特征
# 全连接层1
_densel = tf.reshape(_pool2_dropout,[-1,weights["wd3"].get_shape().as_list()[0]])
_y1 = tf.nn.relu(tf.add(tf.matmul(_densel,weights["wd3"]),biases["bd3"]))
_y2 = tf.nn.dropout(_y1,0.7)
# 全连接层2
out = tf.add(tf.matmul(_y2,weights["wd4"]),biases["bd4"]) # 损失函数 loss
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y_, logits=out)) # 计算交叉熵 # 优化目标 optimizing
optimizing = tf.train.AdamOptimizer(0.001).minimize(loss) # 使用adam优化器来以0.0001的学习率来进行微调 # 精确度 accuracy
correct_prediction = tf.equal(tf.argmax(Y_, 1), tf.argmax(out, 1)) # 判断预测标签和实际标签是否匹配
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) return {
"loss":loss,
"optimizing":optimizing,
"accuracy":accuracy,
"out":out
}
批量训练方法:
# 开始准备训练cnn
X = tf.placeholder(tf.float32,[None,28,28,1])
# 这个12属于人脸类别,一共有几个id
Y = tf.placeholder(tf.float32, [None,12]) # 实例化模型
cnn_model = cnn_face_discern_model(X,Y) loss,optimizing,accuracy,out = cnn_model["loss"],cnn_model["optimizing"],cnn_model["accuracy"],cnn_model["out"] # 启动训练模型
bsize = 960/60 with tf.Session() as sess:
# 实例所有参数
sess.run(tf.global_variables_initializer())
for epoch in range(100):
for i in range(15):
x_bsize,y_bsize = x_train[i*60:i*60+60,:,:,:],y_train[i*60:i*60+60,:]
sess.run(optimizing,feed_dict={X:x_bsize,Y:y_bsize}) if (epoch+1)%10==0:
los = sess.run(loss,feed_dict={X:x_test,Y:y_test})
acc = sess.run(accuracy,feed_dict={X:x_test,Y:y_test}) print("epoch:%s loss:%s accuracy:%s"%(epoch,los,acc)) score= sess.run(accuracy,feed_dict={X:x_test,Y:y_test}) y_pred = sess.run(out,feed_dict={X:x_test}) # 这个是类别,测试集预测出来的类别。
y_pred = np.argmax(y_pred,axis=1) print("最后的精确度为:%s"%score)
cnn 卷积神经网络 人脸识别的更多相关文章
- CNN卷积神经网络人脸识别
图片总共40个人,每人10张图片,每张图片高57,宽47.共400张图片. 读取图片的py文件 import numpyimport pandasfrom PIL import Imagefrom k ...
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...
- 3层-CNN卷积神经网络预测MNIST数字
3层-CNN卷积神经网络预测MNIST数字 本文创建一个简单的三层卷积网络来预测 MNIST 数字.这个深层网络由两个带有 ReLU 和 maxpool 的卷积层以及两个全连接层组成. MNIST 由 ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM
http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...
随机推荐
- 抓取进程中包括其所有线程的iowait时间
perf事件是可以按照线程按照进程统计的呢,但是/proc/接口就不提供这样的功能 hon@station6:/proc/6288$ sudo perf stat -e sched:sched_swi ...
- SSE:服务器发送事件,使用长链接进行通讯 基础学习
HTML5中新加了EventSounce对象,实现即时推送功能,可以从下面连接中学习, http://www.kwstu.com/ArticleView/kwstu_20140829064746093 ...
- 【bzoj2653】middle 可持久化线段树区间合并
题目描述 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个长度为n的序列s.回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[ ...
- hdu 3191 How Many Paths Are There (次短路径数)
How Many Paths Are There Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- Python虚拟环境virtualenv的使用
virtualenv 是一个创建孤立的Python环境的工具.可以让你创建各自独立的.互不影响的Python开发环境. 使用pip安装即可 pip install virtualenv 查看是否安装成 ...
- BZOJ5319 & 洛谷4559 & LOJ2551:[JSOI2018]军训列队——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5319 https://www.luogu.org/problemnew/show/P4559 ht ...
- BZOJ1012:[JSOI2008]最大数——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1012 https://www.luogu.org/problemnew/show/P1198 现在 ...
- struts2远程代码执行漏洞汇总整理
一.S2-001 1.漏洞原理 在默认配置下,如果用户所提交的表单出现验证错误,后端会对用户的输入进行解析处理,然后返回并显示处理结果. 举个例子,当你提交的登录表单为username=xishir& ...
- UVA.10881 Piotr's Ants (思维题)
UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...
- ContestHunter暑假欢乐赛 SRM 06
T1二分check...为什么这么显然的我没看出来TAT,还在想倒着加入并查集check什么的,题写太多思维定势啦QAQ T2是NOIP题的弱化版...当时没看出来,写了个DP.可以看出这一位比上一位 ...