Я хочу использовать tensorflow feature_column и функцию непосредственно с сеансом, минуя инфраструктуру Estimator. Я прочитал низкоуровневое введение tensorflow в колонку функций. Проблема в том, что tf.feature_column.input_layer
требуется фид features
при построении, но фиды функций различаются между временем обучения и прогнозирования. Глядя на коды tf.Estimator
, кажется, что нужно снова вызвать ту же функцию обратного вызова построения, чтобы получить график. Я придумал приведенный ниже пример, но он терпит неудачу на неинициализированной таблице, если я пропущу инициализацию таблицы после второй конструкции; или он будет жаловаться на уже инициализированную таблицу, если я запущу таблицу init. Согласно их исследовательская работа, так задумано, поскольку они всегда ожидают перезагрузки новой модели из точки сохранения. Но это будет очень неэффективно для таких ситуаций, как обучение с подкреплением, когда мы хотим делать обновления и выводы одновременно в цикле обучения. Также неясно, как они хотят проводить проверку разработки.
Как правильно построить график и фид-функции для прогнозирования?
training_features = {
'sales' : [[5], [10], [8], [9]],
'department': ['sports', 'sports', 'gardening', 'gardening']}
test_features = {
'sales' : [[10], [20], [16], [18]],
'department': ['sports', 'sports', 'gardening', 'gardening']}
department_column = tf.feature_column.categorical_column_with_vocabulary_list(
'department', ['sports', 'gardening'])
department_column = tf.feature_column.indicator_column(department_column)
columns = [
tf.feature_column.numeric_column('sales'),
department_column
]
# similar to a tf.Estimator's model_fn callback
def mkgraph(features):
with tf.variable_scope('feature_test', reuse=tf.AUTO_REUSE):
inputs = tf.feature_column.input_layer(features, columns)
alpha = tf.placeholder(tf.float32, name='alpha')
output = inputs * alpha
return output, alpha
with tf.Graph().as_default() as g:
output, alpha = mkgraph(training_features)
print('output', output)
print('alpha', alpha)
var_init = tf.global_variables_initializer()
table_init = tf.tables_initializer()
with tf.Session(graph=g) as sess:
sess.run([var_init, table_init])
print(sess.run(output, feed_dict={alpha: 100.0})) # works here
print('testing')
output, alpha = mkgraph(test_features)
print('output', output)
print('alpha', alpha)
table_init = tf.tables_initializer()
# sess.run([table_init]) # with this, it fails on 'table already initialized'
# without table_init run, it fails on 'table not initialized'
print(sess.run(output, feed_dict={alpha: 200.0}))
feature_column
. Вы решили эту проблему? Поможет ли добавление переключателя для переключения между обучением и тестированием? - person Y. Luo   schedule 20.05.2018feature_column
. Добавление переключателя помогло мне, хотя я не уверен, что это лучший способ. Надеюсь, мой ответ ниже поможет вам. - person Y. Luo   schedule 30.05.2018