Подача отдельных примеров в график TensorFlow, обученный на файлах?

Я новичок в TensorFlow и немного запутался в механике чтения данных. Я настроил график TensorFlow для данных mnist, но я хотел бы изменить его, чтобы я мог запустить одну программу для ее обучения + сохранить модель и запустить другую, чтобы загрузить указанный график, сделать прогнозы и вычислить точность теста. .

Где я запутался, так это в том, как обойти исходную систему ввода-вывода в графе обучения и «ввести» изображение для прогнозирования или кортеж (изображение, метка) тестовых данных для проверки точности. Чтобы прочитать данные обучения, я использую этот код:

_, input_data = util.read_examples(
    paths_to_files,
    batch_size,
    shuffle=shuffle,
    num_epochs=None)

feature_map = {
    'label': tf.FixedLenFeature(
    shape=[], dtype=tf.int64, default_value=[-1]),
    'image': tf.FixedLenFeature(
    shape=[NUM_PIXELS * NUM_PIXELS], dtype=tf.int64),
}
example = tf.parse_example(input_data, features=feature_map)

Затем я передаю пример сверточному слою и т. д. и генерирую вывод.

Теперь представьте, что я обучаю свой график с помощью этого кода, указывающего входные данные, сохраняю график и веса, а затем восстанавливаю график и веса в другом скрипте для предсказания — я хотел бы взять (скажем) 10 изображений и передать их в график для создания прогнозов. Как мне «вставить» эти 10 изображений, чтобы прогнозы вышли на другом конце?

Я играл со словарями каналов и заполнителями, но я не уверен, что они мне подходят... похоже, что они полагаются на наличие данных в памяти, а не на чтение из очереди тестовых данных. , Например.

Спасибо!


person user358829    schedule 18.10.2016    source источник


Ответы (1)


Словарь каналов с заполнителями имел бы смысл, если вы хотите выполнить небольшое количество выводов/оценок (т.е. достаточно, чтобы поместиться в памяти) - например. если вы обслуживали простую модель или запускали небольшие циклы eval.

Если вы специально хотите вывести или оценить большие пакеты, вам следует использовать тот же подход, который вы использовали для обучения, но с другим путем к вашим тестовым/оценочным/живым данным. например

_, eval_data = util.read_examples(
    paths_to_files,  # CHANGE THIS BIT
    batch_size,
    shuffle=shuffle,
    num_epochs=None)

Вы можете использовать это как обычную переменную Python и настроить последовательные зависимые шаги, чтобы использовать это как предоставленную переменную. например

def get_example(data):
    return tf.parse_example(data, features=feature_map)

sess.run([get_example(path_to_your_data)])
person Mark McDonald    schedule 18.10.2016
comment
хорошо круто, это имеет смысл. у меня возникли проблемы с тем, как это работает при загрузке моего графика - исходный узел util.read_examples находится где-то в этом графике, и мне нужно как-то обойти или изменить его. проще всего просто изменить мой график, чтобы удалить его и добавить новый узел подачи? - person user358829; 18.10.2016
comment
Ааа - обычно для вывода и обучения строят несколько разные графики, но я думаю, что самое простое решение - использовать тот же график, но предоставить диктант подачи во время вывода. Вы можете передать тензор, который хотите заменить, в качестве ключа в dict и значение, которое вы хотите для этого тензора, в качестве значения. Я думаю, что в вашем примере вы могли бы использовать sess.run([your_inference_tensors], { example['image']: your_image_data }). Проверьте Session.run() документы для большей ясности. - person Mark McDonald; 19.10.2016