猫狗识别(tensorflow)kaggle

该博客介绍了在Windows系统下,使用Python3.7和PyCharm进行猫狗识别项目的过程。首先,作者提到预处理阶段,包括利用ImageNet预训练模型筛选并移除异常数据,对图像进行解码、裁剪、标准化处理。接着,详细阐述了如何从训练集中划分验证集,并提供了相关脚本。最后,项目包含了model.py、train.py和test.py三个关键步骤的实现。

1.本人安装的环境为python3.7,pacharm1.1,windows系统
详细代码见这里
2.预处理

  1. 导入train data里面的图片
  2. 异常数据清理:训练集中大约包含了一些非猫或狗的图像,这些图片属于离群数据,可能会影响模型精度,需要移除。可以利用ImageNet预训练模型可以找出非猫或狗的图片以确定要清理哪些图片。鉴于时间原因且数据量不是太大,采用了人工挑选异常图片,这种方法并不推荐用于大数据集上,这些异常图片文件名如下:
    cat.4688.jpg,cat.5418.jpg,cat.7377.jpg,cat.7564.jpg,cat.8100.jpg,cat.8456.jpg,cat.10029.jpg,cat.12272.jpg,dog.1259.jpg,dog.1895.jpg,dog.4367.jpg,dog.8736.jpg,dog.9517.jpg,dog.10190.jpg,dog.11299.jpg。
  3. .将第一步处理好的图片解码成为三维数组,然后将图片裁剪和补充进行标准化处理,转化为tensorflow能够识别的格式,分批次返回.
  4. pre_process.py
def get_files(file_dir):
    cats = []
    dogs = []
    cats_label = []
    dogs_label = []
    img_dirs = os.listdir(file_dir)#读取文件名下所有!目录名(列表形式)
    for img_name in img_dirs:# cat.0.jpg
        name = img_name.split(".")# ['cat', '0', 'jpg']
        if  name[0] == "cat":
            cats.append(file_dir + img_name)#此处不可以省为img_name,下个函数tf.train.slice_input_producer读取的是地址!!
            cats_label.append(0)
        else:
            if name[0] == "dog":
                dogs.append(file_dir + img_name)
                dogs_label.append(1)

    img_list = np.hstack((cats, dogs))#列表(字符串形式)
    label_list = np.hstack((cats_label, dogs_label))#列表(整数形式)
    return img_list, label_list

#############################################

def get_batch(image, label, image_w, image_h, batch_size, capacity):#capacity: 队列中 最多容纳图片的个数
    input_queue = tf.train.slice_input_producer([image, label])#tf.train.slice_input_producer是一个tensor生成器,作用是
    # 按照设定,每次从一个tensor列表中按顺序或者随机抽取出一个tensor放入文件名队列。
    label = input_queue[1]
    img_contents = tf.read_file(input_queue[0])#一维
    image = tf.image.decode_jpeg(img_contents, channels=3)#解码成三维矩阵
    image = tf.image.resize_image_with_crop_or_pad(image, image_w, image_h)
    image = tf.cast(image, tf.float32)
    image = tf.image.per_image_standardization(image)
    # 生成批次  num_threads 有多少个线程根据电脑配置设置
    image_batch, label_batch = tf.train.batch([image, label], batch_size=batch_size, num_threads=64, capacity=capacity)
    return image_batch, label_batch
  1. 训练集划分验证集:通常模型训练时需要在验证集上观察评估指标是否达到要求,而本项目只提供了训练集和测试集,所以需要从训练集中划分一部分数据作为验证集,使用4:1的比例从训练集中随机挑选出一部分图片作为验证集。(可选)
  2. build_valiation_data.py
def build_valiation_data(src_dir, target_dir, validation_ratio):
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)
    files = os
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值