tensorflow人脸识别_TensorFlow基础,TensorFlow简单人脸识别

TensorFlow基础,TensorFlow简单人脸识别

数据材料

这是一个小型的人脸数据库,一共有40个人,每个人有10张照片作为样本数据。这些图片都是黑白照片,意味着这些图片都只有灰度0-255,没有rgb三通道。于是我们需要对这张大图片切分成一个个的小脸。整张图片大小是1190 × 942,一共有20 × 20张照片。那么每张照片的大小就是(1190 / 20)× (942 / 20)= 57 × 47 (大约,以为每张图片之间存在间距)。

问题解决

10类样本,利用CNN训练可以分类10类数据的神经网络,与手写字符识别类似

0171adb211449bfeaf878c46538f4bb1.gif

#coding=utf-8

#http://www.jianshu.com/p/3e5ddc44aa56

#tensorflow 1.3.1

#python 3.6

import os

import numpy as np

import tensorflow as tf

import matplotlib.pyplot as plt

import matplotlib.image as mpimg

import matplotlib.patches as patches

import numpy

from PIL import Image

#获取dataset

def load_data(dataset_path):

img = Image.open(dataset_path)

# 定义一个20 × 20的训练样本,一共有40个人,每个人都10张样本照片

img_ndarray = np.asarray(img, dtype='float64') / 256

#img_ndarray = np.asarray(img, dtype='float32') / 32

# 记录脸数据矩阵,57 * 47为每张脸的像素矩阵

faces = np.empty((400, 57 * 47))

for row in range(20):

for column in range(20):

faces[20 * row + column] = np.ndarray.flatten(

img_ndarray[row * 57: (row + 1) * 57, column * 47 : (column + 1) * 47]

)

label = np.zeros((400, 40))

for i in range(40):

label[i * 10: (i + 1) * 10, i] = 1

# 将数据分成训练集,验证集,测试集

train_data = np.empty((320, 57 * 47))

train_label = np.zeros((320, 40))

vaild_data = np.empty((40, 57 * 47))

vaild_label = np.zeros((40, 40))

test_data = np.empty((40, 57 * 47))

test_label = np.zeros((40, 40))

for i in range(40):

train_data[i * 8: i * 8 + 8] = faces[i * 10: i * 10 + 8]

train_label[i * 8: i * 8 + 8] = label[i * 10: i * 10 + 8]

vaild_data[i] = faces[i * 10 + 8]

vaild_label[i] = label[i * 10 + 8]

test_data[i] = faces[i * 10 + 9]

test_label[i] = label[i * 10 + 9]

train_data = train_data.astype('float32')

vaild_data = vaild_data.astype('float32')

test_data = test_data.astype('float32')

return [

(train_data, train_label),

(vaild_data, vaild_label),

(test_data, test_label)

]

def convolutional_layer(data, kernel_size, bias_size, pooling_size):

kernel = tf.get_variable("conv

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值