tf.cast 不更改 dtype 原始问题:tensorflowjs 错误:传递给 'conv2d' 的参数 'x' 必须是 float32 张量,但得到了 int32 张量



我正试图用tensorflowjs加载我在tensorflow(Python(中开发的模型,并对输入测试进行预测,如下所示:

tf_model = await tf.loadGraphModel('http://localhost:8080/tf_models/models_js/model/model.json')
let test_output = await tf_model.predict(tf.tensor2d([0.0, -1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1, 9], 'float32'))
console.log("[Test tf model]:", test_output.arraySync())

我在js控制台的tf_model.predict 中收到了这个错误

Error: Argument 'x' passed to 'conv2d' must be float32 tensor, but got int32 tensor

即使Conv2D层的输入在模型定义中是float32类型


inputs = tf.keras.layers.Input((9))
# One-Hot encoding
x = tf.cast(tf.one_hot(tf.cast(inputs + 1, tf.int32), 3), tf.float32)
x = tf.reshape(x, (-1, 3, 3, 3))
x = tf.keras.layers.Conv2D(
filters=3**5, kernel_size=(3, 3), kernel_regularizer=kernel_regularizer
)(x)

有人知道为什么会发生这种事吗?

编辑:如果我运行,似乎tf.cast不会更改类型

print(tf.shape(inputs))
x = tf.cast(tf.one_hot(tf.cast(inputs + 1, tf.int32), 3), tf.float32)
print(tf.shape(x)

我一直收到tf.int32

KerasTensor(type_spec=TensorSpec(shape=(2,), dtype=tf.int32, name=None), inferred_value=[None, 9], name='tf.compat.v1.shape_12/Shape:0', description="created by layer 'tf.compat.v1.shape_12'")
KerasTensor(type_spec=TensorSpec(shape=(3,), dtype=tf.int32, name=None), inferred_value=[None, 9, 3], name='tf.compat.v1.shape_13/Shape:0', description="created by layer 'tf.compat.v1.shape_13'")

如果有人遇到同样的错误,我从github存储库维护人员那里得到的答案是,TFJS现在只支持onehot操作的int32输出。无论如何,他们已经将两个pull请求合并到master分支,可能会在未来解决这个问题,请参阅https://github.com/tensorflow/tfjs/issues/6773编辑:自3.20版以来现已修复

相关内容

  • 没有找到相关文章

最新更新