Keras:使用来自目录的flow\u为fit\u生成器提供多个输入和多个输出

Keras:使用来自目录的flow\u为fit\u生成器提供多个输入和多个输出,keras,Keras,多任务学习模型接受三个输入。我正在使用keras数据生成器。是否可以将三个数据生成器传递给model.fit\u生成器功能 问题定义 我正在处理一个分类问题。我使用的数据集是由kaggle主办的“数字画家”竞赛。任务是确定画家、风格和类型 我开发了单独的模型来执行每个任务。现在,我想结合多任务学习,看看它是否优于单个模型 类的型号(Softmax) ------ ------------------------

多任务学习模型接受三个输入。我正在使用keras数据生成器。是否可以将三个数据生成器传递给model.fit\u生成器功能

问题定义 我正在处理一个分类问题。我使用的数据集是由kaggle主办的“数字画家”竞赛。任务是确定画家、风格和类型

我开发了单独的模型来执行每个任务。现在,我想结合多任务学习,看看它是否优于单个模型

类的型号(Softmax)
------                     ------------------------                                   
模型8
给画
模型预测风格10
给画
模型预测类型23
给画
上表详细说明了各个模型以及每个模型的输出类数量

现在,我想做多任务学习,所以我提出了以下简单的架构

style=Input(shape=(64,64,3))
类型=输入(形状=(64,64,3))
画师=输入(形状=(64,64,3))
共享_conv=卷积2d(
过滤器=5,#5个特征映射
内核大小=(5,5),
步幅=1)
共享转换层=共享转换(样式)
共享会话层=共享会话(类型)
共享转换层=共享转换(画师)
合并层=keras.layers.concatenate([共享层A,共享层B,共享层C],轴=-1)
pooling=maxPoolig2D(
池大小=(2,2),
步幅=2
)(合并层)
密集=展平()(池)
out_样式=密集(
没有课,没有风格,
kernel\u初始值设定项=glorot\u normal(seed=seed\u val),
偏差\初始值设定项='零',
核正则化子=l2(l=0.0001),
激活='softmax',
)(稠密)
out\u流派=密集(
没有课程类型,
kernel\u初始值设定项=glorot\u normal(seed=seed\u val),
偏差\初始值设定项='零',
核正则化子=l2(l=0.0001),
激活='softmax',
)(稠密)
out\u painter=稠密(
没有课,没有画家,
kernel\u初始值设定项=glorot\u normal(seed=seed\u val),
偏差\初始值设定项='零',
核正则化子=l2(l=0.0001),
激活='softmax',
)(稠密)
多任务模型=模型(输入=[风格,流派,画家],输出=[风格,流派,画家])
多任务分配模型。摘要()
多任务模型编译(
损失='categorical_crossentropy',
优化器=Adam(lr=0.0001,β1=0.9,β2=0.999,ε=0.00000001),
指标=['准确度']
)
现在我想通过三个keras图像数据生成器。所以,我想出了一个定制的数据生成器

def创建数据生成器(样式生成器、流派生成器、画师生成器):
#输入
_样式生成器=样式生成器[0]
_类型生成器=类型生成器[0]
_油漆工\u生成器=油漆工\u生成器[0]
#标签
_l样式生成器=样式生成器[1]
_lgenre_生成器=类型生成器[1]
_lpainter_生成器=油漆工_生成器[1]
返回[\u样式\u生成器、\u流派\u生成器、\u画师\u生成器]、\u样式\u生成器、\u流派\u生成器、\u画师\u生成器]
train\u mulitle\u data\u generator=创建数据\u generator(trainStyleDataGenerator、TrainGenRedDataGenerator、trainPainterDataGenerator)
valid_mulitle_data_generator=创建_data_generator(validationStyleDataGenerator、ValidationGenRedDataGenerator、validationPainterDataGenerator)
历史记录=多任务\u model.fit\u生成器(
发电机=多列数据发电机,
每历元步数=len(列数数据发生器),
纪元=无纪元,
验证数据=有效的多数据生成器,
)
我遇到的错误

“tuple”对象没有属性“ndim”
是否有其他方法可以传递多个输入和多个输出。任何建议或提示都会非常有帮助


目前,
创建数据\u生成器
未定义生成器。试试这个:

def create_data_generator(style_generator,genre_generator,painter_generator):

    while(True):
        _style_generator, _lstyle_generator = next(style_generator)
        _genre_generator, _lgenre_generator = next(genre_generator)
        _painter_generator, _lpainter_generator = next(painter_generator)

        yield [_style_generator,_genre_generator,_painter_generator], [_lstyle_generator,_genre_generator,_painter_generator]