zoukankan      html  css  js  c++  java
  • TensorFlow在windows10上的安装与使用(一)

    随着近两年tensorflow越来越火,在一台新win10系统上装tensorflow并记录安装过程。华硕最近的 Geforce 940mx的机子。

    TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

    tensorflow用起来就是更加方便,高效;一般情况是这样的,如果你用过其它的框架,比如caffe,那tf的感觉就如同fly一般,上手飞快。

    tf有CPU和GPU两个版本,GPU的安装需要cuda和cudnn,安装过程十分简洁。

    因为都要安装python,pip等包,所以直接安装Anaconda,但是一定要安装3.0版本的,地址如下:https://www.anaconda.com/download/#windows

    本人安装的是python3.6版本Anaconda,直接下载根据提示安装。

    • 安装CPU版本。

    CPU版本安装非常简洁,只需要在cmd输入如下指令即可:

    pip install --upgrade --ignore-installed tensorflow
    • 安装GPU版本。

    同样,在cmd输入如下指令:

    pip install --upgrade --ignore-installed tensorflow-gpu

    GPU版本就安装好了,但是如果你import tensorflow的话,提示错误如下:

    ImportError: Could not find 'cudart64_90.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. Download and install CUDA 9.0 from this URL: https://developer.nvidia.com/cuda-toolkit

    显然,这个时候第二步需要安装cuda9.0,cuda的安装也是十分方便,下载地址:https://developer.nvidia.com/cuda-90-download-archive

    下载的本地安装的exe文件即可。百度云链接: https://pan.baidu.com/s/1vbfYVMHLreMlk4yrJqp11A 密码: ddha

    安装的过程中,cuda需要VS,所以请先安装VS2015或2013等VS之后,再安装Cuda,否则,以后你用VS开发项目的话会找不到cuda,也没有cuda的开发环境,意味着你成功把这两个给隔离了。

    ******插入广告中******

    很无奈,虽然大多数安装tensorflow的同学,都已经安装了VS和cuda,但是为了追求完美,我还是成功演示一遍。

    登陆VS官网,记得要登陆微软账户订阅上,才能下载,本人下载的是免费的2015社区版。有需要的同学,可看百度云链接:链接: https://pan.baidu.com/s/1jJoP6JhdwgXigfKa5FTylw 密码: nse8

    接下来安装就好啦。

    ******广告已结束******

     第三步是安装cudnn,同理登陆英伟达的官网下载cudnn7.0 for cuda9.0。百度云链接如下:

    链接: https://pan.baidu.com/s/1wP5wix8GLKSi2TrCUJzQmQ 密码: gq2f

    接下来就是将下载的cudnn文件夹的bin、include、lib文件夹下的文件copy到cuda9.0对应的文件夹里即可。

    最终,完成了整个tensorflow GPU版本的安装。

    下面就是验证tensorflow安装是否真正好了。以下面的代码为例:

    import tensorflow as tf
    import numpy as np
    
    # 使用 NumPy 生成假数据(phony data), 总共 100 个点.
    x_data = np.float32(np.random.rand(2, 100)) # 随机输入
    y_data = np.dot([0.100, 0.200], x_data) + 0.300
    
    # 构造一个线性模型
    b = tf.Variable(tf.zeros([1]))
    W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
    y = tf.matmul(W, x_data) + b
    
    # 最小化方差
    loss = tf.reduce_mean(tf.square(y - y_data))
    optimizer = tf.train.GradientDescentOptimizer(0.5)
    train = optimizer.minimize(loss)
    
    # 初始化变量
    init = tf.initialize_all_variables()
    
    # 启动图 (graph)
    sess = tf.Session()
    sess.run(init)
    
    # 拟合平面
    for step in xrange(0, 201):
        sess.run(train)
        if step % 20 == 0:
            print step, sess.run(W), sess.run(b)

    运行后报错:

    SyntaxError: invalid syntax

    这是因为python3.0版本对print进行了改进,print变成了函数,因此最后一句应该修改为:

    print (step, sess.run(W), sess.run(b))

    继续运行,又报错:

    C:Users91612Anaconda3libsite-packagesh5py__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
      from ._conv import register_converters as _register_converters
    WARNING:tensorflow:From C:Users91612Anaconda3libsite-packages	ensorflowpythonutil	f_should_use.py:118: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
    Instructions for updating:
    Use `tf.global_variables_initializer` instead.
    2018-04-12 10:34:11.748103: I T:srcgithub	ensorflow	ensorflowcoreplatformcpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
    2018-04-12 10:34:12.473410: I T:srcgithub	ensorflow	ensorflowcorecommon_runtimegpugpu_device.cc:1344] Found device 0 with properties:
    name: GeForce 940MX major: 5 minor: 0 memoryClockRate(GHz): 1.2415
    pciBusID: 0000:01:00.0
    totalMemory: 2.00GiB freeMemory: 1.66GiB
    2018-04-12 10:34:12.473725: I T:srcgithub	ensorflow	ensorflowcorecommon_runtimegpugpu_device.cc:1423] Adding visible gpu devices: 0
    2018-04-12 10:36:24.849943: I T:srcgithub	ensorflow	ensorflowcorecommon_runtimegpugpu_device.cc:911] Device interconnect StreamExecutor with strength 1 edge matrix:
    2018-04-12 10:36:24.850068: I T:srcgithub	ensorflow	ensorflowcorecommon_runtimegpugpu_device.cc:917]      0
    2018-04-12 10:36:24.850685: I T:srcgithub	ensorflow	ensorflowcorecommon_runtimegpugpu_device.cc:930] 0:   N
    2018-04-12 10:36:24.852802: I T:srcgithub	ensorflow	ensorflowcorecommon_runtimegpugpu_device.cc:1041] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1429 MB memory) -> physical GPU (device: 0, name: GeForce 940MX, pci bus id: 0000:01:00.0, compute capability: 5.0)
    Traceback (most recent call last):
      File "example.py", line 27, in <module>
        for step in xrange(0, 201):
    NameError: name 'xrange' is not defined

    主要是两个错误,initialize_all_variables应该修改为最新的global_variables_initializer;然后python3.0将xrange取消了,只有range函数,因此需要把xrange改为range。

    另外,我们还看到一个warning,这主要是因为numpy和h5py之间的版本冲突,主要的解决方法有三个:

    • 对numpy版本进行降级,查看本机安装的numpy版本直接import numpy之后 print (numpy.version.version),本机是1.14.2,降级到稳定的1.13版本;
    #自动安装1.13.0,卸载已安装的1.14.2
    pip install numpy==1.13.0
    • 将tensorflow版本降低到1.5.0以下,直接tf.__version__查看本机安装的是1.7.0,因为1.5.0以下是不存在这个冲突的,这个可在安装的时候指定版本;
    • 不用管这个warning,事实上这个警告没啥影响,可以眼不见心不烦。例如:
    import warnings
    with warnings.catch_warnings():
        warnings.filterwarnings("ignore",category=FutureWarning)

    就这样,完成了tensorflow的完整安装,事实上这很快就可以完成了,于是乎,我们运行上面的栗子,可以看到:

    0 [[-0.11355552  0.47500253]] [ 0.4552581]
    20 [[ 0.03362741  0.25130805]] [ 0.30422428]
    40 [[ 0.08393362  0.21267535]] [ 0.30089444]
    60 [[ 0.09610623  0.20312524]] [ 0.30019006]
    80 [[ 0.09905535  0.20076929]] [ 0.30004054]
    100 [[ 0.09977061  0.2001891 ]] [ 0.30000868]
    120 [[ 0.09994424  0.20004643]] [ 0.30000189]
    140 [[ 0.09998644  0.2000114 ]] [ 0.3000004]
    160 [[ 0.09999672  0.2000028 ]] [ 0.30000007]
    180 [[ 0.09999919  0.20000066]] [ 0.30000004]
    200 [[ 0.09999977  0.20000014]] [ 0.30000004]

    很完美的呈现出了答案。

  • 相关阅读:
    第八章 多线程编程
    Linked List Cycle II
    Swap Nodes in Pairs
    Container With Most Water
    Best Time to Buy and Sell Stock III
    Best Time to Buy and Sell Stock II
    Linked List Cycle
    4Sum
    3Sum
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/cvtoEyes/p/8798154.html
Copyright © 2011-2022 走看看