如何 return 最大值及其来自张量的邻居

How to return max value and it’s neighbors from tensor

我创建了一个神经网络模型,想自定义损失函数。

我想知道如何从张量中 return 最大值及其邻居?

我知道 tf.argmax 可以 return 张量的最大值索引。但是是否有可能得到一个新的张量,它包括一系列[最大值之前的 3 个值,最大值和最大值之后的 3 个值]

刚看到你在评论里说了,你想运行在non-eager模式下(即inside loss function),所以tensor.numpy()不可用。

让我们创建一个随机张量,并找到最大值及其邻居,而不使用 numpy 和任何其他在非急切模式下不可用的函数:

a = tf.random.uniform((20,), minval=0, maxval=100,dtype=tf.int32)
tf.print(a,summarize=20)
# [5 42 25 18 15 95 1 51 47 42 36 72 92 11 21 32 1 68 84 24]

start_index = tf.maximum(0,tf.subtract(tf.argmax(a,output_type=tf.int32),3))
end_index   = tf.minimum(a.shape[0],tf.add(start_index,7))

max_neighbors = a[start_index: end_index]
tf.print(max_neighbors,summarize=7)
# [25 18 15 95 1 51 47]

以上代码,在非eager模式下可以运行。请注意,您可以将 run_eagerly=True 参数传递给 model.compile(),以不受非热切模式(例如,能够转换为 numpy)的限制编写代码,但训练效率不高。