У меня есть тензор tensor
формы (?, 1082)
, и я хочу разрезать этот тензор на части n
в цикле for, но я хочу сохранить исходную форму, включая неизвестное измерение ?
.
Пример:
lst = []
for n in range(15):
sub_tensor = tensor[n] # this will reduce the first dimension
print(sub_tensor.get_shape())
Вывод на печать, который я ищу:
(?, 1082)
(?, 1082)
и т.п.
Как этого можно добиться в TensorFlow?
Учитывая, что ваша проблема может иметь много ограничений, я могу придумать как минимум 3 решения.
Вы можете использовать tf.split
. Я буду использовать tf.placeholder, но он также применим к тензорам и переменным.
p = tf.placeholder(shape=[None,10], dtype=tf.int32)
s1, s2 = tf.split(value=p, num_or_size_splits=2, axis=1)
Однако этот подход может стать неосуществимым, если требуется большое количество расщеплений. Обратите внимание, что он также может разделить ось None
.
for n in range(15):
sub_tensor = tensor[n, :]
s = tf.slice(p, [0,2], [-1, 2])
Срез можно использовать для многомерных тензоров, но его довольно сложно использовать. И вы можете использовать метод tf.Tensor.getitem
, почти как вы описали в своем вопросе. Он действует аналогично NumPy
. Итак, это должно выполнять работу:
for n in range(10):
print(p[n, :])
Однако использование этих методов сильно зависит от вашего конкретного приложения. Надеюсь это поможет.
Есть ли у вас какие-либо ограничения, связанные с природой расщеплений, n частей должны быть равны? или n-1 равных частей и последняя часть осталась?
tf.split
можно легко применить здесь