tenorflow tf.py_func загрузка pickle Ошибка при броске итератора, неизвестные фигуры - PullRequest
0 голосов
/ 03 января 2019

Я пишу конвейер tf.data для ввода в keras позже.Дело в том, что мои данные в форме файлов рассола.У меня есть список имен файлов, передаваемых в tf-данные, которые я собираюсь загрузить, используя собственный tf.py_func, вызывающий pickle внутри.

Проблема возникает, когда я пытаюсь построить итератор из набора данных, выдавая ошибку, что

"Невозможно преобразовать значение,), типы: (tf.float32, tf.float32)> к типу TensorFlow DType. "

Я полагаю, это потому, что тензор потока не может определить форму загруженных данных рассола.Я немного растерялся, как поступить, или если это вообще возможно в данных TF.

dataset = tf.data.Dataset.from_tensor_slices(dataset_filepath_list)

def parse_input_data_function(filename):
    # pickle file is a tuple, (data, label)
    histogram_data, label = pickle.load(open(filename, 'rb'))
    histogram_data = historgram_data.transpose(1, 0)
    histogram_data = historgram_data.reshape([-1, 8, 32])
    return histogram_data.astype('float32'), float(label)

dataset = dataset.map(
    lambda filename : tuple(tf.py_func(
        parse_input_data_function, [filename], [tf.float32, 
tf.float32])))

dataset = dataset.shuffle(len(dataset_filename_list))
    .batch(batch_size).repeat()

# this line is where the error occurs
training_iterator = tf.data.Iterator.from_structure(dataset, 
dataset.output_shapes)

1 Ответ

0 голосов
/ 03 января 2019

Ваша проблема в том, что вы передаете неправильные аргументы tf.data.Iterator.from_structure. Это должно занять (output_types, output_shapes), но вы даете набор данных и его формы. Попробуйте это:

training_iterator = tf.data.Iterator.from_structure(dataset.output_types, dataset.output_shapes)

И затем, чтобы использовать итератор с соответствующим набором данных:

input_data, output_data = training_iterator.get_next()
train_init = training_iterator.make_initializer(dataset)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...