You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Keras开发视频帧生成器时遇keras.utils无Sequence属性报错求助

AttributeError: module 'keras.utils' has no attribute 'Sequence' 报错解决方案

该报错由Keras导入路径混用导致:TensorFlow 2.x版本内置了Keras模块,和独立安装的Keras包路径不互通,你代码中同时导入了独立Keras和tf.keras,调用路径不匹配触发报错。

解决方案如下:

  • 统一所有Keras相关调用的路径,优先使用TensorFlow内置的tf.keras,删除import keras导入语句,所有后续Keras方法调用都采用tf.keras.xxx格式:
    你代码中自定义的FramesGenerator已经继承了tf.keras.utils.Sequence,只需要把训练时调用的keras.model.fit_generator改为tf.keras.Model.fit_generator即可适配。如果你的TensorFlow版本>=2.1,直接调用fit方法就行,TF2.1之后的fit已经原生支持生成器输入,不需要单独调用fit_generator。
  • 如果你坚持使用独立安装的Keras包,需要将自定义生成器的继承父类改为keras.utils.Sequence,同时保证你的独立Keras版本>=2.2,该版本才首次内置了Sequence类。

调整后的参考代码如下:

import glob
import os
import sys
import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
# 删掉了原import keras行,统一走tf.keras路径
from frame import files2frames, images_normalize, frames_show

# 此处继承tf.keras.utils.Sequence,和后续训练调用的tf.keras方法适配
class FramesGenerator(tf.keras.utils.Sequence):
    """为Keras.model.fit_generator读取并返回视频帧/光流数据
    生成器支持多线程调用,初始化阶段完成标签独热编码等前置校验
    """

    def __init__(self, sPath: str, \
                 nBatchSize: int, nFrames: int, nHeight: int, nWidth: int, nChannels: int, \
                 liClassesFull: list = None, bShuffle: bool = True):
        """
        要求目录结构为:
        ... / sPath / 类别 / 视频名称 / 帧.jpg
        """

        '初始化'
        self.nBatchSize = nBatchSize
        self.nFrames = nFrames
        self.nHeight = nHeight
        self.nWidth = nWidth
        self.nChannels = nChannels
        self.tuXshape = (nFrames, nHeight, nWidth, nChannels)
        self.bShuffle = bShuffle

内容的提问来源于stack exchange,提问作者Swapneel Managaonkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:57:04