Я хочу получить случайный суб-тензор от тензора, и форма будет фиксированной.Например, мне нужно получить правый тензор от левого тензора, и индекс является случайным для каждой строки, вот так:
[[1 4 3] [[3] [[4]
[3 2 1] -----> [2] or [1] (generate randomly)
[0 3 4]] [3]] [0]]
Я пробовал tf.slice и tf.gather, это не такРабота.И я попытался написать тестовый пример кода, подобный этому:
import random
import tensorflow as tf
a = tf.convert_to_tensor([[[1, 4, 3]],
[[3, 2, 1]],
[[0, 3, 4]]])
T = a.get_shape().as_list()[0]
result_list = []
for i in range(T):
idx = random.randint(0, 2) # get a random idx
result_list.append(a[i][0][idx])
y_hat = tf.reshape(tf.convert_to_tensor(result_list), shape=(T, 1))
with tf.Session() as sess:
print(sess.run(y_hat))
# y_hat: [[4]
# [1]
# [4]]
В этом тестовом примере это сработало.Но в реальной среде 'a'.shape = (None, 3), поэтому
' T = a.get_shape (). As_list () [0] 'не является значением типа int, я не могу выполнить итерацию Tпо дальности (T).Например:
import random
import tensorflow as tf
a = tf.placeholder(shape=(None, 3), dtype=tf.int32)
result_list = []
T = a.get_shape().as_list()[0]
for i in range(T):
idx = random.randint(0, 2) # get a random idx
result_list.append(a[i][0][idx])
y_hat = tf.reshape(tf.convert_to_tensor(result_list), shape=(T, 1))
with tf.Session() as sess:
a_instance = [[[1, 4, 3]],
[[3, 2, 1]],
[[0, 3, 4]]]
print(sess.run(y_hat, feed_dict={a: a_instance}))
В этом случае это не работает.Кто может сказать мне, что мне делать?