#python #tensorflow
Вопрос:
Я пытаюсь построить модель CNN для распознавания рукописного текста, обучая его набору данных IAM. Я добавил изображения в форму (150, 150, 3), и метки закодированы следующим образом:
# ASCII Character list for encoding
characterList = [c for c in '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%amp;'()* ,-./:;<=>?@[\]^{|}~']
# Mapping characters to integers
char_to_num = keras.layers.experimental.preprocessing.StringLookup(
vocabulary=characterList, mask_token=None
)
# Mapping integers back to original characters
num_to_char = keras.layers.experimental.preprocessing.StringLookup(
vocabulary=char_to_num.get_vocabulary(), mask_token=None, invert=True
)
Проблема, с которой я сталкиваюсь, заключается в том, что каждое входное изображение соответствует метке различной длины. например
- «The» = [56, 18, 15]
- «быстро» = [27, 31, 19, 13, 21]
- …
И по этой причине я не могу пакетировать набор данных, выполнив
train_df = tf.data.Dataset.from_tensor_slices((np.stack(df.X.values), df.y.values))
train_ds = train_ds.batch(batch_size)
который возвращает ошибку «Невозможно выполнить пакетирование тензоров с разными формами». Как я могу выполнить пакетную обработку объекта tf.Data.dataset?
df.X = ряд np.массива nd формы (150,150,3) df.y = ряд np.массива изменяемой длины, как обсуждалось выше.
Комментарии:
1. Как и в любой другой задаче НЛП, вы должны рассчитать количество уникальных символов в словаре, и это должно быть последним измерением ваших тензоров для каждого слова.
2. Вы можете работать с тряпичными тензорами .
3. @Priya Итак, я заполняю метки, например, 0, а затем, когда я вычисляю потерю ctc, я вычисляю длину без заполнения?
4. @Frightera Я пытался использовать неровные тензоры, но не смог обучить сеть, так как не могу вычислить потери ctc с их помощью.