我如何在 TensorFlow 中制作 "dynamic" 函数签名?
How would I make a "dynamic" function signature in TensorFlow?
我一直在尝试使用 @tf.function(input_signature=[...])
通过 TensorFlow 创建“动态”函数签名。更具体地说,我需要找到一种方法,使其中一个参数成为 tf.TensorSpec(shape=[None, None], dtype=tf.float32)
或 None
我目前正在尝试以下操作:
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string), tf.TensorSpec(shape=[None, None], dtype=tf.float32)])
def generate_one_step(self, inputs, states=None):
...
但由于第二个参数在某些情况下也可能是 None
我收到以下错误:
ValueError: When input_signature is provided, all inputs to the Python function must be convertible to tensors:
inputs: (
tf.Tensor([b'Test '], shape=(1,), dtype=string),
None)
input_signature: (
TensorSpec(shape=(None,), dtype=tf.string, name=None),
TensorSpec(shape=(None, None), dtype=tf.float32, name=None)).
我意识到第一个输入的形状也可能存在错误,但我不确定如何制作“可变”形状
解决方法是指定两个不同的函数。值得指出的是,TF 签名不像 Java 签名那样工作,因此您应该以不同的方式命名您的函数。
我的代码:
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string), tf.TensorSpec(shape=[None, None], dtype=tf.float32)])
def generate_one_step(self, inputs, states):
...
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string)])
def generate_one_step_none(self, inputs):
states = None
我一直在尝试使用 @tf.function(input_signature=[...])
通过 TensorFlow 创建“动态”函数签名。更具体地说,我需要找到一种方法,使其中一个参数成为 tf.TensorSpec(shape=[None, None], dtype=tf.float32)
或 None
我目前正在尝试以下操作:
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string), tf.TensorSpec(shape=[None, None], dtype=tf.float32)])
def generate_one_step(self, inputs, states=None):
...
但由于第二个参数在某些情况下也可能是 None
我收到以下错误:
ValueError: When input_signature is provided, all inputs to the Python function must be convertible to tensors:
inputs: (
tf.Tensor([b'Test '], shape=(1,), dtype=string),
None)
input_signature: (
TensorSpec(shape=(None,), dtype=tf.string, name=None),
TensorSpec(shape=(None, None), dtype=tf.float32, name=None)).
我意识到第一个输入的形状也可能存在错误,但我不确定如何制作“可变”形状
解决方法是指定两个不同的函数。值得指出的是,TF 签名不像 Java 签名那样工作,因此您应该以不同的方式命名您的函数。
我的代码:
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string), tf.TensorSpec(shape=[None, None], dtype=tf.float32)])
def generate_one_step(self, inputs, states):
...
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string)])
def generate_one_step_none(self, inputs):
states = None