假设我有一个名为@foreach (var song in (IEnumerable<Tuple<Song, Artist>) ViewData["songs"])
{
var item = song.Item1;
var artist = song.Item2;
的张量为[batch_size, 5, 10]
的张量。
我还有另一个大小为my_tensor
的张量保持索引[batch_size, 1]
。
我希望针对selecter
过滤my_tensor
以生成新的张量selecter
,即仅选择[batch_size, 10]
包含的值。基本上,它有点减少中间维度(大小为5)。
我觉得selecter
是正确的选择,但不确定。
我真的很感谢你的帮助!
答案 0 :(得分:2)
解决方案是使用tf.gather_nd
。
tf.gather_nd(
my_tensor,
tf.stack([tf.range(batch_size), tf.squeeze(selecter)], axis=-1))
如果您从一开始就将squeeze
构建为1-D,则可以摆脱selecter
。
答案 1 :(得分:0)
替代解决方案,适用于Tensorflow 1.3:
max_selecter = tf.reduce_max(selecter) + 1
my_tensor = tf.boolean_mask(
outputs,
tf.logical_xor(
tf.sequence_mask(my_tensor + 1, max_selecter),
tf.sequence_mask(my_tensor, max_selecter)
)
)