如何在keras生成器中使用NN?

如何在keras生成器中使用NN?,keras,generator,Keras,Generator,我正在安装一个fit_发电机,由keras培训DNN。但我不知道如何在这个发生器里使用CNN 基本上,我有一个预先训练过的图像生成器,使用完全连接的卷积网络,我们可以将其命名为GEN-NET。现在我想在我的fit_生成器中使用这个完整的CNN来生成无限数量的图像,以便在keras中训练另一个名为CLASS-NET的分类器。但它总是使我的训练失败,错误信息是: ValueError:Tensor Tensordecoder/transform_output/mul:0,shape=?,128,12

我正在安装一个fit_发电机,由keras培训DNN。但我不知道如何在这个发生器里使用CNN

基本上,我有一个预先训练过的图像生成器,使用完全连接的卷积网络,我们可以将其命名为GEN-NET。现在我想在我的fit_生成器中使用这个完整的CNN来生成无限数量的图像,以便在keras中训练另一个名为CLASS-NET的分类器。但它总是使我的训练失败,错误信息是:

ValueError:Tensor Tensordecoder/transform_output/mul:0,shape=?,128,128,1,dtype=float32不是此图的元素

这个解码器/transform_output/mul:0是我的CNN GEN-NET的输出


所以我的问题是,我可以在我的fit_生成器中使用基于CNN的GEN-NET来训练玻璃网,还是keras中不允许使用玻璃网?

看起来你可能有点搞混了!CNN卷积神经网络需要根据您的数据进行训练,除非您使用预训练网络进行预测。如果你要训练CNN,你可以使用fit或fit_生成器功能。如果您直接输入数据,请使用fit;如果您的数据由处理,请使用fit_generator。如果加载预先训练的模型/权重只是为了进行预测,则不需要使用任何拟合函数,因为不需要进行任何训练。

Keras并不喜欢在一次训练中运行两个单独的模型。您可以在使用模型后使用K.clear_会话,但这会产生大量开销

IMHO,最好的方法是预先生成这些图像,然后使用生成器加载它们。基本上把你的程序分成两个独立的程序


否则,如果您使用tensorflow作为后端,可能有一种方法可以通过切换tf.Session上的默认图形来实现,您可以在谷歌上搜索它,但我不推荐它!:

你能更好地解释问题和设置吗?我不确定我是否理解你的意思:我已经培训了一个图像生成器。图像生成器是一个完全连接的CNN,由编码器-解码器组成,可以生成图像。在我的项目中,我使用这个图像生成器将一些输入图像转换为另一种类型的图像。我想用这些转换后的图像来训练另一个基于DNN的分类器。实际上我有两个网络。一个是一个预先训练好的基于CNN的生成器,它可以生成不同种类的图像。另一个是基于CNN的分类器,它将被训练。所以我想做的是在fit_generator中使用这个基于CNN的生成器来生成图像,并使用这些图像来训练我的第二个基于CNN的分类器。啊。看起来你可以训练第一个CNN,冻结它,然后将它的输出连接到下一个网络的输入,然后安装发电机,也许?如下所示:第二个模型\u x=第一个模型。层[-1]作为第二个模型的输入层,然后第二个模型=模型输入=第一个模型。层[0]。输入、输出=第二个模型\u x或类似。谢谢。我为图像生成器创建了一个新的图形会话,它可以正常工作。