TensorFlow从入门到放弃(二)——基于InceptionV3的迁移学习以及图像特征的提取

本文介绍了使用TensorFlow进行迁移学习,重点是基于InceptionV3模型对flower数据集进行finetuning,并展示了如何提取图像特征。首先,详细讲述了数据集的获取与划分,接着讲解了预训练的InceptionV3权重文件的下载。然后,通过finetune_NET.py文件阐述了模型的调整和训练过程,提到了关键层的识别。最后,部署了deploy.py脚本来提取图片的'PreLogits'层特征,以供后续分析使用。
摘要由CSDN通过智能技术生成

1. flower数据集

下载地址:http://download.tensorflow.org/example_images/flower_photos.tgz

共五种花的图片

2. 图片处理

将图片划分为train、val、test三个子集并提取图片特征。这个过程有点儿漫长请耐心等待。。。。。。

import glob
import os.path
import numpy as np
import tensorflow as tf
from tensorflow.python.platform import gfile

# 数据集的路径
INPUT_DATA = r'E:\PythonSpace\finetune_NET\flower_photos'
# 分割好的数据集
OUT_FILE = r'E:\PythonSpace\finetune_NET\flower_processed_data.npy'

# 测试数据和验证数据所占的比例为10%
VALIDATION_PERCENTAGE = 10
TEST_PERCENTAGE = 10

def create_image_lists(sess, testing_percentage, validation_percentage):
    # 读取数据集文件夹内的几个文件夹
    sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
    is_root_dir = True

    # 初始化各个数据集
    training_images = []
    training_labels = []
    testing_images = []
    testing_labels = []
    validation_images = []
    validation_labels = []
    current_label = 0
    current_image = 0

    # 读取所有的子目录
    for sub_dir in sub_dirs:
        if is_root_dir:
            is_root_dir = False
            continue
        extension = 'jpg'
        file_list = []
        # 获取图片所属的类别文件夹
        dir_name = os.path.basename(sub_dir)

        # 读取文件夹下*.jpg的文件名
        file_glob = os.path.join(INPUT_DATA, dir_name, '*.' + extension)
        # 读取名字为上面类型的文件的名字,保存到列表中
        file_list.extend(glob.glob(file_glob))

        for file_name in file_list:
            current_image = current_image + 1
            print(current_image)
            # 利用tensorflow的方法以二进制的格式读取图像
            image_raw_data = gfile.FastGFile(file_name, 'rb').read()
            # 对上面的二进制图像进行解码
            image = tf.image.decode_jpeg(image_raw_data)
            if image.dtype != tf.float32:
                image = tf.image.convert_image_dtype(image, dtype=tf.float32)
            # resize图片大小
            image = tf.image.resize_images(image,[229,229])
            image_value = sess.run(image)

            # 随机划分数据集
            # 随机生成一个0-100的数
            chance = np.random.randint(100)
            # 根据比例划分数据集
            if chance < validation_percentage:
                validation_images.append(image_value)
                validation_labels.append(current_label)
            elif chance < (validation_percentage + testing_percentage):
                testing_images.append(image_value)
                testing_labels.append(current_label)
            else:
                training_images.append(image_value)
                training_labels.append(current_label)
        current
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值