Keras 拟合生成器 - ValueError:无法找到可以处理输入的数据适配器

2024-02-13

我正在尝试使用自定义生成器来适应我的深度学习模型。

When i fit the model, it shows me this error: enter image description here

我试图找到类似的问题,但所有答案都是关于将列表转换为 numpy 数组。我认为这不是这个错误的问题。我的列表都是 numpy 数组格式。该自定义生成器基于以下自定义生成器here https://medium.com/@mrgarg.rajat/training-on-large-datasets-that-dont-fit-in-memory-in-keras-60a974785d71

这是我适合模型的代码部分:

        train_generator = RepresentationGenerator(representation_path=representations_path, target_path=target_path,
                                              filenames=training_filenames, batch_size=batch_size)
    val_generator = RepresentationGenerator(representation_path=representations_path, target_path=target_path,
                                            filenames=validation_filenames, batch_size=batch_size)
    self.model_semantic.fit_generator(train_generator,
                            epochs=10,
                            verbose=1,
                            validation_data=val_generator,
                            )
    return 0

其中变量是:

  • 表示路径- 是一个字符串,其中包含我存储训练文件的路径的目录,该文件是模型的输入
  • 目标路径- 是一个字符串,其中包含我存储目标文件的路径的目录,即哪个文件是模型的目标(输出)
  • 训练文件名- 是包含训练文件和目标文件名称的列表(两者具有相同的名称,但位于不同的文件夹中)
  • 批量大小- 批次大小的整数。它的值为 7。

我的生成器类如下:

import np
from tensorflow_core.python.keras.utils.data_utils import Sequence
class RepresentationGenerator(Sequence):

    def __init__(self, representation_path, target_path, filenames, batch_size):
        self.filenames = np.array(filenames)
        self.batch_size = batch_size
        self.representation_path = representation_path
        self.target_path = target_path

    def __len__(self):
        return (np.ceil(len(self.filenames) / float(self.batch_size))).astype(np.int)

    def __getitem__(self, idx):
        files_to_batch = self.filenames[idx * self.batch_size: (idx + 1) * self.batch_size]
        batch_x, batch_y = [], []
        for file in files_to_batch:
            batch_x.append(np.load(self.representation_path + file + ".npy", allow_pickle=True))
            batch_y.append(np.load(self.target_path + file + ".npy", allow_pickle=True))

        return np.array(batch_x), np.array(batch_y)

These are the values, when the method fit is called: enter image description here

我该如何修复这个错误?

谢谢各位朋友!


When I call the method fit_generator, it calls the method fit. enter image description here

fit 方法调用 func.fit 方法并传递设置为 None 的变量 Y

The error occurs in this line: enter image description here


最终解决方案:

从正确的位置导入:

from tensorflow.keras.utils import Sequence

旧答案:

If __getitem__从未被调用过,问题可能出在__len__。你没有返回int,你要返回一个np.int.

我建议你尝试:

def __len__(self):
    length = len(self.filenames) // self.batch_size
    if len(self.filenames) % self.batch_size > 0:
        length += 1

    return length

But if __getitem__正在被调用并返回您的数据,那么您应该检查您的数组。

自己从生成器中获取一个项目并检查内容:

x, y = train_generator[0]
  • 它们是单个数组吗?或者它们是数组的数组? (必须是单身)
  • 它们的形状是什么?它们有预期的形状吗?
  • What are their types? Usually they should be float, sometimes int (for inputs to embedding layers), very rarely string (for inputs to custom layers that know how to treat strings).
    • 输出必须始终是float, 最多int(对于稀疏损失)

您正在使用的其他假设fit with batch_size使用生成器时......这很奇怪,方法内的“if”子句可能没有准备好,您可能会陷入另一个训练案例。

直接进入常用选项:

self.model_semantic.fit_generator(train_generator, 
                                 epochs=10,
                                 verbose=1,
                                 validation_data=val_generator)

你的发电机是一个Sequence,它已经有一个__len__,你不需要指定steps_per_epoch or validation_steps.
每个生成器都有自动批量大小,每个步骤都是一个批量,仅此而已。你不需要指定batch_size in fit_generator.

如果你要使用fit,像这样:

...fit(train_generator, steps_per_epoch = len(train_generator), 
       epochs = 10, verbose = 1,
       validation_data = val_generator, validation_steps = len(val_generator))  

最后,你应该寻找任何可能的东西None(如错误消息所示)在您的代码中。

  • 检查每个函数是否都有return线。
  • 检查发电机的所有输入__init__.
  • 打印生成器内的文件名。
  • Get the __len__发电机的。
  • 尝试从生成器获取一个项目:x, y= train_generator[0]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keras 拟合生成器 - ValueError:无法找到可以处理输入的数据适配器 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • ubuntu 20.04 上无法获取卷积算法错误~tensorflow-gpu

    我有一个 NVIDIA 2070 RTX GPU 我的操作系统是 Ubuntu20 04 我已经使用 conda 安装了tensorflow gpu 包 我有not安装了 CUDA toolkit 我相信它还会安装 CUDA toolkit
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 如何解释tf.map_fn的结果?

    看代码 import tensorflow as tf import numpy as np elems tf ones 1 2 3 dtype tf int64 alternates tf map fn lambda x x x x el
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di

随机推荐

  • 从 .un~ 文件恢复 vim 文件,无需撤消命令

    如何从 vim 文件恢复undo不点击文件undo 我有一个在添加文本时保存的 vim 文件 然后我运行了一个 python 命令来清空文件的内容 我可以看到文件中包含的一些单词 un 文件 当我尝试在文件中撤消时 它说Already at
  • Java HttpURLConnection 使用 SOCKS 代理而不是 HTTP

    我有一个非常简单的代码 使用 HttpURLConnection 通过代理访问某个网站 System setProperty java net useSystemProxies true System out println Proxy P
  • 如何对项目中的单个文件禁用 ARC?

    我在我的项目中成功使用了 ARC 然而 我遇到了一些文件 例如 在单元测试和模拟对象中 其中 ARC 的规则现在有点脆弱 我记得听说有一种方法可以在每个文件的基础上禁用 ARC 尽管我一直找不到这个选项 这可能吗 如何针对每个文件禁用 AR
  • 下面代码的时间复杂度是多少?

    sum 0 for int i 1 i
  • WPF TextBlock 红色负数

    我试图找出创建样式 触发器以将前景设置为红色 当值 如果您没有使用 MVVM 模型 您可能有 ForegroundColor 属性 那么最简单的方法就是创建一个新的 IValueConverter 将您的背景绑定到您的值 在 MyWindo
  • 使用 Docker Desktop 的 WSL2 上的 Docker 卷

    我刚刚在 Windows 上使用 Docker 尝试 WSL 2 但在安装卷时遇到了问题 version 3 7 services node build container name node hostname node volumes a
  • 如何使用Qt获取wifi信号强度?

    到目前为止 我可以使用 QNetworkConfigurationManager allConfigurations 扫描所有可用的 wifi 但是每个的 QNetworkConfiguration 数据都没有 wifi 信号强度 你能告诉
  • Swift 类/结构隐式符合 NSObjectProtocol?

    不久前我遇到了奇怪的 Swift 问题 当我尝试在调试中将 Swift 对象转换为 NSObjectProtocol 时 它执行成功 但是当这段代码在 AppStore 构建中执行时 它会转换为 nil import Foundation
  • 使用c++禁用任务切换键

    我已经做了很多搜索 但没有真正的解决方案 针对我自己的问题 所以我想我会在这里问 我正在设计一个类似信息亭的程序 防止用户在程序运行时使用任务键 alt tab alt esc ctrl esc 等 请注意 我是一名新手程序员 因此如果可以
  • 数据库DateTime毫秒和纳秒如果为0则默认被截断,而在Java 11中使用ZonedDateTime时使用它

    我正在从 Oracle 数据库中获取日期时间并进行解析Java 11 https en wikipedia org wiki Java version history Java 11使用 ZonedDateTime 如下 甲骨文 gt 1
  • TypeScript TSConfig CompilerOptions ES2017 目标和库

    我正在开发一个 TypeScript 项目 我们使用 ES2017 作为输出目标以及其中一个库 因为它将通过 Babel 并且我们希望支持任何 Env 的最新功能集我们的目标是巴别塔 一切似乎都很顺利 所以我不太担心 然而 我不知道幕后发生
  • C#程序中的System.IO.Compression.FileSystem.dll

    我喜欢使用 dll系统 IO 压缩 文件系统 dll http msdn microsoft com en us library system io compression zipfile aspx在我的项目中 the net framew
  • vuejs 根据数据条件绑定一个类

    有人可以告诉我我做错了什么吗 我试图根据数据模型中是否显示是或否来绑定类 我已经尝试过条件绑定 但我想也许我缺少一个参数或者以错误的方式处理这个问题 我缺少什么 我希望 css 一月类绑定到表 如果 v bind 已经存在 我如何触发 v
  • ECMAScript6 AngularJS 过滤器

    我在项目中使用 ECMAScript6 并尝试创建角度过滤器 以下是我的尝试 但是我在控制台中收到以下错误 无法设置未定义的属性 PassFilter 我对 ES6 和 Angular 都是新手 由于遗留的限制 我不得不以这种方式引导角度
  • 如何比较两个 JSON 具有相同的属性而无需排序?

    我尝试比较这两个 JSON 对象
  • 使用 C# 驱动程序从 mongodb 检索数据

    我在我的测试项目中使用 C 的官方 mongodb 驱动程序 并且我已经将文档从 C Web 应用程序插入到 mongodb 在 mongo 控制台中 db blog find 可以显示我插入的条目 但是当我尝试检索它们时 net 抛出异常
  • Python 中 subprocess.PIPE 的非阻塞读取

    我正在使用子流程模块 http docs python org library subprocess html启动子进程并连接到其输出流 标准输出 我希望能够在其标准输出上执行非阻塞读取 有没有办法使 readline 非阻塞或在调用之前检
  • 用于从组合框中获取所选值的 JavaScript 代码

    任何人都可以给我一个从现有组合框中获取所选值的示例代码吗 我有这段代码 但它没有做任何事情 function check var e document getElementById ticket category clone var str
  • SignalR 方法访问异常

    当我尝试调试一个简单的信号应用程序时出现此错误 尝试访问该方法 Microsoft AspNet SignalR DependencyResolverExtensions InitializePerformanceCounters Micr
  • Keras 拟合生成器 - ValueError:无法找到可以处理输入的数据适配器

    我正在尝试使用自定义生成器来适应我的深度学习模型 When i fit the model it shows me this error 我试图找到类似的问题 但所有答案都是关于将列表转换为 numpy 数组 我认为这不是这个错误的问题 我