资源简介

本文档是CNN卷积神经网络,用TensorFlow、Kreas两个框架对olivettifaces人脸数据集进行识别

资源截图

代码片段和文件信息

# -*- coding:utf-8 -*-
# -*- author:zzZ_CMing  CSDN address:https://blog.csdn.net/zzZ_CMing
# -*- 2018/06/05;11:41
# -*- python3.5
“““
olivetti Faces是纽约大学组建的一个比较小的人脸数据库。有40个人,每人10张图片,组成一张有400张人脸的大图片。
像素灰度范围在[0255]。整张图片大小是1190*942,20行320列,所以每张照片大小是(1190/20)*(942/20)= 57*47
程序需配置h5py:python -m pip install h5py
博客地址:https://blog.csdn.net/zzZ_CMing,更多机器学习源码
“““
import numpy as np
from PIL import Image
from keras.models import Sequential
from keras.layers import Dense Dropout Activation Flatten
from keras.layers import Conv2D MaxPooling2D
from keras.optimizers import SGD    # 梯度下降的优化器
from keras.utils import np_utils
from keras import backend as K

# 读取整张图片的数据,并设置对应标签
def get_load_data(dataset_path):
    img = Image.open(dataset_path)
    # 数据归一化。asarray是使用原内存将数据转化为np.ndarray
    img_ndarray = np.asarray(img dtype = ‘float64‘)/255
    # 400 pictures size: 57*47 = 2679  
    faces_data = np.empty((400 2679))
    for row in range(20):  
       for column in range(20):
           # flatten可将多维数组降成一维
           faces_data[row*20+column] = np.ndarray.flatten(img_ndarray[row*57:(row+1)*57 column*47:(column+1)*47])

    # 设置图片标签
    label = np.empty(400)
    for i in range(40):
        label[i*10:(i+1)*10] = i
    label = label.astype(np.int)

    # 分割数据集:每个人前8张图片做训练,第9张做验证,第10张做测试;所以train:320valid:40test:40
    train_data = np.empty((320 2679))
    train_label = np.empty(320)
    valid_data = np.empty((40 2679))
    valid_label = np.empty(40)
    test_data = np.empty((40 2679))
    test_label = np.empty(40)
    for i in range(40):
        train_data[i*8:i*8+8] = faces_data[i*10:i*10+8] # 训练集对应的数据
        train_label[i*8:i*8+8] = label[i*10 : i*10+8]   # 训练集对应的标签
        valid_data[i] = faces_data[i*10+8]   # 验证集对应的数据
        valid_label[i] = label[i*10+8]       # 验证集对应的标签
        test_data[i] = faces_data[i*10+9]    # 测试集对应的数据
        test_label[i] = label[i*10+9]        # 测试集对应的标签
    train_data = train_data.astype(‘float32‘)
    valid_data = valid_data.astype(‘float32‘)
    test_data = test_data.astype(‘float32‘)
       
    result = [(train_data train_label) (valid_data valid_label) (test_data test_label)]
    return result

# CNN主体
def get_set_model(lr=0.005decay=1e-6momentum=0.9):
    model = Sequential()
    # 卷积1+池化1
    if K.image_data_format() == ‘channels_first‘:
        model.add(Conv2D(nb_filters1 kernel_size=(3 3) input_shape = (1 img_rows img_cols)))
    else:
        model.add(Conv2D(nb_filters1 kernel_size=(2 2) input_shape = (img_rows img_cols 1)))
    model.add(Activation(‘tanh‘))
    model.add(MaxPooling2D(pool_size=(2 2)))

    # 卷积2+池化2
    model.add(Conv2D(nb_filters2 kernel_size=(3 3)))
    model.add(Activation(‘tanh‘))  
    model.add(MaxPooling2D(pool_size=(2 2)))
    model.add(Dropout(0.25))  

    # 全连接层1+分类器层
    model.add(Flatten())  
    model.add(Dense(1000))       #Full connection
    model.add(Activation(‘tanh‘)) 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-07-16 14:43  olivettifaces人脸数据库识别\CNN_Kreas_olivettifaces\
     文件        6314  2018-07-16 14:43  olivettifaces人脸数据库识别\CNN_Kreas_olivettifaces\CNN+Kreas框架识别oli人脸数据库.py
     文件    21019712  2018-07-04 09:30  olivettifaces人脸数据库识别\CNN_Kreas_olivettifaces\model_weights.h5
     文件     1182905  2018-03-22 16:20  olivettifaces人脸数据库识别\CNN_Kreas_olivettifaces\olivettifaces.gif
     目录           0  2018-07-09 14:17  olivettifaces人脸数据库识别\CNN_tf_olivettifaces\
     文件     1182905  2018-03-22 16:20  olivettifaces人脸数据库识别\CNN_tf_olivettifaces\olivettifaces.gif
     文件    14751774  2018-07-04 09:33  olivettifaces人脸数据库识别\CNN_tf_olivettifaces\params.pkl
     文件       15755  2018-07-05 13:58  olivettifaces人脸数据库识别\CNN_tf_olivettifaces\train_CNN.py
     文件        7331  2018-03-23 16:22  olivettifaces人脸数据库识别\CNN_tf_olivettifaces\use_CNN.py

评论

共有 条评论