- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试在 tensorflow 中编写一个仅传播每个特征图的前 k 个值的操作。
例子:
k=1,输入大小是[batch_size, x, y, channels]
假设它是[1,2,2,3]
输出应该是相同的大小,如果 k=1 则每个 x,y 平面将只有一个非零值。
numpy 中的示例:
input = [[[[6.4 1.4 1.3] [2.1 6.5 4.8]][[2.3 9.2 2.8][7.9 5.1 0.6]]]]]
输出应该是:
[[[[6.4 0. 0.] [0. 6.5 0.]] [[0. 9.2 0.] [7.9 0. 0.]]]]
为了在 tensorflow 中执行此操作,我想使用 nn.top_k,然后使用 scatter_nd。
问题是 top_k 返回请求元素的索引与 scatter_nd 需要它的方式非常不同。
top_k 以 (1,2,2, 1)
scatter_nd 需要它作为每个值的所有坐标的列表,如下所示:
[[0, 0, 0, 0], [0, 0, 1, 1], [0, 1, 0, 1], [0, 1, 1, 0]]
有谁知道在它们之间进行转换的方法吗?甚至可能完全针对此操作采取不同的方法?
最佳答案
tf.nn.top_k()
仅返回最后一个维度 中的前 k 个值。所以你必须加回所有其他维度。最简单的 tf.where()
.代码(测试):
import tensorflow as tf
inp = tf.constant( [ [ [ [6.4, 1.4, 1.3], [2.1, 6.5, 4.8] ], [ [2.3, 9.2, 2.8], [7.9, 5.1, 10.6] ] ] ] )
t, idx = tf.nn.top_k( inp, k = 2 )
idx_one_hot = tf.one_hot( idx, depth = 3 )
idx_red = tf.reduce_sum( idx_one_hot, axis = -2 )
idx2 = tf.where( tf.not_equal( idx_red, 0 ) )
with tf.Session() as sess:
print( sess.run( idx2 ) )
输出(请注意,我已将您示例中的最后一个数字更改为索引也为 2,只有 0 和 1 看起来有点误导,好像它是 bool 张量):
[[0 0 0 0]
[0 0 0 1]
[0 0 1 1]
[0 0 1 2]
[0 1 0 1]
[0 1 0 2]
[0 1 1 0]
[0 1 1 2]]
请注意,这会丢失 top_k 报告的最后一个维度中的索引顺序,它会将其更改为索引本身的递增顺序。
关于python - 使用 Tensorflow 的 top_k 和 scatter_nd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49966402/
我正在尝试将两个张量混合在一起。 scatter_nd 非常适合这种情况,我编写了以下函数来完成我的任务。它基本上只是将 2 个 scatter_nds 广告放在一起。 def tf_munge(t,
我正在尝试使用 scatter_nd TensorFlow 中的函数可对矩阵行中的元素进行重新排序。例如,假设我有代码: indices = tf.constant([[1],[0]]) update
在tensorflow中,如何将动态形状应用于scatter_nd? 当我使用具有动态形状的输入张量时,出现以下错误: ValueError: Cannot convert a partially k
我试图只优化变量的一部分。我找到了 this看似有用的答案。 但是我的变量是一个图像,我只想更改它的一部分,所以我试图将代码扩展到更多维度。这似乎工作正常: import tensorflow as
假设我有一个 (None, 2)-shape 张量 indices 和 (None,)-shape 张量 values。这些实际行号和值将在运行时确定。 我想设置一个 4x5 张量 t,索引的每个元素
我在将 tf.scatter_nd_add() 应用于二维张量时遇到困难。该文档有点不清楚,没有包含稀疏更新的示例,但仅包含完整切片更新的示例。 我的情况如下: 更新 - 形状为 [None, 6]
我读过 tf.scatter_nd documentation并运行 1D 和 3D 张量的示例代码......现在我正在尝试为 2D 张量执行此操作。我想“交错”两个张量的列。对于一维张量,可以通过
我正在尝试在 tensorflow 中编写一个仅传播每个特征图的前 k 个值的操作。 例子: k=1,输入大小是[batch_size, x, y, channels] 假设它是[1,2,2,3] 输
给定形状为[batch_size, sequence_len]的indices,形状为[batch_size, sequence_len, sampled_size]的updates >,to_sha
我是一名优秀的程序员,十分优秀!