使用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
相关产品推荐
相关产品推荐

