2016-07-17 148 views
7

Sto provando ad addestrare un semplice classificatore di regressione logistica binaria utilizzando Tensorflow (versione 0.9.0) in modo molto simile allo beginner's tutorial e sto incontrando il seguente errore durante il montaggio del modello:Errore tensore: "Il tensore deve provenire dallo stesso grafico del tensore ..."

ValueError: Tensor("centered_bias_weight:0", shape=(1,), dtype=float32_ref) must be from the same graph as Tensor("linear_14/BiasAdd:0", shape=(?, 1), dtype=float32). 

Ecco il mio codice:

import tempfile 
import tensorflow as tf 
import pandas as pd 

# Customized training data parsing 
train_data = read_train_data() 
feature_names = get_feature_names(train_data) 
labels = get_labels(train_data) 

# Construct dataframe from training data features 
x_train = pd.DataFrame(train_data , columns=feature_names) 
x_train["label"] = labels 

y_train = tf.constant(labels) 

# Create SparseColumn for each feature (assume all feature values are integers and either 0 or 1) 
feature_cols = [ tf.contrib.layers.sparse_column_with_integerized_feature(f,2) for f in feature_names ] 

# Create SparseTensor for each feature based on data 
categorical_cols = { f: tf.SparseTensor(indices=[[i,0] for i in range(x_train[f].size)], 
       values=x_train[f].values, 
       shape=[x_train[f].size,1]) for f in feature_names } 

# Initialize logistic regression model 
model_dir = tempfile.mkdtemp() 
model = tf.contrib.learn.LinearClassifier(feature_columns=feature_cols, model_dir=model_dir) 

def eval_input_fun(): 
    return categorical_cols, y_train 

# Fit the model - similarly to the tutorial 
model.fit(input_fn=eval_input_fun, steps=200) 

mi sento come se mi manca qualcosa critica ... forse qualcosa che è stato assunto nel tutorial, ma wasn' t menzionato esplicitamente?

Inoltre, ottengo il seguente avvertimento ogni volta che io chiamo fit():

WARNING:tensorflow:create_partitioned_variables is deprecated. Use tf.get_variable with a partitioner set, or tf.get_partitioned_variable_list, instead. 
+0

si parla che si sta utilizzando 0.9, ma il tutorial si collega a proviene da padrone. È possibile che ci siano stati cambiamenti? Puoi controllare la versione 0.9 del tutorial qui: https://www.tensorflow.org/versions/r0.9/tutorials/wide/index.html –

risposta

5

Quando si esegue model.fit, il LinearClassifier si creating a separate tf.Graph basa sulle Ops contenute nella funzione eval_input_fun. Tuttavia, durante la creazione di questo grafico, LinearClassifier non ha accesso alle definizioni di categorical_cols e y_train salvate a livello globale.

Soluzione: spostare tutte le definizioni Ops (e le loro dipendenze) all'interno eval_input_fun

+0

Sfortunatamente il link alla fonte è rotto –

Problemi correlati