2016-07-17 1 views
7

Я пытаюсь обучить простой бинарный логистический регрессионный классификатор с использованием Tensorflow (версия 0.9.0) очень похож на beginner's tutorial и встречаюсь с вами следующее сообщение об ошибке при установке модели:Ошибка Tensorflow: «Тензор должен быть с того же графика, что и Tensor ...»

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). 

Вот мой код:

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) 

Я чувствую, что я что-то критическое ... может быть что-то, что предполагалось в учебнике, но WASN»отсутствует t явно упоминается?

Кроме того, я получаю следующее предупреждение каждый раз, когда я называю нужным():

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

Вы упомянули, что вы используете 0.9, но учебник связывании от мастера. Возможно ли, что произошли изменения? Вы можете проверить версию учебника 0.9: https://www.tensorflow.org/versions/r0.9/tutorials/wide/index.html –

ответ

5

При выполнении model.fit, то LinearClassifier является creating a separate tf.Graph на основе Ops, содержащихся в вашей eval_input_fun функции. Но во время создания этого графика LinearClassifier не имеет доступа к определениям categorical_cols и y_train, которые вы сохранили по всему миру.

Решение: переместить все Ops определения (и их зависимости) внутри eval_input_fun

+0

К сожалению, ссылка на источник не работает –