tensorflow实现猫狗识别

这篇博客详细介绍了如何利用TensorFlow框架构建一个猫狗识别的深度学习模型。从数据预处理到模型训练,再到模型评估,全方位解析了人工智能在图像识别领域的应用。
摘要由CSDN通过智能技术生成
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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值