【TensorFlow】Windows10 64 位下安装 TensorFlow – 官方原生支持

之前写过一篇在ubuntu下安装TensorFlow的教程,那个时候TensorFlow官方还不支持Windows系统,虽然可以通过其他方法安装,但是终究不是原生的,而且安装过程繁琐易错。好消息是,Google官方在11月29号的开发者博客中宣布新的版本(0.12)将增加对Windows的支持,我11月30号知道的,立马就安装试了试,安装过程非常简单,不过也有一些需要手动调整。…

大家好,又见面了,我是你们的朋友全栈君。

之前 写过一篇在 ubuntu 下安装 TensorFlow 的教程,那个时候 TensorFlow 官方还不支持 Windows 系统,虽然可以通过其他方法安装,但是终究不是原生的,而且安装过程繁琐易错。好消息是,Google官方在11月29号的开发者博客中宣布新的版本(0.12)将 增加对Windows的支持,我11月30号知道的,立马就安装试了试,安装过程非常简单,不过也有一些需要手动调整。

这里写图片描述


更新

这里我会列出对本文的更新。

  • 2017 年 3 月 1 日:cuDNN 版本从 5.0 升级到 5.1 版本,更新 cuda 和 cudnn 下载地址。
  • 2017 年 3 月 20 日:标记 安装前准备 中的第五条 确保你安装了 VS2015 或者 2013 或者 2010。 为存疑。这是我之前在 TensorFlow 官网看到的,但是现在去翻了翻找不到了。如果有同学没有安装 VS 就把 TensorFlow 安装成功了的话,请在下方评论区说明下,到时候我会将这个要求标记为删除。谢谢。
  • 2017 年 3 月 26 日:更新 TensorFlow 安装命令。
  • 2017 年 4 月 18 日:
    • 安装前准备 第五条标记为删除,经过我再次试验发现不需要 VS 的支持。
    • 增加问题 Cannot remove entries from nonexistent file 的解决办法。
  • 2017 年 7 月 20 日:增加问题 ImportError: DLL load failed: 找不到指定的模块。ImportError: No module named '_pywrap_tensorflow_internal'ImportError: No module named 'tensorflow.python.pywrap_tensorflow_internal 的时候` 的解决办法。
  • 2017 年 7 月 31日:更新关于 Python 版本的说明,TensorFlow 从 1.2 开始在 Windows 上支持 Python 3.6。感谢评论区 @Vince_Ace 提供的信息。
  • 2017 年 8 月 20 日:TensorFlow 1.3 发布,更新 cuDNN 版本说明。感谢评论区 @myseth1023 提供的信息。
  • 2017 年 8 月 21 日:删除 安装cuDNN 中容易误导人的部分(关于添加环境变量)。
  • 2018 年 3 月 12 日:TensorFlow 1.6 发布,更新相关说明,详细发布说明参考 Release TensorFlow 1.6.0
  • 2018 年 3 月 18 日:增加问题 #4 及其解决办法。
  • 2019 年 4 月 5 日:增加问题 #5 及其解决办法(针对 TensorFlow 1.13)。
  • 2019 年 10 月 14 日:TensorFlow 2.0 正式版 发布,更新相关说明和对应测试代码。详细发布说明参考 Release TensorFlow 2.0关于 TensorFlow 2.0 的新变化,我最近写一篇文章来专门说一说,写好后更新在这里。
  • 2020 年 11 月 10 日:增加 conda 安装方式。

话题终结者

大部分情况下,优先尝试用 conda,尤其是安装 GPU 版。conda 会自动帮你下载对应 cuda 和 cudnn,帮你处理依赖,真正的一键安装。

conda install tensorflow-gpu  # GPU
conda install tensorflow  # CPU

如果 conda 安装出现错误或其他情况(conda 也是有一定几率出错的,而且conda 上一般版本更新较为滞后),考虑用 docker,最后再考虑下面的本地安装方式。


想了解更多 TensorFlow 相关资讯,可扫描下方二维码关注 TensorFlow 官方微信。
tensorflow 官方微信


安装前准备

TensorFlow 有两个版本:CPU 版本和 GPU 版本。GPU 版本需要 CUDAcuDNN 的支持,CPU 版本不需要。如果你要安装 GPU 版本,请先确认你的显卡支持 CUDA。我安装的是 GPU 版本,采用 pip 安装方式,所以就以 GPU 安装为例,CPU 版本只不过不需要安装 CUDA 和 cuDNN。

  1. 这里 确认你的显卡支持 CUDA。
  2. 确保你的 Python 版本是 3.5 64 位及以上。(TensorFlow 从 1.2 开始支持 Python 3.6,之前的官方是不支持的)
  3. 确保你有稳定的网络连接。
  4. 确保你的 pip 版本 >= 8.1。用 pip -V 查看当前 pip 版本,用 python -m pip install -U pip 升级pip
  5. 确保你安装了 VS2015 或者 2013 或者 2010。此条非必须,删除。

此外,建议安装 Anaconda,因为这个集成了很多科学计算所必需的库,能够避免很多依赖问题,安装教程可以参考 这里

以上条件符合,那么恭喜你可以开始下载 CUDA 和 cuDNN 的安装包了,注意版本号会由于 TensorFlow 不同版本有变化,此处请结合下面的安装 CUDA安装 cuDNN 说明)。


安装 TensorFlow

由于 Google 那帮人已经把 TensorFlow 打成了一个 pip 安装包,所以现在可以用正常安装包的方式安装 TensorFlow 了,就是进入命令行执行下面这一条简单的语句:

# GPU版本
pip3 install --upgrade tensorflow-gpu

# CPU版本
pip3 install --upgrade tensorflow

然后就开始安装了,速度视网速而定。

安装网之后你试着在 Python 中import tensorflow会告诉你没有找到 CUDA 和 cuDNN,所以下一步就是安装这两个东西。


安装 CUDA

  • TensorFlow 1.6:CUDA 9.0
  • TensorFlow 1.13.1:CUDA 10.0
  • TensorFlow 2.0:CUDA 10.0

这个也是很简单的,首先根据上面的版本去官网下载对应的安装包(~ 1.4 GB)。下载完那个 exe 文件就是 CUDA 的安装程序,直接双击执行就可以了,就像安装正常的其他软件一样,安装过程屏幕可能会闪烁,不要紧,而且安装时间有点长。

安装完之后系统变量会自动为你添加上,这个不用管。

测试一下是否安装成功,命令行输入 nvcc -V ,看到版本信息就表示安装成功了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K9Ioxbgh-1571047832039)(https://i.imgur.com/Qjk8FSf.png)]


安装 cuDNN

  • TensorFlow 1.6:cuDNN 7.0
  • TensorFlow 1.13.1:cuDNN >= 7.4.1
  • TensorFlow 2.0:cuDNN >= 7.4.1

首先去官网下载对应版本的安装包(~ 173 MB)。其实这个是一个压缩包,解压放到任何一个目录下就行,然后把其中的bin目录路径添加到Path环境变量里。

比如说我下载解压后放到了下图的 cuda 文件夹:

这里写图片描述

Path环境变量:

path

如果你已经安装了 cuDNN 5.0 ,那么升级 cuDNN 的方法可以参考 这里

然后 import tensorflow 应该就成功了。


测试

TF 1.X 版本

用一个简单的矩阵乘法测试一下,

import tensorflow as tf

a = tf.random_normal((100, 100))
b = tf.random_normal((100, 500))
c = tf.matmul(a, b)
sess = tf.InteractiveSession()
sess.run(c)

这里写图片描述
看不清的话可以右键在新标签页打开图片查看大图

TF 2.X

TF2 不再需要 session,像 numpy 一样直接运行即可

import tensorflow as tf

print(f"tensorflow version = { 
     tf.__version__}", end='\n\n')

a = tf.random.normal((100, 100))
b = tf.random.normal((100, 100))
c = tf.linalg.matmul(a, b)
c_numpy = c.numpy()  # 可以使用 .numpy() 变成 numpy array 形式

print(c, end='\n\n')
print(c_numpy)

tf2示例


Issues

#1 Cannot remove entries from nonexistent file

如果在安装 TensorFlow 的时候出现类似 Cannot remove entries from nonexistent file c:\users\li\anaconda3\lib\site-packages\easy-install.pth 的错误,那么可以参考 Cannot remove entries from nonexistent #622osx 10.11 installation issues #135,里面说了好多种解决办法,我在这里介绍一种方法:在 pip3 install --upgrade tensorflow-gpu 之前先执行 pip install --upgrade --ignore-installed setuptools

#2 ImportError: DLL load failed: 找不到指定的模块。ImportError: No module named '_pywrap_tensorflow_internal'

这里写图片描述
右键在新标签页打开图片查看大图

这里写图片描述
右键在新标签页打开图片查看大图

这里写图片描述
右键在新标签页打开图片查看大图

如果在 import tensorflow 的时候这两个问题同时出现,那么很有可能是你的 cuda 和 cudnn 版本有问题,例如你的 cuda 版本是 8.0.60,而正确的是 8.0.44,重新安装正确的版本(文章里提供的)就可以。参考 On Windows, running “import tensorflow” generates No module named “_pywrap_tensorflow” error 。感谢 @qq_27690673 提供的信息。

#3 ImportError: No module named 'tensorflow.python.pywrap_tensorflow_internal'

这里写图片描述
右键在新标签页打开图片查看大图

如果在 import tensorflow 的时候出现此问题,那么你可能是在 tensorflow 的源码目录里进入了 python 解释器。离开该目录重新进入 python 解释器即可。

#4 ImportError: DLL load failed: 动态链接库(DLL)初始化例程失败ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'

以下报错信息参考自 import tensorflow failed, “ImportError: DLL load failed”. Even after install visual studio 2015, Microsoft Visual C++ 2015 Redistributable Update 3. · Issue #17393 · tensorflow/tensorflow

Traceback (most recent call last):
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper
    return importlib.import_module(mname)
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 571, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: 动态链接库(DLL)初始化例程失败。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper
    return importlib.import_module('_pywrap_tensorflow_internal')
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 74, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper
    return importlib.import_module(mname)
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 571, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: 动态链接库(DLL)初始化例程失败。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper
    return importlib.import_module('_pywrap_tensorflow_internal')
  File "C:\Users\sss\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/install_sources#common_installation_problems

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

新版本的 TensorFlow(1.6)会出现此问题,根据 TensorFlow 1.6.0 的发布说明,该版本会使用 AVX 指令,所以可能会在旧 CPU 上不能运行:

Prebuilt binaries will use AVX instructions. This may break TF on older CPUs.

参考 Tensorflow 1.6.0 cpu fails on import on Windows 10 · Issue #17386 · tensorflow/tensorflow 的讨论,有两种解决办法

感谢 @qq_41568117 提供的反馈。

#5 No module named 'numpy.core._multiarray_umath'numpy.core.multiarray failed to importnumpy.core.umath failed to import

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-80XaFcdM-1571047832048)(https://i.imgur.com/jeN5YvA.png)]

这是由于 numpy 版本较低,升级版本即可:

$ pip install -U numpy

END

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127091.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 爬虫系列,(3),达盖尔图片抓取

    爬虫系列,(3),达盖尔图片抓取importreimportrequestsfrombs4importBeautifulSoup#第一步得到代理defproxy():withopen(r’ip_proxies\有效ip.txt’,’r’,encoding=’utf-8′)asf:r=f.readlines()foripinr:…

    2022年6月24日
    30
  • Offline Explorer_手机chrome离线网页

    Offline Explorer_手机chrome离线网页提及离线浏览软件,我想大家都知道“元老级”的TeleportPro吧?一些网友可能还挺怀念的,毕竟它开了离线浏览之先河,为广大网友节省了不少银子,带来了不少便利,功不可没呵!然而时过境迁,“江山代有才人出”,一大批新的离线浏览软件登场了。这里我要向大家介绍的是一个设计全新的离线浏览软件——OfflineExplorer1.1。一、基本信息 OfflineExplorer1.1由MetaP…

    2022年9月8日
    0
  • 关于revision 的cover letter

    关于revision 的cover letterhttp://emuch.net/html/201101/2741196.html 好,coverletter明白了。那SuggestedListofPotentialReferees如何处理呢?大家好,自己有篇elsevier的期刊在修改!不知道在提交修改稿的时候。大家的coverletter如何处理????因为系统要求专门的response

    2022年5月29日
    48
  • 写给那些没有用过oracle存储过程但又准备学习的同志们

    写给那些没有用过oracle存储过程但又准备学习的同志们公司属于外包公司,公司所用的是oracle数据库,所以,避免不了操作oracle数据库,而且动不动就是调用存储过程,但是发现一个问题,对于存储过程的学习还是有相对有限的系统性的学习资料。都是一些零碎的学习资料,东一榔头西一棒槌。所以本人在这里就给大家操作一波存储过程,从基础语法到java程序调用存储过程。这几篇文章只是学习的起步,但又是学习存储过程至关重要的一个环节,相信你看完这篇文章可以说是对存…

    2022年7月17日
    25
  • jvm 吞吐量_jvm oom

    jvm 吞吐量_jvm oom公式吞吐量=运行代码时间/(运行代码时间+垃圾收集时间)示例虚拟机总共运行了100分钟1)运行代码:99分钟2)垃圾收集:1分钟吞吐量=99/100=99%参数-XX:GCRatio 设置吞吐量的大小-XX:MaxGCPauseMillis 控制最大的垃圾收集停顿时间分析互联网交互式项目:需要在停顿时间范围内(100~200ms),保证最大吞吐量(96%~)传统项目:需要在保证最大吞吐量范围内,降低停顿时间吞吐量越大,代表着垃圾收集时间越短,那么用户代码可以充分

    2022年10月8日
    0
  • 程序员不成熟的若干个特征

    程序员不成熟的若干个特征人成熟与不成熟跟年龄没有关系,人成熟不成熟,就是你能不能站在对方的角度去看待事物。就是能不能把我的世界变成你的世界。这个社会有很多的成年人,还没有脱离幼稚的行为。一点小事情就跟别人争来争去。人不成熟的第一个特征——就是立即要回报他不懂得只有春天播种,秋天才会收获。很多人在做任何事情的时候,刚刚付出一点点,马上就要得到回报。(学钢琴,学英语等等,刚开始就觉得难,发现不行,立即就要放弃。)做我们这个项目也是一样,很多人来做这个生意,开始没有什么成绩,就想着要放弃,有的人一个月放弃,有的人三个月放弃,有的

    2022年5月27日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号