python - 没有 session 的 Tensorflow eval() 或将变量移动到另一个 session

标签 python numpy tensorflow

我正在使用 iris predict examples 中描述的 tensorflow 模型.因此,我没有 session 对象。现在我想使用 .eval() 将标签转换为 numpy 数组。没有 session 就会出错。

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

是否有可能访问/获取模型在后台使用的 session ?或者是否有其他可能将张量转换为 numpy 数组?

如果我创建一个新 session ,那么 tensorflow 似乎会移动到该 session 但无法访问该变量。显示了 python print(),但随后它运行无限。如何将变量解析到这个新 session ?

网络的另一部分运行良好——只是将张量转换为 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()

新 session 从代码片段的末尾开始:

        sess = tf.InteractiveSession()
        with sess.as_default():
            print("Is a session there?")
            _, label = input_fn(test_file_name, batch_size)
            label.eval()
            print(label)

最佳答案

你需要一个 Session 并且你需要在能够访问它们之前初始化你的变量:

with Session() as sess:
    sess.run(tf.global_variables_initializer())
    ...  
    label_numpy = label.eval()

关于python - 没有 session 的 Tensorflow eval() 或将变量移动到另一个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40768313/

相关文章:

reactjs - 使用 Tensorflowjs 对上传的图像进行预测时,React 状态总是落后一步

tensorflow - 如何将 Tensorflow model.json 转换为 model.pb 文件

python - R 或 python 中的 Lemmatizer(am,are,is -> be?)

python - 基于两列的 Pandas 合并删除了大量初始数据集

python - 如何导入可通过 url 访问的 python 模块

python - 将随机浮点列添加到数据框中,但对于相同的数据框条目具有相同的值

Python 接受成对的字符串和整数输入

python - 基本 numpy 乘法的问题

python - 绘制 numpy 数组 : setting axis scale

python - Tensorflow:准备输入数据