web-dev-qa-db-fra.com

ValueError: fonctionnalité absente du dictionnaire des fonctionnalités

J'essaie d'écrire un modèle simple d'apprentissage en profondeur à l'aide de TensorFlow . J'utilise un jeu de données jouet créé dans Excel uniquement pour que le modèle fonctionne et accepte les données. Mon code est le suivant:

import pandas as pd
import numpy as np
import tensorflow as tf

raw_data = np.genfromtxt('ai/mock-data.csv', delimiter=',', dtype=str)
my_data = np.delete(raw_data, (0), axis=0) #deletes the first row, axis=0 indicates row, axis=1 indicates column
my_data = np.delete(my_data, (0), axis=1) #deletes the first column

policy_state = tf.feature_column.categorical_column_with_vocabulary_list('policy_state', [
    'AL', 'CA', 'MI'
])

modern_classic_ind = tf.feature_column.categorical_column_with_vocabulary_list('modern_classic_ind', [
    '0', '1'
])

h_plus_ind = tf.feature_column.categorical_column_with_vocabulary_list('h_plus_ind', [
    '0', '1'
])

retention_ind = tf.feature_column.categorical_column_with_vocabulary_list('retention_ind', [
    '0', '1'
])

feature_columns = [
    tf.feature_column.indicator_column(policy_state),
    tf.feature_column.indicator_column(modern_classic_ind),
    tf.feature_column.indicator_column(h_plus_ind)
]
classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns,
                                      hidden_units=[10, 20, 10],
                                      n_classes=3,
                                      model_dir="/tmp/ret_model")

train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": np.array(my_data[:, 0:3], dtype=str)},
y=np.array(np.array(my_data[:, 3], dtype=str)),
num_epochs=None,
shuffle=True)

classifier.train(input_fn=train_input_fn, steps=2000)

Malheureusement, j'obtiens l'erreur suivante. J'ai essayé de couper les étiquettes du fichier csv au lieu de les laisser, de nommer différemment les colonnes de caractéristiques et de changer le type du tableau numpy. L'erreur persiste.

ValueError: Feature h_plus_ind is not in features dictionary.

Si je supprime h_plus_ind, il renvoie simplement l'erreur sur une colonne différente.

7
Abigail Fox

Lorsque vous utilisez tf.feature_columns, les données que vous alimentez dans votre input_fn doivent avoir les mêmes clés que les colonnes de fonction créées précédemment. Ainsi, la x de votre train_input_fn devrait être un dictionnaire, avec des clés nommées d'après le feature_columns.

Un exemple factice: 

x = {"policy_state": np.array(['AL','AL','AL','AL','AL']),
     "modern_classic_ind": np.array(['0','0','0','0','0']),
     "h_plus_ind": np.array(['0','0','0','0','0']),}

Sur le côté : 

Cet excellent article des développeurs google blog pourrait être une excellente lecture, car il introduit un nouveau moyen de créer input_fn directement à partir d'un fichier csv avec l'API tf.Dataset. Il offre une meilleure gestion de la mémoire et évite de charger tout le jeu de données en mémoire. 

10
Lescurel

J'ai le même problème mais quand j'ai vérifié les noms de mes colonnes de base de données, il y avait une petite erreur dans le nom de la colonne. Vérifiez les noms de votre colonne.

0
zark masood