Я работаю над программным обеспечением OCR, оптимизированным для изображений с камер телефона.
В настоящее время каждое изображение размером 300 x 1000 x 3 (RGB) переформатируется в виде массива 900 x 1000. У меня есть планы относительно более сложной модели архитектуры, но сейчас я просто хочу, чтобы базовая работа работала. Я хочу начать с тренировки статического RNN на сгенерированных мной данных.
Формально, я кормлю n_t на каждом временном шаге t для T временных шагов, где n_t - вектор 900, а T = 1000 (аналогично чтению всего изображения слева направо). Вот код Tensorflow, в котором я создаю партии для обучения:
sequence_dataset = tf.data.Dataset.from_generator(example_generator, (tf.int32,
tf.int32))
sequence_dataset = sequence_dataset.batch(experiment_params['batch_size'])
iterator = sequence_dataset.make_initializable_iterator()
x_batch, y_batch = iterator.get_next()
В документации tf.nn.static_bidirectional_rnn утверждается, что входные данные должны быть «списком входов длины T, каждый из которых представляет собой тензор формы [batch_size, input_size] или вложенный кортеж таких элементов». Итак, я делаю следующие шаги, чтобы получить данные в правильном формате.
# Dimensions go from [batch, n , t] -> [t, batch, n]
x_batch = tf.transpose(x_batch, [2, 0, 1])
# Unpack such that x_batch is a length T list with element dims [batch_size, n]
x_batch = tf.unstack(x_batch, experiment_params['example_t'], 0)
Не изменяя пакет дальше, я делаю следующий вызов:
output, _, _ = tf.nn.static_rnn(lstm_fw_cell, x_batch, dtype=tf.int32)
Обратите внимание, что я не указываю явно Tensorflow размеры матриц (это может быть проблемой). Все они имеют одинаковую размерность, но я получаю следующую ошибку:
ValueError: Input size (dimension 0 of inputs) must be accessible via shape
inference, but saw value None.
В какой момент в моем стеке я должен объявлять размеры моего ввода? Поскольку я использую набор данных и надеюсь получить его пакеты непосредственно в RNN, я не уверен, что маршрут "placeholder -> feed_dict" имеет смысл. Если это действительно тот метод, который имеет больше смысла, дайте мне знать, как это выглядит (я точно не знаю). В противном случае, дайте мне знать, если у вас есть другие идеи по этой проблеме. Спасибо!