Я не думаю, что это возможно сделать с наборами данных TensorFlow, потому что, как объясняется в сообщении об ошибке, только первое измерение (обычно измерение пакета) может быть динамическим c.
этот объект tf.data.Dataset
обычно ожидает прямоугольный массив angular. Сбой следующего, например:
tf.data.Dataset.from_tensor_slices([[1], [1, 2]])
Это можно было бы сделать напрямую с объектом tf.data.Dataset
, но вы не сможете группировать образцы в размере пакета> = 2, потому что их формы различаются.
def _generate_examples():
for idx in range(100):
size = np.random.uniform(10, 20, size=(2, )).astype(np.int32)
k = np.random.normal(size=size).astype(np.float32)
yield k
d = tf.data.Dataset.from_generator(_generate_examples, output_types=np.float32)
next(iter(d)) # Works!
next(iter(d.batch(2)))
# Fails with error:
# InvalidArgumentError: Cannot batch tensors with different shapes in component 0.
# First element had shape [11,10] and element 1 had shape [13,17].
Возможно, вы захотите изучить возможность использования большего тензора с формой stati c, а затем заполнить его динамическим меньшим тензором. Таким образом, у вас есть статическая форма c, но у вас все еще есть данные динамической формы. Форма динамических данных c может быть особенностью набора данных, который выдается в генераторе вместе с индексом и данными.