划分数据集(python)

将特定文件路径下的图片数据划分为训练集、验证集和测试集。

import glob
import os.path
import random

# 数据路径
INPUT_DATA = './flower_photos'

 # 按一定比例划分数据集
def create_image_lists(testing_percentage, validation_percentage):
  result = {}
  sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
  is_root_dir = True
  for sub_dir in sub_dirs:
      if is_root_dir:
          is_root_dir = False
          continue
      
    # 图片的扩展名 
    extensions = ['jpeg', 'jpg', 'JPG', 'JPEG']
    file_list = []
    dir_name = os.path.basename(sub_dir)
    for extension in extensions:
        file_glob = os.path.join(INPUT_DATA, dir_name, '*.'+extension)
        file_list.extend(glob.glob(file_glob))
    if not file_list:
        continue

    label_name = dir_name.lower()
    training_images = []
    testing_images = []
    validation_images = []
    for file_name in file_list:
        base_name = os.path.basename(file_name)
        chance = np.random.randint(100)
        if chance < validation_percentage:
            validation_images.append(base_name)
        elif chance < (testing_percentage+validation_percentage):
            testing_images.append(base_name)
        else:
            training_images.append(base_name)

    result[label_name] = {
        'dir': dir_name,
        'training': training_images,
        'testing': testing_images,
        'validation': validation_images
    }

return result

获取图片样本的完整路径。

# 图片路径
def get_image_path(image_lists, image_dir, label_name, index, category):
    label_lists = image_lists[label_name]
    category_list = label_lists[category]
    mod_index = index % len(category_list)
    base_name = category_list[mod_index]
    sub_dir = label_lists['dir']
    full_path = os.path.join(image_dir, sub_dir, base_name)
return full_path
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • 故乡 故乡是我们每个人心目中的一块净土,是让每一个远离家乡的...
    双奕桃花阅读 374评论 3 2
  • Soft-Margin SVM与正则化的相似性3
    陈昱熹阅读 450评论 0 0