Je veux utiliser le feature_column et le feature de tensorflow directement avec une session, en contournant le framework Estimator. Je lis introduction de bas niveau de tensorflow sur la colonne des fonctionnalités . Le problème est que tf.feature_column.input_layer
besoins de l features
au moment de la construction, mais les flux de caractéristiques sont différents entre le moment de la formation et celui de la prédiction. En regardant les tf.Estimator
codes, il semble que le moyen soit d'appeler à nouveau la même fonction de rappel de construction pour obtenir le graphique. J'ai trouvé l'exemple ci-dessous, mais il échoue sur la table non initialisée si je saute l'init de la table après la deuxième construction ; ou il se plaindrait de la table déjà initialisée si je lance l'init de la table. D'après leur mémoire de recherche C'est un choix délibéré puisqu'ils s'attendent toujours à ce qu'un nouveau modèle soit rechargé à partir du point de sauvegarde. Mais cela sera très inefficace dans des situations comme l'apprentissage par renforcement, où nous voulons faire des mises à jour et des inférences en même temps dans une boucle d'apprentissage. Il n'est pas clair non plus comment ils veulent faire la validation de la déviation.
Quelle est la bonne façon de construire un graphique et d'alimenter les caractéristiques pour la prédiction ?
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}))