keras 将Tensor中的值舍入为列表中的值

iyfamqjs  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(149)

我尝试将2DTensor中的值舍入为给定列表中最接近的值,例如:

# this is eager, but the solution must work with non eager tensors
data_to_round = tf.constant([[0.3, 0.4, 2.3], [1.4, 2.2 ,55.4]])
possible_rounding_results = [1,2,3,4,5,6]

# TODO: round `data_to_round` to nearest values from `possible_rounding_results`
# expected output: [[1, 1, 2], [1, 2 , 5]]

我正在使用tf.math.subtracttf.math.abstf.argmin,以便使用for循环找到列表之间的最小绝对差的索引,但后来我未能将它们组合回Tensor,并且它根本不适用于2D数组只有1D。我不确定这是否是解决这个问题的正确方法。
由于我完全缺乏使用TensorFlow的经验,我不知道如何解决这个问题,我只是想提前回答这个肤浅的问题。

ttcibm8c

ttcibm8c1#

如果我理解正确的话,你可以试试这样的:

import tensorflow as tf

x = tf.constant([[0.3, 0.4, 2.5], [1.4, 2.2, 55.4]])
possible_rounding_results = tf.constant([1,2,3,4,5,6], dtype=tf.float32)

tf.clip_by_value(tf.round(x), tf.reduce_min(possible_rounding_results), tf.reduce_max(possible_rounding_results))
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[1., 1., 2.],
       [1., 2., 6.]], dtype=float32)>

最后一个值是6而不是5(如您的示例中所示),因为6比5更接近55.4。如果你想使用tf.constant([[0.3, 0.4, 2.5], [1.4, 2.2, 5.4]]),你会得到:

<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[1., 1., 2.],
       [1., 2., 5.]], dtype=float32)>

相关问题