卷积网络博大精深,不同的网络模型,跑出来的结果是不一样,在不知道使用什么网络的情况下跑自己的数据集时,我建议最好去参考基于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 卷积神经网络 人脸识别的更多相关文章

  1. CNN卷积神经网络人脸识别

    图片总共40个人,每人10张图片,每张图片高57,宽47.共400张图片. 读取图片的py文件 import numpyimport pandasfrom PIL import Imagefrom k ...

  2. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  3. cnn(卷积神经网络)比较系统的讲解

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...

  4. [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR

    Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...

  5. day-16 CNN卷积神经网络算法之Max pooling池化操作学习

    利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...

  6. 3层-CNN卷积神经网络预测MNIST数字

    3层-CNN卷积神经网络预测MNIST数字 本文创建一个简单的三层卷积网络来预测 MNIST 数字.这个深层网络由两个带有 ReLU 和 maxpool 的卷积层以及两个全连接层组成. MNIST 由 ...

  7. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  8. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

    https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...

  9. CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM

    http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...

随机推荐

  1. <Android>tab选项卡

    1.继承TabActivity实现 a)         在布局文件中使用FrameLayout列出Tab组件及Tab中的内容组件 b)        Activity要继承TabActivity c ...

  2. 大全Kafka Streams

    本文将从以下三个方面全面介绍Kafka Streams 一. Kafka Streams 概念 二. Kafka Streams 使用 三. Kafka Streams WordCount   一. ...

  3. 异常--throw

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. codeforces 987 D. Fair

    D. Fair time limit per test 2 seconds memory limit per test 512 megabytes input standard input outpu ...

  5. CSS定义input disabled样式

    disabled 属性规定应该禁用 input 元素.被禁用的 input 元素既不可用,也不可点击.可以设置 disabled 属性,直到满足某些其他的条件为止(比如选择了一个复选框等等).然后,就 ...

  6. 海盗船长小米首页小船来回摆动CSS3.0效果

    海盗船长小米首页小船来回摆动CSS3.0效果,偶然之间看到的,就写了一个. <!DOCTYPE html> <html lang="en"> <hea ...

  7. BZOJ4237 稻草人(分治+树状数组+单调栈)

    如果要询问的某个纵坐标为inf的点左边是否有点能与其构成所要求的矩形,只要用个单调栈就可以了.可以想到用分治来制造单调性. 按横坐标排序,每次考虑跨过分治中心的矩形.考虑右边的每个点能与左边的哪些点构 ...

  8. hadoop 使用map将SequenFile里的小文件解压出来

    上例中将HDFS里小文件通过mapper压缩到一个文件中,本例将这些小文件解压出来. mapreduce可以按SequenceFile的key进行分片. 1.mapper public class M ...

  9. [BZOJ4589]Hard Nim

    description BZOJ 题意:\(n\)堆式子,每堆石子数量为\(\le m\)的质数,对于每一个局面玩\(Nim\)游戏,求后手必胜的方案数. data range \[n\le 10^9 ...

  10. CF939E:Maximize! ——题解

    http://codeforces.com/problemset/problem/939/E https://vjudge.net/problem/CodeForces-939E 给一个集合,每次两个 ...