我使用的張量流模型如iris predict examples中所述。因爲這個我沒有會話對象。現在我想用.eval()
將標籤轉換爲numpy數組。沒有會話就會出現錯誤。Tensorflow eval()無會話或將變量移動到其他會話
Traceback (most recent call last):
File "myfile.py", line 273, in <module>
tf.app.run()
File "/usr/local/lib/python3.4/site-packages/tensorflow/python/platform/app.py", line 30, in run
sys.exit(main(sys.argv))
File "myfile.py", line 270, in main
train_and_eval()
File "myfile.py", line 258, in train_and_eval
label.eval()
File "/usr/local/lib/python3.4/site-packages/tensorflow/python/framework/ops.py", line 559, in eval
return _eval_using_default_session(self, feed_dict, self.graph, session)
File "/usr/local/lib/python3.4/site-packages/tensorflow/python/framework/ops.py", line 3642, in _eval_using_default_session
raise ValueError("Cannot evaluate tensor using `eval()`: No default "
ValueError: Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
有沒有可能訪問/獲取會話模型在後臺使用?或者還有其他的可能性將張量轉換爲一個numpy數組嗎?
如果我創建一個新的會話,那麼似乎tensorflow移動到這個會話,但沒有訪問該變量。將顯示一個蟒蛇print()
,但隨後會運行inifite。我怎樣才能解析一個變量到這個新的會話?
網的另一部分工作得很好 - 它只是這個特別的事情的張量轉換爲numpy的陣列
COLUMNS = ["col1", "col2", "col3", "target"]
LABEL_COLUMN = "target"
CATEGORICAL_COLUMNS = ["col1", "col2", "col3"]
def build_estimator(model_dir):
col1 = tf.contrib.layers.sparse_column_with_hash_bucket(
"col1", hash_bucket_size=10000)
col2........
wide_columns = [col1, col2, col3]
deep_columns = [
tf.contrib.layers.embedding_column(col1, dimension=7),
tf.contrib.layers.embedding_column(col2, dimension=7),
tf.contrib.layers.embedding_column(col3, dimension=7)
]
m = tf.contrib.learn.DNNLinearCombinedClassifier(...)
return m
def input_fn(file_names, batch_size):
...
label = tf.string_to_number(examples_dict[LABEL_COLUMN], out_type=tf.int32)
return feature_cols, label
def train_and_eval():
model_dir = "./model/"
print(model_dir)
m = build_estimator(model_dir)
m.fit(input_fn=lambda: input_fn(train_file_name, batch_size), steps=steps)
results = m.evaluate(input_fn=lambda: input_fn(test_file_name, batch_size),
steps=1)
pred_m = m.predict(input_fn=lambda: input_fn(test_file_name, batch_size))
sess = tf.InteractiveSession()
with sess.as_default():
print("Is a session there?")
_, label = input_fn(test_file_name, batch_size)
label.eval()
print(label)
def main(_):
train_and_eval()
if __name__ == "__main__":
tf.app.run()
新的會話在代碼片段的末尾開始:
sess = tf.InteractiveSession()
with sess.as_default():
print("Is a session there?")
_, label = input_fn(test_file_name, batch_size)
label.eval()
print(label)
感謝您的支持。但是這並不像它被問到的那樣工作。我可以使用新會話(這已經與我的代碼一起工作),但我無法訪問其他會話的變量。我如何將它們傳遞給新會話?或者,我該如何更改我的代碼/虹膜預測示例以使用顯式會話,或者如何才能訪問此代碼的默認會話? – Gersee