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 ...
随机推荐
- 201621044079WEEK作业08-集合
作业08-集合 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 如 ...
- (转)linux IO 内核参数调优 之 参数调节和场景分析
1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时 ...
- JXM 监控tomcat 7(含代码
1.在tomcat的server.xml中加入: <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleL ...
- django 安装/部署过程
一.软件安装 1.升级linux中的python 参考“centos升级python” 2.安装apache(httpd) 3.安装django,先要安装setuptools 参考“安装dj ...
- fzu1686-神龙的难题
给出一个n\times m的01矩阵,以及\(h,w\),表示一次可以把矩阵的一个\(h\times w\)的小矩阵变为全0,问至少要多少次可以把整个矩阵变为全0.\(n,m\le 15\). 分析 ...
- BZOJ4011 HNOI2015落忆枫音(动态规划+拓扑排序)
DAG中每个点选一条入边就可以构成一棵有向树,所以如果没有环答案就是∏degreei. 考虑去掉含环的答案.可以看做把环缩点,剩下的点仍然可以任意选入边.于是去除的方案数即为∏degreei/∏deg ...
- 【题解】Atcoder ARC#67 F-Yakiniku Restaurants
觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...
- [洛谷P4721]【模板】分治 FFT_求逆
题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:分治$FFT$博客,发现 ...
- Android 通知机制 Toast和Notification
Android常用的反馈系统状态信息的方式主要有三种 Toast提醒 通知栏提醒 对话框提醒 三种提醒分别适用于页面的提示.系统交互事件的通知和非常重要的提醒: 一.Toast Toast toast ...
- BZOJ1030:[JSOI2007]文本生成器——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1030 Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件 ...