运行环境
python3.6.3、tensorflow1.10.0
Intel@AIDevCloud:Intel Xeon Gold 6128 processors集群
数据和模型来源
思路
数据集分析及处理
数据集文件解压后共有五个文件夹,每个文件夹都包含一定数量的花的图片,一个文件夹对应一个品种,图片各种尺寸都有,均为jpg格式,均为彩色图片。这里利用tensorflow提供的图片处理工具将所有图片转为300×300×3的格式,然后将所有图片的80%当作训练集,10%当作验证集,10%当作测试集,并且将训练集进行随机打乱,将得到的数据存在一个numpy文件中,以待后续训练使用。
模型构建
这里采用了ResNet-V1-50卷积神经网络来进行训练,模型结构在slim中都提供好了,另外采用官方已经训练好的参数进行迁移学习,只是在模型的最后根据问题的实际需要再定义一层输出层,只训练最后的自定义的全连接输出层的参数,训练500次,每次batch样本数取32,学习率取0.0001。
源代码
load_data.py
# -*- coding: UTF-8 -*-
#Author:Yinli
import glob
import os.path
import numpy as np
import tensorflow as tf
from tensorflow.python.platform import gfile
#定义输入文件夹和数据存储文件名
INPUT_DATA = 'flower_photos'
OUTPUT_FILE = 'flower_processed_data.npy'
#设定验证集和测试集的百分比
VALIDATION_PERCENTAGE = 10
TEST_PERCENTAGE = 10
def create_image_list(sess, testing_percentage, validation_percentage):
#列出输入文件夹下的所有子文件夹,此时sub_dirs里面除了有子文件夹还有它自身,在第一个
sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
#设置一个bool值,指定第一次循环的时候跳过母文件夹
is_root_dir = True
#print(sub_dirs)
#初始化数据矩阵
training_images = []
training_labels = []
testing_images = []
testing_labels = []
validation_images = []
validation_labels= []
current_label = 0
#分别处理每个子文件夹
for sub_dir in sub_dirs:
#跳过第一个值,即跳过母文件夹
if is_root_dir:
is_root_dir = False
continue
#获取子目录中的所有图片文件
extensions = ['jpg', 'jpeg', 'JPG', 'JPEG']
#用列表记录所有图片文件
file_list = []
#获取此子目录的名字比如daisy
dir_name = os.path.ba