import os
import numpy as np
import time
import tensorflow as tf
from PIL import Image
import matplotlib.pyplot as plt
def get_all_files(file_path):
"""
获取图片路径及其标签
:param file_path: a sting, 图片所在目录
:param is_random: True or False, 是否乱序
:return:
"""
image_list = []
label_list = []
cat_count = 0
dog_count = 0
for item in os.listdir(file_path):
item_path = file_path + '\\' + item
item_label = item.split('.')[0] # 文件名形如 cat.0.jpg,只需要取第一个
if os.path.isfile(item_path):
image_list.append(item_path)
else:
raise ValueError('文件夹中有非文件项.')
if item_label == 'cat': # 猫标记为'0'
label_list.append(0)
cat_count += 1
else: # 狗标记为'1'
label_list.append(1)
dog_count += 1
print('数据集中有%d只猫,%d只狗.' % (cat_count, dog_count))
image_list = np.asarray(image_list)
label_list = np.asarray(label_list)
# 乱序文件
rnd_index = np.arange(len(image_list))
np.random.shuffle(rnd_index)
image_list = image_list[rnd_index]
label_list = label_list[rnd_index]
return image_list, label_list
def get_batch(image,lable, image_size_w,image_size_h, batch_size, capacity):
"""
获取训练批次
:param train_list: 2-D list, [image_list, label_list]
:param image_size: a int, 训练图像大小
:param batch_size: a int, 每个批次包含的样本数量
:param capacity: a int, 队列容量
:param is_random: True or False, 是否乱序
:return:
"""
image =tf.cast(image,tf.string)
lable =tf.cast(lable,tf.int32)
intput_queue = tf.train.slice_input_producer([image,lable])
# 从路径中读取图片
image_train = tf.read_file(intput_queue[0])
image_train = tf.image.decode_jpeg(image_train, channels=3) # 这里是jpg格式
image_train = tf.image.resize_images(image_train, [image_size_h, image_size_w])
image_train = tf.cast(image_train, tf.float32) / 255. # 转换数据类型并归一化
# 图片标签
label_train = intput_queue[1]
# 获取批次
image_train_batch, label_train_batch = tf.train.shuffle_batch([image_train, label_train],
batch_size=batch_size,
capacity=capacity,
min_after_dequeue=100,
num_threads=2)
return image_train_batch, label_train_batch
def cnn_inference(images, batch_size, n_classes):
# 第一层的卷积层conv1,卷积核为3X3,有16个
with tf.variable_scope('conv1') as scope:
# 建立weights和biases的共享变量
# conv1, shape = [kernel size, kernel size, channels, kernel numbers]
weights = tf.get_variable('weights',
shape=[3, 3, 3, 16],
dtype=tf.float
tensorflow实现猫狗识别
最新推荐文章于 2024-08-30 20:53:30 发布
这篇博客详细介绍了如何利用TensorFlow框架构建一个猫狗识别的深度学习模型。从数据预处理到模型训练,再到模型评估,全方位解析了人工智能在图像识别领域的应用。
摘要由CSDN通过智能技术生成