【1】刷脸识别

【1】案列介绍

        采用15个人的165张图片进行训练 完成刷脸的识别(Yale_64x64.ma:耶鲁大学的数据库)  

【2】python源码

#神经网络搭建步骤
#1 准备数据 2 准备训练 3 搭建神经网络 4 检测
import tensorflow as tf
import numpy as np
import scipy.io as sio
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'
f=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)

#选取测试数据选取范围为0到64
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)

#制造训练数据集
#【1】reshape:数据重新组织(括号里面是维度信息)
#【2】shape:是查看数据有多少行多少列
#【3】astype:用于array中数值类型转换
train_data=train_data.reshape(train_data.shape[0],64,64,1).astype(np.float32)/255
#创建一个空白数组(165行15列)存放标签文件
train_labels_new=np.zeros((165,15))#165张图片 15个人
#训练标签赋值
for i in range(0,165):
    #调整下标索引目录    i=0时j=0//i=1时j=1。。。。。
    j=int(train_label[i,0])-1   #1-15->0-14
    #每个图片对应的标签赋值 第0行0列赋值为1  第1行1列赋值为1  第2行2列赋值为1
    train_labels_new[i,j]=1

#制造测试数据集
test_data_input=test_data.reshape(test_data.shape[0],64,64,1).astype(np.float32)/255
test_labels_input=np.zeros((64,15))#165张图片 15个人
for i in range(0,64):
    j=int(test_label[i,0])-1    #1-15->0-14
    test_labels_input[i,j]=1

#搭建cnn卷积神经网络
#输入数据进行占位即设置输入数据的格式
data_input=tf.placeholder(tf.float32,[None,64,64,1])
label_input=tf.placeholder(tf.float32,[None,15])

#第一层
# 卷积层
layerl=tf.layers.conv2d(inputs=data_input,filters=32,kernel_size=2,strides=1,padding='SAME',activation=tf.nn.relu)
#池化层
layerl_pool=tf.layers.max_pooling2d(layerl,pool_size=2,strides=2)
#第二层
layer2=tf.reshape(layerl_pool,[-1,32*32*32])
#激活层
layer2_relu=tf.layers.dense(layer2,1024,tf.nn.relu)
output=tf.layers.dense(layer2_relu,15)
#定义损失函数
loss=tf.losses.softmax_cross_entropy(onehot_labels=label_input,logits=output)
#寻找损失函数的最优点
train=tf.train.GradientDescentOptimizer(0.01).minimize(loss)
#根据标签 labels 和 predicts(模型的预测)来计算准确率acc
#【1】argmax返回的是最大数的索引.argmax有一个参数axis,默认是0,表示第几维的最大值
accuracy=tf.metrics.accuracy(labels=tf.argmax(label_input,axis=1),predictions=tf.argmax(output,axis=1))

# run acc
#初始化全部的变量
init=tf.group(tf.global_variables_initializer(),tf.local_variables_initializer())
#开始一个会话
with tf.Session() as sess:
    #运行会话
    sess.run(init)
    #运行的次数300次
    for i in range(0,300):
        #准备输入数据
        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('第',i,'轮训练结果')
        print('acc:%.2f',acc)


【3】运行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值