TensorFlow (TF) 和 TensorFlow Federated (TFF) 是不同的功能层,旨在很好地协同工作(顾名思义)。
尽管如此,它们是不同的东西,旨在解决不同的问题。
我想知道以原始 TF 和 TFF 工作负载都可以使用的方式来描述计算的最佳方式是什么,以及人们可能想要避免的那种陷阱。
TensorFlow (TF) 和 TensorFlow Federated (TFF) 是不同的功能层,旨在很好地协同工作(顾名思义)。
尽管如此,它们是不同的东西,旨在解决不同的问题。
我想知道以原始 TF 和 TFF 工作负载都可以使用的方式来描述计算的最佳方式是什么,以及人们可能想要避免的那种陷阱。
好问题。实际上,至少有 3 种方法可以组合 TensorFlow 代码以与 TFF 一起使用,每种方法都有自己的优点。
如果可能,使用 @tf.function 装饰 TensorFlow 组件,并仅在顶层将整个 TensorFlow 块包装为 @tff.tf_computation,然后将其嵌入到 @tff.federated_computation 中。这样做的众多好处之一是它允许您使用标准 TensorFlow 工具测试 TFF 之外的组件。
因此,鼓励和首选以下内容:
# here using TensorFlow's compositional mechanism (defuns)
# rather than TFF's to decorate "foo"
@tf.function(...)
def foo(...):
...
@tff.tf_computation(...)
def bar(...):
# here relying on TensorFlow to embed "foo" as a component of "bar"
...foo(...)...
您可能仍希望使用此模式来允许在 TFF 之外或在 (1) 或 (3) 都不起作用的情况下测试您的组件。
因此,如果 (1) 不起作用,您应该首先考虑以下替代方案:
# here composing things in Python, no special TF or TFF mechanism employed
def foo(...):
# keep in mind that in this case, "foo" can access and tamper with
# the internal state of "bar" - you get no isolation benefits
...
@tff.tf_computation(...)
def bar(...):
# here effectively just executing "foo" within "bar" at the
# time "bar" is traced
...foo(...)...
不鼓励(尽管目前有时是必要的):
# here using TFF's compositional mechanism
@tff.tf_computation(...)
def foo(...):
# here you do get isolation benefits - "foo" is traced and
# serialized by TFF, but you can expect that e.g., some
# tf.data.Dataset features won't work
...
@tff.tf_computation(...)
def bar(...):
# here relying on TFF to embed "foo" within "bar"
...foo(...)...