Tensorflow:无法创建会话

时间:2017-06-27 07:53:26

标签: python tensorflow

运行代码时出错,错误是:

  

tensorflow.python.framework.errors_impl.InternalError:无法创建会话。

这是我的代码:

# -*- coding: utf-8 -*-
import ...
import ...

checkpoint='/home/vrview/tensorflow/example/char/data/model/'
MODEL_SAVE_PATH = "/home/vrview/tensorflow/example/char/data/model/"

def getAllImages(folder):
    assert os.path.exists(folder)
    assert os.path.isdir(folder)
    imageList = os.listdir(folder)
    imageList = [os.path.join(folder,item) for item in imageList ]
    num=len(imageList)
    return imageList,num

def get_labei():
    img_dir, num = getAllImages(r"/home/vrview/tensorflow/example/char/data/model/file/")
    for i in range(num):
        image = Image.open(img_dir[i])
        image = image.resize([56, 56])
        image = np.array(image)
        image_array = image

        with tf.Graph().as_default():
            image = tf.cast(image_array, tf.float32)
            image_1 = tf.image.per_image_standardization(image)
            image_2 = tf.reshape(image_1, [1, 56, 56, 3])

            logit = color_inference.inference(image_2)
            y = tf.nn.softmax(logit)
            x = tf.placeholder(tf.float32, shape=[56, 56, 3])

            saver = tf.train.Saver()
            with tf.Session() as sess:
              ckpt = tf.train.get_checkpoint_state(MODEL_SAVE_PATH)
              if ckpt and ckpt.model_checkpoint_path:
                   global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]
                   saver.restore(sess, ckpt.model_checkpoint_path)
                   print('Loading success, global_step is %s' % global_step)
                   prediction = sess.run(y)
                   max_index = np.argmax(prediction)
              else:
                   print('No checkpoint file found')

        path='/home/vrview/tensorflow/example/char/data/move_file/'+str(max_index)
        isExists = os.path.exists(path)
        if not isExists :
            os.makedirs(path)
        shutil.copyfile(img_dir[i], path)

def main(argv=None):
    get_labei()

if __name__ == '__main__':
    tf.app.run()

这是我的错误:

Traceback (most recent call last):
  File "/home/vrview/tensorflow/example/char/data/model/color_class_2.py", line 61, in <module>
    tf.app.run()
  File "/home/vrview/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 44, in run
    _sys.exit(main(_sys.argv[:1] + flags_passthrough))
  File "/home/vrview/tensorflow/example/char/data/model/color_class_2.py", line 58, in main
    get_labei()
  File "/home/vrview/tensorflow/example/char/data/model/color_class_2.py", line 40, in get_labei
    with tf.Session() as sess:
  File "/home/vrview/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1187, in __init__
    super(Session, self).__init__(target, graph, config=config)
  File "/home/vrview/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 552, in __init__
    self._session = tf_session.TF_NewDeprecatedSession(opts, status)
  File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
    self.gen.next()
  File "/home/vrview/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/errors_impl.py", line 469, in raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.InternalError: Failed to create session.

7 个答案:

答案 0 :(得分:8)

也许这不能回答原来的问题w.r.t.它的背景,但它可能仍然有助于其他人。当我在另一个终端中运行单独的Tensorflow会话时,我收到了上述错误。关闭那个终端使它对我有用。

答案 1 :(得分:4)

可能没有GPU内存?尝试使用

运行
export CUDA_VISIBLE_DEVICES=''

另请提供有关您正在使用的平台(操作系统,体系结构)的详细信息。还包括您的TensorFlow版本。

你能从python控制台创建一个简单的会话吗?像这样:

import tensorflow as tf
hello = tf.constant('hi,tensorflow')
sess = tf.Session()

答案 2 :(得分:2)

执行

export CUDA_VISIBLE_DEVICES=''

你的张量流可能不会使用GPU。它可能仅使用CPU开始训练模型。

您可以找到更好的解决方案here。这不需要重新启动,您可以在服务器中应用它。

答案 3 :(得分:1)

我遇到了完全相同的问题,这就是我所做的:

  1. Nvidia驱动程序:

    $ nvidia-smi | NVIDIA-SMI 384.130驱动程序版本:384.130

找到驱动程序384.130

  1. 更新的驱动程序

    $ sudo add-apt-repository ppa:graphics-drivers / ppa

    $ sudo apt update

以上日志显示正在安装nvidia 396。

nvidia_396:
 Running module version sanity check.

重新启动计算机并检查nvidia驱动程序:

 $ nvidia-smi
 NVIDIA-SMI 396.54                 Driver Version: 396.54

已检查nvcc:

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:27:32_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17

已检查的Cuda:

$ cat /usr/local/cuda/version.txt
CUDA Version 9.0.176

检查了Conda和Tensroflow

$ conda list | grep tensorflow
tensorflow                1.10.0          gpu_py36hcebf108_0    Anaconda
tensorflow-base           1.10.0          gpu_py36had579c0_0    Anaconda
tensorflow-gpu            1.10.0               hf154084_0    Anaconda

再次测试张量流

>>> import tensorflow as tf
>>> hello = tf.constant('hi,tensorflow')
>>> sess = tf.Session()
>>>

一切正常。问题是nvidia驱动程序与cuda tensorflow不兼容,因此我更新到最新版本并且可以正常工作。

答案 4 :(得分:0)

就我而言,它有助于恢复到tensorflow 1.9.0(如建议here(Anaconda已安装版本1.10.0)。它会自动安装正确的Cuda版本(从我的脑海中将9.0代替9.2)。在Anaconda中,降级很简单:

conda install tensorflow=1.9.0

对我有用。此设置适用于Keras 2.2.2。

答案 5 :(得分:0)

在我刚刚解决的情况下,它是将GPU驱动程序更新为最新版本并安装了cuda工具包。首先,添加了ppa并安装了GPU驱动程序:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-390

添加ppa后,它会显示驱动程序版本的选项,并且390是显示的最新“稳定”版本。

然后安装cuda工具包:

sudo apt install nvidia-cuda-toolkit

然后重新启动:

sudo reboot

它将驱动程序更新为比第一步最初安装的390更新的版本(它是410;这是AWS上的p2.xlarge实例)。

答案 6 :(得分:0)

您是否正在使用GPU?如果是,则可能只是由于先前的进程无法终止而导致GPU内存不足。

这张票可帮助我确定问题所在:https://github.com/tensorflow/tensorflow/issues/9549

要查看您的GPU状态:在终端中,nvidia-smi -l 2每2秒更新一次GPU统计信息

这篇文章向您展示如何消除当前占用GPU全部内存的进程:https://www.quora.com/How-do-I-kill-all-the-computer-processes-shown-in-nvidia-smi