TensorFlow Probability输出类型错误:Dataset喂模异常排查
TensorFlow Probability输入格式与输出类型适配问题解决
问题场景
使用TensorFlow Probability时遇到输入格式与输出类型不匹配的问题:
- 参考示例中执行
y_hat=model(x_tst),返回的y_hat类型为tensorflow_probability.python.layers.internal.distribution_tensor_coercible._TensorCoercible,可适配后续概率操作; - 我构建了双输入头模型的Dataset作为输入,代码如下:
input_1 = tf.data.Dataset.from_tensor_slices(X) input_2 = tf.data.Dataset.from_tensor_slices(Xphysio) output = tf.data.Dataset.from_tensor_slices(y) combined_dataset = tf.data.Dataset.zip(((input_1, input_2), output)) input_dataset = combined_dataset.batch(32)
- 尝试直接用
y_hat=model(x_tst)喂入Dataset时,触发错误:
TypeError: Inputs to a layer should be tensors. Got: <BatchDataset element_spec=((TensorSpec(shape=(None, 120, 9), dtype=tf.float32, name=None), TensorSpec(shape=(None, 24), dtype=tf.float32, name=None)), TensorSpec(shape=(None,), dtype=tf.float32, name=None))>
- 但
model.predict()返回的结果无法适配TensorFlow Probability的后续操作。
解决方法
问题出在直接将Dataset对象传入模型调用,模型期望的输入是张量而非Dataset实例。改用NumPy数组作为输入即可得到正确的输出类型,适配后续概率操作。
示例代码:
# 从Dataset中提取批次数据并转为NumPy数组 for (x1_batch, x2_batch), _ in input_dataset.take(1): x1_np = x1_batch.numpy() x2_np = x2_batch.numpy() # 用NumPy数组喂入模型 y_hat = model([x1_np, x2_np])
此时得到的y_hat会是预期的tensorflow_probability.python.layers.internal.distribution_tensor_coercible._TensorCoercible类型,可正常用于TensorFlow Probability的后续操作。
内容的提问来源于stack exchange,提问作者Jonathan Roy
相关产品推荐
相关产品推荐

