TF: как создать набор данных из данных, введенных пользователем

Недавно я начал играть с tensorflow и, в частности, с новым API набора данных. Я успешно использовал набор данных для подачи обучающих данных в мою простую модель, подключив итераторы набора данных к узлам моего графика, представляющего ввод и метку. Что-то вроде:

input = input_dataset.make_one_shot_iterator().get_next() 
label = label_dataset.make_one_shot_iterator().get_next()

Теперь мне интересно, что делать, когда мне нужно сделать вывод на основе пользовательского ввода, то есть пользователь дает мне одно единственное входное значение, и я должен сделать свой прогноз. Если бы у меня был заполнитель, я бы просто поместил пользовательский ввод в feed_dict, но с API набора данных я очень плохо представляю, как сделать что-то подобное. Должен ли я иметь отдельный график только для вывода, в котором моя переменная input является заполнителем?

Я уже пытался создать итератор с возможностью подачи, как описано здесь, но это работает только с заполнителем для строк, а мой ввод - int32.

Спасибо за любой совет.


person Alberto    schedule 18.10.2017    source источник


Ответы (1)


Для этой конкретной цели tensorflow предоставляет tf.placeholder_with_default API.

# Create a Dataset
dataset = tf.data.Dataset.zip((input_dataset, label_dataset)).batch(32).repeat(...)

# Create Iterator
input, label = dataset.make_one_shot_iterator()

# Create Placholders
x = tf.placeholder_with_default(input, shape=[...], name='input')
y = tf.placeholder_with_default(label, shape-[...], name='label')

def nn_model(features, labels):
    logits = ...    
    loss = tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits_v2(labels=labels, logits=logits))
    optimizer = tf.train.AdamOptimizer(learning_rate=0.01).minimize(loss)
    return optimizer, loss

# Create Model
train_op, loss_op = nn_model(x, y)

# Training
sess.run(train_op)

# Inference
sess.run(logits, feed_dict={x:..., y:...})
person kingspp    schedule 06.06.2018