набор данных и каждая метка имеют разную длину, но одинаковый ранг.
ренировкиМодель LSTM вTensorflowЯ структурировал свои данные вtf.train.SequenceExample отформатировать и сохранить его вФайл TFRecord, Теперь я хотел бы использовать новый API DataSet длягенерировать мягкие партии для обучения, Вдокументация есть пример использования padded_batch, но для моих данных я не могу понять, какое значениеpadded_shapes должно быть.
Для чтения файла TFrecord в пакеты я написал следующий код Python:
import math
import tensorflow as tf
import numpy as np
import struct
import sys
import array
if(len(sys.argv) != 2):
print "Usage: createbatches.py [RFRecord file]"
sys.exit(0)
vectorSize = 40
inFile = sys.argv[1]
def parse_function_dataset(example_proto):
sequence_features = {
'inputs': tf.FixedLenSequenceFeature(shape=[vectorSize],
dtype=tf.float32),
'labels': tf.FixedLenSequenceFeature(shape=[],
dtype=tf.int64)}
_, sequence = tf.parse_single_sequence_example(example_proto, sequence_features=sequence_features)
length = tf.shape(sequence['inputs'])[0]
return sequence['inputs'], sequence['labels']
sess = tf.InteractiveSession()
filenames = tf.placeholder(tf.string, shape=[None])
dataset = tf.contrib.data.TFRecordDataset(filenames)
dataset = dataset.map(parse_function_dataset)
# dataset = dataset.batch(1)
dataset = dataset.padded_batch(4, padded_shapes=[None])
iterator = dataset.make_initializable_iterator()
batch = iterator.get_next()
# Initialize `iterator` with training data.
training_filenames = [inFile]
sess.run(iterator.initializer, feed_dict={filenames: training_filenames})
print(sess.run(batch))
Код работает хорошо, если я используюdataset = dataset.batch(1)
(в этом случае не требуется заполнение), но когда я используюpadded_batch
вариант, я получаю следующую ошибку:
Ошибка типа: если поверхностная структура является последовательностью, входные данные также должны быть последовательностью. Вход имеет тип:.
Можете ли вы помочь мне выяснить, что я должен передать заpadded_shapes параметр?
(Я знаю, что для этого есть много примеров кода, использующего потоки и очереди, но я бы предпочел использовать новый API DataSet для этого проекта)