猫狗大战实战经典卷积神经网络

本文通过猫狗大战数据集,详细介绍了如何使用卷积神经网络进行图像分类。首先提供了数据集的下载及解压方法,然后解释了训练、验证和测试数据的目录结构。接着,提到了预处理数据的input_data.py、定义模型的model.py和启动训练的train.py文件。最后,讨论了如何进行模型评估,并提醒Windows用户注意文件路径的设置。文章鼓励读者尝试使用自己的数据集进行训练,以加深对卷积神经网络的理解。
摘要由CSDN通过智能技术生成

话不多说,直接上干货。
这里写图片描述
这里写图片描述
猫狗大战数据集地址:链接: https://pan.baidu.com/s/1aUd29tHbfN0MLdWlgCGCCw 密码: 2pqv
下载完数据集以后,将文件解压后复制到分别下面的类似的目录中,注意这里我的图片的格式,格式不对,可能会导致代码不能运行。(格式的话,利用系统下的命名吧,我的实在是在Ubuntu下做的)
这里写图片描述
这里写图片描述
这里的train是我要训练的图片的目录。你可以设置其他的名字。
log目录是记载训练模型参数的地方。
test目录是验证集的地方。
code目录则是我的代码所在地。
目录介绍完毕以后,下面开始介绍代码了。
第一个代码块input_data.py,用于对数据集进行预处理。 由于代码注释的时候比较详细,这里就不在一一介绍了。

import tensorflow as tf
import os
import numpy as np


def get_files(file_dir):
    cats = []
    label_cats = []
    dogs = []
    label_dogs = []
    for file in os.listdir(file_dir):
        name = file.split(sep='.')
        if 'cat' in name[0]:
            cats.append(file_dir + file)
            label_cats.append(0)
        else:
            if 'dog' in name[0]:
                dogs.append(file_dir + file)
                label_dogs.append(1)
        image_list = np.hstack((cats, dogs))
        label_list = np.hstack((label_cats, label_dogs))
        # print('There are %d cats\nThere are %d dogs' %(len(cats), len(dogs)))
        # 多个种类分别的时候需要把多个种类放在一起,打乱顺序,这里不需要

    # 把标签和图片都放倒一个 temp 中 然后打乱顺序,然后取出来
    temp = np.array([image_list, label_list])
    temp = temp.transpose()
    # 打乱顺序
    np.random.shuffle(temp)

    # 取出第一个元素作为 image 第二个元素作为 label
    image_list = list(temp[:, 0])
    label_list = list(temp[:, 1])
    label_list = [int(i) for i in label_list]
    return image_list, label_list

# 测试 get_files
# imgs , label = get_files('/Users/yangyibo/GitWork/pythonLean/AI/猫狗识别/testImg/')
# for i in imgs:
#   print("img:",i)

# for i in label:
#   print('label:',i)
# 测试 get_files end


# image_W ,image_H 指定图片大小,batch_size 每批读取的个数 ,capacity队列中 最多容纳元素的个数
def get_batch(image, label, image_W, image_H, batch_size, capacity):
    # 转换数据为 ts 能识别的格式
    image = tf.cast(image, tf.string)
    label = tf.cast(label, tf.int32)

    # 将image 和 label 放倒队列里
    input_queue = tf.train.slice_input_producer([image, label])
    label = input_queue[1]
    # 读取图片的全部信息
    print(input_queue[0])
    image_contents = tf.read_file(input_queue[0])
    # 把图片解码,channels =3 为彩色图片, r,g ,b  黑白图片为 1 ,也可以理解为图片的厚度
    image = tf.image.decode_jpeg(image_contents, channels=3)
    # 将图片以图片中心进行裁剪或者扩充为 指定的image_W,image_H
    image = tf.image.resize_image_with_crop_or_pad(image, image_W, image_H)
    # 对数据进行标准化,标准化,就是减去它的均值,除以他的方差
    image = tf.image.per_image_standardization(image)

    # 生成批次  num_threads 有多少个线程根据电脑配置设置  capacity 队列中 最多容纳图片的个数  tf.train.shuffle_batch 打乱顺序,
    image_batch, label_batch = tf.train.batch(
        [image, label], batch_size=batch_size, num_threads=64, capacity=capacity)

# 重新定义下 label_batch 的形状
    label_batch = tf.reshape(label_batch, [batch_size])
    # 转化图片
    image_batch = tf.cast(image_batch, tf.float32)
    return image_
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值