【问题标题】:Adapting an existing keras model with multiple inputs to tensorflow federated将具有多个输入的现有 keras 模型适配到 tensorflow federated
【发布时间】:2019-05-12 01:45:33
【问题描述】:

我正在尝试将联合学习应用于需要两个输入的现有 keras 模型。当我调用 tff.learning.from_compiled_keras_model 并包含一个虚拟批次时,我收到此错误:ValueError: Layer model_1 expects 2 inputs, but it received 1 input tensors. Inputs received: [<tf.Tensor 'packed:0' shape=(2, 20) dtype=int64>]

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

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

我挖了一下,发现最终,tf.convert_to_tensor_or_sparse_tensor 在输入列表中被调用(在__init__ 中,_KerasModel),它返回一个形状为 (2,20) 的张量,而不是两个独立的数组或张量。是否有其他方法可以表示输入列表以避免此问题?

【问题讨论】:

    标签: tensorflow keras tensorflow-federated


    【解决方案1】:

    TFF 团队刚刚推送了一个应该包含此错误修复的提交; this commit 应该是你想要的。请特别查看tensorflow_federated/python/learning/model_utils_test.py 中的更改——添加的测试用例应该是您的问题的重现,现在它通过了。

    您拨打我们的电话至tf.convert_to_tensor_or_sparse_tensor 是对的;现在我们使用tf.nest.map_structure 将此函数调用映射到传入数据结构的叶子。请注意,Keras 还进行了一些额外的输入标准化;我们决定不在这里重复这个逻辑。

    此更改在下一个版本之前不会出现在 pip 包中,但如果您从源代码构建,它将立即可用。

    感谢这次捕获,并指出正确的地方!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2019-08-09
      • 1970-01-01
      • 2021-04-18
      相关资源
      最近更新 更多