Keras:如何扩展validation_split以生成第三组,即测试集?

2023-12-10

我正在使用带有 TensorFlow 后端的 Keras。我使用带有 valid_split 参数的 ImageDataGenerator 将数据拆分为训练集和验证集。因此,我使用 flow_from_directory 并将子集设置为“训练”和“测试”,如下所示:

total_gen = ImageDataGenerator(validation_split=0.3)


train_gen = data_generator.flow_from_directory(my_dir, target_size=(input_size, input_size), shuffle=False, seed=13,
                                                     class_mode='categorical', batch_size=BATCH_SIZE, subset="training")

valid_gen = data_generator.flow_from_directory(my_dir, target_size=(input_size, input_size), shuffle=False, seed=13,
                                                     class_mode='categorical', batch_size=32, subset="validation")

这非常方便,因为它允许我只使用一个目录而不是两个目录(一个用于训练,一个用于验证)。现在我想知道是否可以扩展此过程以生成第三组,即测试集?


这是不可能开箱即用的。您应该能够通过对源代码 of ImageDataGenerator:

if subset is not None:
    if subset not in {'training', 'validation'}: # add a third subset here
        raise ValueError('Invalid subset name:', subset,
                         '; expected "training" or "validation".') # adjust message
    split_idx = int(len(x) * image_data_generator._validation_split) 
    # you'll need two split indices here
    if subset == 'validation':
        x = x[:split_idx]
        x_misc = [np.asarray(xx[:split_idx]) for xx in x_misc]
        if y is not None:
            y = y[:split_idx]
    elif subset == '...' # add extra case here

    else:
        x = x[split_idx:]
        x_misc = [np.asarray(xx[split_idx:]) for xx in x_misc] # change slicing
        if y is not None:
            y = y[split_idx:] # change slicing

Edit:这是修改代码的方法:

if subset is not None:
    if subset not in {'training', 'validation', 'test'}:
        raise ValueError('Invalid subset name:', subset,
                         '; expected "training" or "validation" or "test".')
    split_idxs = (int(len(x) * v) for v in image_data_generator._validation_split)
    if subset == 'validation':
        x = x[:split_idxs[0]]
        x_misc = [np.asarray(xx[:split_idxs[0]]) for xx in x_misc]
        if y is not None:
            y = y[:split_idxs[0]]
    elif subset == 'test':
        x = x[split_idxs[0]:split_idxs[1]]
        x_misc = [np.asarray(xx[split_idxs[0]:split_idxs[1]]) for xx in x_misc]
        if y is not None:
            y = y[split_idxs[0]:split_idxs[1]]
    else:
        x = x[split_idxs[1]:]
        x_misc = [np.asarray(xx[split_idxs[1]:]) for xx in x_misc]
        if y is not None:
            y = y[split_idxs[1]:]

基本上,validation_split现在预计是两个浮点数的元组而不是单个浮点数。验证数据将是 0 到 0 之间的数据分数validation_split[0], 之间的测试数据validation_split[0] and validation_split[1]和训练数据之间validation_split[1]1. 使用方法如下:

import keras
# keras_custom_preprocessing is how i named my directory
from keras_custom_preprocessing.image import ImageDataGenerator

generator = ImageDataGenerator(validation_split=(0.1, 0.5))
# First 10%: validation data - next 40% test data - rest: training data        
gen = generator.flow_from_directory(directory='./data/', subset='test')
# Finds 40% of the images in the dir

您需要在另外两行或三行中修改该文件(您必须更改类型检查),但仅此而已,应该可以工作。我有修改后的文件,如果您有兴趣请告诉我,我可以将其托管在我的 github 上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keras:如何扩展validation_split以生成第三组,即测试集? 的相关文章

随机推荐

  • 模板中的读取路径[重复]

    这个问题在这里已经有答案了 有没有办法读取当前页面的路径 例如 我在 www example com foo bar 我想阅读 foo bar 我必须在模板文件中执行此操作而不修改视图 并且我有太多视图文件而无法编辑每个视图文件 Cheer
  • 在可序列化对象上获取 NotSerializedException

    基本上 我编写了一个程序 将形状绘制到屏幕上 并将每个形状保存到 ArrayList 中 我想要做的是弄清楚如何将 ArrayList 保存到文件中 以便我可以稍后调用它并编辑已经存在的形状 因此 当我已经将对象 Shape 可序列化时 我
  • 在 HTML 页面上并排显示两个图像

    我试图并排放置两个相同大小的图像 如果我使用一个table然后我就可以并排显示两个图像 但在我的 CSS 样式表中 我对表格使用了自定义格式 这也显示在包含图像的页面上 我想只显示两个图像 没有任何自定义背景 边框等 我尝试使用div sp
  • 字符串前面的 b 有何作用?

    binary b Binary string 创建一个字符串会产生什么后果binary 我在文档中找不到任何关于此的提示 刚刚在浏览 language scanner 时发现了这个小小的好奇心 这是永远不会发布的 PHP 版本 6 的前向兼
  • 是否有另一种方法在工作人员中加载额外的包(并行计算)?

    R 中并行化的一种方法是通过snowfall包裹 要将自定义函数发送给工作人员 您可以使用sfExport 参见乔里斯的帖子here 我有一个自定义函数 它依赖于非基本包中未自动加载的函数 因此 当我并行运行我的函数时 R 会崩溃 因为某些
  • 使用 iText 提取文本不起作用:编码或加密文本?

    我有一个 pdf 文件 其安全属性如下 打印 允许 文件组装 不允许 内容复制 允许 可访问性内容副本 允许 页面提取 不允许 我尝试获取带有示例代码的文本作为文档示例 如下所示 pdftext Text null StringBuilde
  • Rails 3 public_activity,销毁记录

    我正在使用公共活动如果用户创建帖子 则进行 gem 跟踪 有没有办法在删除帖子时销毁公共活动记录 以便在活动源中不会显示类似以下内容的内容 A post was deleted 而只是删除活动表中的特定活动 Thanks 我认为这就是OP正
  • 通过 CURL POST JSON 数据并抓取它

    我正在尝试传递 json 数据作为 cURL POST 的参数 然而 我坚持抓住它并将其保存在数据库上 卷曲文件 data array name gt Hagrid age gt 36 data string json encode dat
  • 在面板上绘制 Html 表格?

    如何生成常规的 html table 在 Sencha Touch 2 的面板上 每行的数据可能来自商店 它不像列表那样非常 移动 但我想在我的平板电脑应用程序上有一些详细面板 其中包含如下几个部分 header 1 table tr td
  • Codeigniter多个文件上传路径

    我正在构建一个应用程序 需要获取上传的文件并将它们放在单独的缩略图和全尺寸图像目录中 但是 config upload path uploads 只允许我选择一个上传路径 如何定义两个或多个上传路径 实际上您需要做的就是 重新初始化 上传类
  • 为什么 Laravel 或 Beanstalkd 会跳槽?

    我正在管理音频转换Laravel 队列 and 豆茎 监测者监督者 当用户上传音频文件时 它会转到AudioController php这会触发一个Queue push AudioProcess 它本身会触发exec sh some scr
  • JavaScript 从嵌套对象获取值[重复]

    这个问题在这里已经有答案了 如果这是我的目标 var obj bakery1 small name Small cookie price 0 75 large name Large cookie price 3 00 bakery2 sma
  • 使用 if 语句查找特定值

    您好 我在 Excel 中有一个很大的产品订单数据集 并且它将不断增长 数据集看起来像这样 Product Date Lsat24 Next24 Summary Buyer day1 AX1 2 1 2019 Checking invent
  • 在主线程上继续执行任务

    如果这是一个简单的问题 请原谅我 我无法用足够通用的方式来表达它来寻找答案 考虑这段代码 var task Task Factory StartNew gt Whatever task ContinueWith Callback TaskS
  • 递归 CTE - 获取后代(多对多关系)

    我拥有的 给定一棵树 或更类似于有向图 描述系统如何由其通用部分组成 现在让这个系统例如人体及其身体部位的节点 例如3可能是有左叶和右叶的肝脏 6 and 9 两者都有静脉 8 也可以在肝脏的任何未指定的位置找到 因此8 gt 3 而且也在
  • 如何快速从照片库中获取图像或电影路径

    我有这段代码 但在尝试获取图像路径时遇到问题 我在 google 和 stack over flow 中搜索 但我找到的解决方案是 Objective C 或在 swift 中不再工作的代码 这是我的代码 IBAction func cho
  • 如何使用 jQuery 为表格制作下拉列表过滤器?

    我想在特殊列中创建下拉表过滤器 例如我想为 已婚 列创建过滤器并从下拉列表中选择是或否 这是我的表 我需要一个 jquery 代码来帮助我制作过滤器 table class table table bordered table stripe
  • SQL分区在mysql中使用“不存在”

    我有下表 committee table commname profname commA bill commA jack commA piper commB bill commB piper 我正试图找到 吹笛者 所在的每个委员会中的教授
  • Chrome 配置文件未加载硒

    这是我的代码 from selenium import webdriver options webdriver ChromeOptions options add argument r user data dir C Users shahr
  • Keras:如何扩展validation_split以生成第三组,即测试集?

    我正在使用带有 TensorFlow 后端的 Keras 我使用带有 valid split 参数的 ImageDataGenerator 将数据拆分为训练集和验证集 因此 我使用 flow from directory 并将子集设置为 训