Постановка проблемы
Я следую этому учебнику . Сначала учебник загружает контролируемый набор данных (используя tfds.load
с as_supervised=True
):
(train_data, test_data), info = tfds.load(
'imdb_reviews/subwords8k',
split = (tfds.Split.TRAIN, tfds.Split.TEST),
with_info=True, as_supervised=True)
Затем учебник предлагает перемешать и дополнить набор данных следующим образом:
Mov ie рецензии могут быть разной длины. Мы будем использовать метод padded_batch
для стандартизации длины проверок.
train_batches = train_data.shuffle(1000).padded_batch(10)
test_batches = test_data.shuffle(1000).padded_batch(10)
... но, к сожалению, метод padded_batch
нуждается в дополнительном аргументе, что учебник, кажется, забыл:
Traceback (most recent call last):
File "imdb_reviews.py", line 14, in <module>
train_batches = train_data.shuffle(1000).padded_batch(10)
TypeError: padded_batch() missing 1 required positional argument: 'padded_shapes'
Важное предположение
Хотя в стеке ошибок говорится, что padded_shapes
является отсутствующим аргументом, из учебника я считаю справедливым сделать вывод, что отсутствующий аргумент на самом деле batch_size
(что должно предшествовать padded_shapes
).
То, что я пробовал
Я думал, что это можно легко исправить следующим образом:
batch_sz = 100 # arbitrary number
train_batches = train_data.shuffle(1000).padded_batch(batch_sz, ([10],[None]))
test_batches = test_data.shuffle(1000).padded_batch(batch_sz, ([10],[None]))
... но мое решение, по-видимому, неверно:
Traceback (most recent call last):
File "imdb_reviews.py", line 15, in <module>
train_batches = train_data.shuffle(1000).padded_batch(batch_sz, ([10],[None]))
File "/home/ggiuffre/.local/lib/python3.7/site-packages/tensorflow_core/python/data/ops/dataset_ops.py", line 2298, in padded_batch
batch_size, padded_shapes, padding_values, drop_remainder))
File "/home/ggiuffre/.local/lib/python3.7/site-packages/tensorflow_core/python/data/ops/dataset_ops.py", line 1481, in padded_batch
drop_remainder)
File "/home/ggiuffre/.local/lib/python3.7/site-packages/tensorflow_core/python/data/ops/dataset_ops.py", line 3813, in __init__
_padded_shape_to_tensor(padded_shape, input_component_shape))
File "/home/ggiuffre/.local/lib/python3.7/site-packages/tensorflow_core/python/data/ops/dataset_ops.py", line 3741, in _padded_shape_to_tensor
% (padded_shape_as_shape, input_component_shape))
ValueError: The padded shape (None,) is not compatible with the corresponding input component shape ().
Замена None
на ()
дает мне ValueError: Padded shape [()] must be a 1-D tensor of tf.int64 values, but its shape was (1, 0).
Замена None
на 1
дает мне ValueError: The padded shape (1,) is not compatible with the corresponding input component shape ().
Задача
Какое значение я должен дать аргументу padded_shapes
? Или, в целом, что я здесь не так делаю?
Большое спасибо за помощь.