环境:python3.6版本 + TensorFlow 1.6版本
import os
from PIL import Image
import numpy as np
import tensorflow as tf
data_dir = r'E://data/data' # 数据文件夹
train = True # 训练还是测试
model_path = "model/image_model" # 模型文件路径
# 从文件夹读取图片和标签到numpy数组中
# 标签信息在文件名中,例如1_40.jpg表示该图片的标签为1
def read_data(data_dir):
datas = []
labels = []
fpaths = []
for fname in os.listdir(data_dir):
fpath = os.path.join(data_dir, fname)
data = np.array(Image.open(fpath))/255.0 # pillow读取的图像像素值在0-255之间,需要归一化
label = int(fname.split("_")[0])
fpaths.append(fpath) # 在读取图像数据、Label信息的同时,记录图像的路径
datas.append(data)
labels.append(label)
datas = np.array(datas)
labels = np.array(labels)
print("shape of datas: {}\tshape of labels: {}".format(datas.shape, labels.shape))
return fpaths, datas, labels
fpaths, datas, labels = read_data(data_dir)
# 'shape of datas: (150, 32, 32, 3) shape of labels: (150,)'
# 计算有多少类图片
num_classes = len(set(labels))
# Placeholder:TensorFlow中的占位符,用于传入外部数据。
# dtype:数据类型;shape:数据的维度。默认为None,表示没有限制;name:名称;返回类型:Tensor
# Tensorflow 1.x 版本提供placeholder,而 2.0版本暂时没有