Tensorflow. Преобразование неизвестного размера размера тензора в int

Предположим, что мы имеем

a = tf.placeholder(tf.float32, shape=(None, 3072))
b = a.get_shape()[0]

Как я могу преобразовать b, чтобы я мог использовать его в дальнейших вычислениях, например, для заданного тензора T я смогу создать новый, например

newT = T / b

Ответы

Ответ 1

Вы должны использовать операцию Graph:

a = tf.placeholder(tf.float32, shape=(None, 3072))
b = tf.shape(a)[0]

возвращается

<tf.Tensor 'strided_slice:0' shape=() dtype=int32>

а b = a.get_shape()[0] возвращает

Dimension(None)

Ответ 2

Ваш текущий путь уже работает. Я попробовал его со следующим кодом, и он отлично работает:

x = [[1,2,3],[4,5,6], [7,8,9]]
x = tf.constant(x)
size = x.get_shape()[0]
x /= size

with googlelog.Capture():
  p_op = tf.Print(x, [x], "output: ", summarize=10)
  sess.run(p_op)

С выходом:

output: [0 0 1 1 1 2 2 2 3]