我有一个张量T,形状为(A,?,B,C)。我也有一个张量索引,我定义为I = tf.argmax(something)。我想定义T(I,?,:,:)。当索引I不是张量对象而是整数时,操作T(I,:,:,:)效果很好。我是张量= tf.argmax时怎么办?
答案 0 :(得分:0)
切片张量T(I,:,:,:)
时,I
是张量,而整数Tensorflow version 2.1
可以很好地工作。
下面提到的代码使用形状为(A, ?, B, C)
的张量,该张量同时使用T(I,:,:,:)
的张量值和tf.argmax
的整数值来切片tf.argmax
。
%tensorflow_version 2.x
import tensorflow as tf
import numpy as np
b = np.ones(shape = (2,3,3,4))
a = tf.Variable(b, shape = (2,None, 3,4), dtype = tf.int32)
l = [166.32, 10, 26.9, 2.8, 1, 62.3]
b = tf.math.argmax(input = l)
c = tf.keras.backend.eval(b)
print('b = {} and c = {}'.format(b,c))
a = tf.ones(shape = (2,5,3,4))
Arg_Max_Tensor_Val = a[b,:,:,:]
Arg_Max_Int_Val = a[c,:,:,:]
print(Arg_Max_Int_Val)
print(Arg_Max_Tensor_Val)
下面提到的是输出:
tf.Tensor(
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]], shape=(5, 3, 4), dtype=float32)
tf.Tensor(
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]], shape=(5, 3, 4), dtype=float32)
请告诉我该代码是否可以解决您的问题。如果没有,请分享您使用的代码,以便我们进行进一步调查。谢谢!