将具有多个输入的现有keras模型改编为tensorflow联邦模型

将具有多个输入的现有keras模型改编为tensorflow联邦模型,tensorflow,keras,tensorflow-federated,Tensorflow,Keras,Tensorflow Federated,我试图将联邦学习应用到一个现有的keras模型,该模型需要两个输入。当我调用tff.learning.from_compiled_keras_model并包含一个虚拟批时,我得到了以下错误:ValueError:Layer model_1需要2个输入,但它收到了1个输入张量。接收到的输入:[] 该模型接受两个numpy数组作为输入,因此我将虚拟批定义为: x = tf.constant(np.random.randint(1,100, size=[20])) collections.Ordere

我试图将联邦学习应用到一个现有的keras模型,该模型需要两个输入。当我调用
tff.learning.from_compiled_keras_model
并包含一个虚拟批时,我得到了以下错误:
ValueError:Layer model_1需要2个输入,但它收到了1个输入张量。接收到的输入:[]

该模型接受两个numpy数组作为输入,因此我将虚拟批定义为:

x = tf.constant(np.random.randint(1,100, size=[20]))
collections.OrderedDict([('x', [x, x]), ('y', x)])

我仔细研究了一下,最终发现,
tf.convert\u to\u tensor\u或\u sparse\u tensor
在输入列表中被调用(在
\uuu init\uuuu
\u KerasModel
中),它返回一个形状张量(2,20),而不是两个单独的数组或张量。是否有其他方法可以表示输入列表以避免此问题?

TFF团队刚刚推送了一个应该包含此错误修复的提交;应该是你想要的。特别请参见
tensorflow\u federated/python/learning/model\u utils\u test.py
中的更改——添加的测试用例应该是您问题的翻版,现在已经通过了

你对tf的调用是正确的。将u转换为张量或稀疏张量;现在我们使用
tf.nest.map_结构
将此函数调用映射到传入数据结构的叶子。注意,Keras还做了一些额外的输入规范化;我们决定不在这里重复这种逻辑

在下一个版本之前,这个更改不会出现在pip包中,但是如果您从源代码构建,它现在就可以使用了

谢谢你的接球,并指向正确的地方