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:无法找到可以处理输入的数据适配器 的相关文章

  • 通过 boto3 承担 IAM 用户角色时访问被拒绝

    Issue 我有一个 IAM 用户和一个 IAM 角色 我正在尝试将 IAM 用户配置为有权使用 STS 承担 IAM 角色 我不确定为什么收到 访问被拒绝 错误 Details IAM 角色 arn aws iam 123456789 r
  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • 为什么我的混淆矩阵只返回一个数字?

    我正在做二元分类 每当我的预测等于事实时 我发现sklearn metrics confusion matrix返回单个值 难道没有问题吗 from sklearn metrics import confusion matrix print
  • 如何删除 PyCharm 中的项目?

    如果我关闭一个项目 然后删除该项目文件夹 则在 PyCharm 重新启动后 会再次创建一个空的项目文件夹 只需按顺序执行以下步骤即可 他们假设您当前在 PyCharm 窗口中打开了该项目 单击 文件 gt 关闭项目 关闭项目 在 PyCha
  • 如何调整 matplotlib 单选按钮的大小和纵横比?

    我已经尝试了几个小时来使简单的单选按钮列表的大小和纵横比正确 但没有成功 首先 导入模块 import matplotlib pyplot as plt from matplotlib widgets import RadioButtons
  • 尝试从网页Python和BeautifulSoup获取编码

    我试图从网页检索字符集 这会一直改变 目前我使用 beautifulSoup 来解析页面 然后从标题中提取字符集 这工作正常 直到我遇到一个网站 到目前为止 我的代码以及与其他页面一起使用的代码是 def get encoding soup
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 为什么在Python解释器中输入_会返回True? [复制]

    这个问题在这里已经有答案了 我的翻译行为非常奇怪 gt gt gt True gt gt gt type True
  • 无法在 PyCharm 版本 9.3.3 中安装 NumPy。 Python版本3.8.2

    在 PyCharm 中安装 NumPy 时出错 尝试安装 Microsoft Visual C 14 0 还是行不通 NumPy 正在通过命令安装pip3 install numpy在 cmd 终端中 但是当尝试将其安装在 PyCharm
  • 使用 suds SOAP 库进行 HTTP 身份验证的奇怪行为

    我有一个正在运行的 python 程序 它使用 suds 通过 SOAP 获取大量数据 Web服务是通过分页功能实现的 这样我就可以抓取nnn每个 fetch 调用的行并获取下一个nnn与后续的电话 如果我使用如下代码向 HTTP 服务器进
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • 描述符“join”需要“unicode”对象,但收到“str”

    代码改编自here http wiki geany org howtos convert camelcase from foo bar to Foo Bar def lower case underscore to camel case s

随机推荐

  • 从 .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 数组 我认为这不是这个错误的问题 我