任务
数据集来自https://blog.csdn.net/hahajinbu/article/details/72877998
有68个人,每个人有若干张照片。编写CNN模型来分辨某张照片是哪一个人
模型
使用sqeeze net模型,来自论文官方github的keras实现
https://github.com/DT42/squeezenet_demo
生成数据
import numpy as np
import tensorflow as tf
import os
import os.path
from PIL import Image
from squeeze_net import SqueezeNet
DIR = r'使用你的数据文件夹地址'
CLASS = 68 # 68个人
LEARNING_RATE = 1e-4
def pics_to_arrs(directory: str='.', to_npy=False, from_npy=False):
"""
这个数据集中同一个人的脸都放在一个文件夹中,‘s1’-‘s68’
:param directory:包含‘s1’-‘s68’文件夹的父文件夹
:param to_npy: 保存到npy文件'pic_arrs.npy'、'pic_labs.npy'中
:param from_npy:直接从npy文件中读取数组
:return: pic_arrs, pic_labs, 即X与Y
"""
if from_npy:
pic_arrs = np.load('pic_arrs.npy')
pic_labs = np.load('pic_labs.npy')
return pic_arrs, pic_labs
pic_arr_li = []
pic_lab_li = []
for person in os.listdir(directory):
# 注意person是相对路径,即名字
if not person.startswith('s'):
continue # 跳过不是的文件
person_num = int(person[1:]) - 1 # 编号、y标签, 从0开始
person_dir = os.path.join(directory, person)
for file in os.listdir(person_dir):
if not file.endswith(('jpg', 'jpeg')):
continue # 跳过不是的文件
pic_abs = os.path.join(person_dir, file)
ima = np.array(Image.open(pic_abs),