Tensorflowr入门教程.docx
- 文档编号:5444222
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:74
- 大小:2.97MB
Tensorflowr入门教程.docx
《Tensorflowr入门教程.docx》由会员分享,可在线阅读,更多相关《Tensorflowr入门教程.docx(74页珍藏版)》请在冰豆网上搜索。
Tensorflowr入门教程
1新手入门
1.1简介
本章的目的是让你了解和运行TensorFlow!
在开始之前,让我们先看一段使用PythonAPI撰写的TensorFlow示例代码,让你对将要学习的内容有初步的印象.
这段很短的Python程序生成了一些三维数据,然后用一个平面拟合它.
importtensorflowastf
importnumpyasnp
#使用NumPy生成假数据(phonydata),总共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)
#拟合平面
forstepinxrange(0,201):
sess.run(train)
ifstep%20==0:
printstep,sess.run(W),sess.run(b)
#得到最佳拟合结果W:
[[0.1000.200]],b:
[0.300]
为了进一步激发你的学习欲望,我们想让你先看一下TensorFlow是如何解决一个经典的机器学习问题的.在神经网络领域,最为经典的问题莫过于MNIST手写数字分类问题.我们准备了两篇不同的教程,分别面向机器学习领域的初学者和专家.如果你已经使用其它软件训练过许多MNIST模型,请阅读高级教程(红色药丸链接).如果你以前从未听说过MNIST,请阅读初级教程(蓝色药丸链接).如果你的水平介于这两类人之间,我们建议你先快速浏览初级教程,然后再阅读高级教程.
图片由CCBY-SA4.0授权;原作者W.Carter
如果你已经下定决心,准备学习和安装TensorFlow,你可以略过这些文字,直接阅读后面的章节.不用担心,你仍然会看到MNIST--在阐述TensorFlow的特性时,我们还会使用MNIST作为一个样例.
1.2下载与安装
你可以使用我们提供的二进制包,或者使用源代码,安装TensorFlow.
二进制安装
TensorFlowPythonAPI依赖Python2.7版本.
在Linux和Mac下最简单的安装方式,是使用pip安装.
如果在安装过程中遇到错误,请查阅常见问题.为了简化安装步骤,建议使用virtualenv,教程见这里.
Ubuntu/Linux
#仅使用CPU的版本
$pipinstall
#开启GPU支持的版本(安装该版本的前提是已经安装了CUDAsdk)
$pipinstall
MacOSX
在OSX系统上,我们推荐先安装homebrew,然后执行brewinstallpython,以便能够使用homebrew中的Python安装TensorFlow.另外一种推荐的方式是在virtualenv中安装TensorFlow.
#当前版本只支持CPU
$pipinstall
基于Docker的安装
我们也支持通过Docker运行TensorFlow.该方式的优点是不用操心软件依赖问题.
首先,安装Docker.一旦Docker已经启动运行,可以通过命令启动一个容器:
$dockerrun-itb.gcr.io/tensorflow/tensorflow
该命令将启动一个已经安装好TensorFlow及相关依赖的容器.
其它镜像
默认的Docker镜像只包含启动和运行TensorFlow所需依赖库的一个最小集.我们额外提供了下面的容器,该容器同样可以通过上述dockerrun命令安装:
∙b.gcr.io/tensorflow/tensorflow-full:
镜像中的TensorFlow是从源代码完整安装的,包含了编译和运行TensorFlow所需的全部工具.在该镜像上,可以直接使用源代码进行实验,而不需要再安装上述的任何依赖.
基于VirtualEnv的安装
我们推荐使用virtualenv创建一个隔离的容器,来安装TensorFlow.这是可选的,但是这样做能使排查安装问题变得更容易.
首先,安装所有必备工具:
#在Linux上:
$sudoapt-getinstallpython-pippython-devpython-virtualenv
#在Mac上:
$sudoeasy_installpip#如果还没有安装pip
$sudopipinstall--upgradevirtualenv
接下来,建立一个全新的virtualenv环境.为了将环境建在~/tensorflow目录下,执行:
$virtualenv--system-site-packages~/tensorflow
$cd~/tensorflow
然后,激活virtualenv:
$sourcebin/activate#如果使用bash
$sourcebin/activate.csh#如果使用csh
(tensorflow)$#终端提示符应该发生变化
在virtualenv内,安装TensorFlow:
(tensorflow)$pipinstall--upgrade<$url_to_binary.whl>
接下来,使用类似命令运行TensorFlow程序:
(tensorflow)$cdtensorflow/models/image/mnist
(tensorflow)$pythonconvolutional.py
#当使用完TensorFlow
(tensorflow)$deactivate#停用virtualenv
$#你的命令提示符会恢复原样
尝试你的第一个TensorFlow程序
(可选)启用GPU支持
如果你使用pip二进制包安装了开启GPU支持的TensorFlow,你必须确保系统里安装了正确的CUDAsdk和CUDNN版本.请参间CUDA安装教程
你还需要设置LD_LIBRARY_PATH和CUDA_HOME环境变量.可以考虑将下面的命令添加到~/.bash_profile文件中,这样每次登陆后自动生效.注意,下面的命令假定CUDA安装目录为/usr/local/cuda:
exportLD_LIBRARY_PATH="$LD_LIBRARY_PATH:
/usr/local/cuda/lib64"
exportCUDA_HOME=/usr/local/cuda
运行TensorFlow
打开一个python终端:
$python
>>>importtensorflowastf
>>>hello=tf.constant('Hello,TensorFlow!
')
>>>sess=tf.Session()
>>>printsess.run(hello)
Hello,TensorFlow!
>>>a=tf.constant(10)
>>>b=tf.constant(32)
>>>printsess.run(a+b)
42
>>>
从源码安装
克隆TensorFlow仓库
$gitclone--recurse-submodules
--recurse-submodules参数是必须得,用于获取TesorFlow依赖的protobuf库.
Linux安装
安装Bazel
首先依照教程安装Bazel的依赖.然后使用下列命令下载和编译Bazel的源码:
$gitclone
$cdbazel
$gitcheckouttags/0.1.0
$./compile.sh
上面命令中拉取的代码标签为0.1.0,兼容Tensorflow目前版本.bazel的HEAD版本(即最新版本)在这里可能不稳定.
将执行路径output/bazel添加到$PATH环境变量中.
安装其他依赖
$sudoapt-getinstallpython-numpyswigpython-dev
可选:
安装CUDA(在Linux上开启GPU支持)
为了编译并运行能够使用GPU的TensorFlow,需要先安装NVIDIA提供的CudaToolkit7.0和CUDNN6.5V2.
TensorFlow的GPU特性只支持NVidiaComputeCapability>=3.5的显卡.被支持的显卡包括但不限于:
∙NVidiaTitan
∙NVidiaTitanX
∙NVidiaK20
∙NVidiaK40
下载并安装CudaToolkit7.0
下载地址
将工具安装到诸如/usr/local/cuda之类的路径.
下载并安装CUDNNToolkit6.5
下载地址
解压并拷贝CUDNN文件到CudaToolkit7.0安装路径下.假设CudaToolkit7.0安装在/usr/local/cuda,执行以下命令:
tarxvzfcudnn-6.5-linux-x64-v2.tgz
sudocpcudnn-6.5-linux-x64-v2/cudnn.h/usr/local/cuda/include
sudocpcudnn-6.5-linux-x64-v2/libcudnn*/usr/local/cuda/lib64
配置TensorFlow的Cuba选项
从源码树的根路径执行:
$./configure
DoyouwishtobulidTensorFlowwithGPUsupport?
[y/n]y
GPUsupportwillbeenabledforTensorFlow
PleasespecifythelocationwhereCUDA7.0toolkitisinstalled.Referto
README.mdformoredetails.[defaultis:
/usr/local/cuda]:
/usr/local/cuda
PleasespecifythelocationwhereCUDNN6.5V2libraryisinstalled.Referto
README.mdformoredetails.[defaultis:
/usr/local/cuda]:
/usr/local/cuda
SettingupCudainclude
SettingupCudalib64
SettingupCudabin
SettingupCudanvvm
Configurationfinished
这些配置将建立到系统Cuda库的符号链接.每当Cuda库的路径发生变更时,必须重新执行上述步骤,否则无法调用bazel编译命令.
编译目标程序,开启GPU支持
从源码树的根路径执行:
$bazelbuild-copt--config=cuda//tensorflow/cc:
tutorials_example_trainer
$bazel-bin/tensorflow/cc/tutorials_example_trainer--use_gpu
#大量的输出信息.这个例子用GPU迭代计算一个2x2矩阵的主特征值(majoreigenvalue).
#最后几行输出和下面的信息类似.
000009/000005lambda=2.000000x=[0.894427-0.447214]y=[1.788854-0.894427]
000006/000001lambda=2.000000x=[0.894427-0.447214]y=[1.788854-0.894427]
000009/000009lambda=2.000000x=[0.894427-0.447214]y=[1.788854-0.894427]
注意,GPU支持需通过编译选项"--config=cuda"开启.
已知问题
∙尽管可以在同一个源码树下编译开启Cuda支持和禁用Cuda支持的版本,我们还是推荐在在切换这两种不同的编译配置时,使用"bazelclean"清理环境.
∙在执行bazel编译前必须先运行configure,否则编译会失败并提示错误信息.未来,我们可能考虑将configure步骤包含在编译过程中,以简化整个过程,前提是bazel能够提供新的特性支持这样.
MacOSX安装
Mac和Linux需要的软件依赖完全一样,但是安装过程区别很大.以下链接用于帮助你在MacOSX上安装这些依赖:
Bazel
参见本网页的MacOSX安装指南.
SWIG
MacOSX安装教程.
注意:
你需要安装PCRE,而不是PCRE2.
Numpy
参见安装教程.
创建pip包并安装
$bazelbuild-copt//tensorflow/tools/pip_package:
build_pip_package
$bazel-bin/tensorflow/tools/pip_package/build_pip_package/tmp/tensorflow_pkg
#.whl文件的实际名字与你所使用的平台有关
$pipinstall/tmp/tensorflow_pkg/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
训练你的第一个TensorFlow神经网络模型
从源代码树的根路径执行:
$cdtensorflow/models/image/mnist
$pythonconvolutional.py
Succesfullydownloadedtrain-images-idx3-ubyte.gz9912422bytes.
Succesfullydownloadedtrain-labels-idx1-ubyte.gz28881bytes.
Succesfullydownloadedt10k-images-idx3-ubyte.gz1648877bytes.
Succesfullydownloadedt10k-labels-idx1-ubyte.gz4542bytes.
Extractingdata/train-images-idx3-ubyte.gz
Extractingdata/train-labels-idx1-ubyte.gz
Extractingdata/t10k-images-idx3-ubyte.gz
Extractingdata/t10k-labels-idx1-ubyte.gz
Initialized!
Epoch0.00
Minibatchloss:
12.054,learningrate:
0.010000
Minibatcherror:
90.6%
Validationerror:
84.6%
Epoch0.12
Minibatchloss:
3.285,learningrate:
0.010000
Minibatcherror:
6.2%
Validationerror:
7.0%
...
...
常见问题
GPU相关问题
如果在尝试运行一个TensorFlow程序时出现以下错误:
ImportError:
libcudart.so.7.0:
cannotopensharedobjectfile:
Nosuchfileordirectory
请确认你正确安装了GPU支持,参见相关章节.
在Linux上
如果出现错误:
...
"__add__","__radd__",
^
SyntaxError:
invalidsyntax
解决方案:
确认正在使用的Python版本为Python2.7.
在MacOSX上
如果出现错误:
importsix.moves.copyregascopyreg
ImportError:
Nomodulenamedcopyreg
解决方案:
TensorFlow使用的protobuf依赖six-1.10.0.但是,Apple的默认python环境已经安装了six-1.4.1,该版本可能很难升级.这里提供几种方法来解决该问题:
1.升级全系统的six:
2.sudoeasy_install-Usix
3.通过homebrew安装一个隔离的python副本:
4.brewinstallpython
5.在virtualenv内编译或使用TensorFlow.
如果出现错误:
>>>importtensorflowastf
Traceback(mostrecentcalllast):
File"
File"/usr/local/lib/python2.7/site-packages/tensorflow/__init__.py",line4,in
fromtensorflow.pythonimport*
File"/usr/local/lib/python2.7/site-packages/tensorflow/python/__init__.py",line13,in
fromtensorflow.core.framework.graph_pb2import*
...
File"/usr/local/lib/python2.7/site-packages/tensorflow/core/framework/tensor_shape_pb2.py",line22,in
serialized_pb=_b('\n,tensorflow/core/framework/tensor_shape.proto\x12\ntensorflow\"d\n\x10TensorShapeProto\x12-\n\x03\x64im\x18\x02\x03(\x0b\x32.tensorflow.TensorShapeProto.Dim\x1a!
\n\x03\x44im\x12\x0c\n\x04size\x18\x01\x01(\x03\x12\x0c\n\x04name\x18\x02\x01(\tb\x06proto3')
TypeError:
__init__()gotanunexpectedkeywordargument'syntax'
这是由于安装了冲突的protobuf版本引起的,TensorFlow需要的是protobuf3.0.0.当前最好的解决方案是确保没有安装旧版本的protobuf,可以使用以下命令重新安装protobuf来解决冲突:
brewreinstall--develprotobuf
2.2基本使用
使用TensorFlow,你必须明白TensorFlow:
∙使用图(graph)来表示计算任务.
∙在被称之为会话(Session)的上下文(context)中执行图.
∙使用tensor表示数据.
∙通过变量(Variable)维护状态.
∙使用feed和fetch可以为任意的操作(arbitraryoperation)赋值或者从其中获取数据.
综述
TensorFlow是一个编程系统,使用图来表示计算任务.图中的节点被称之为op(operation的缩写).一个op获得0个或多个Tensor,执行计算,产生0个或多个Tensor.每个Tensor是一个类型化的多维数组.例如,你可以将一小组图像集表示为一个四维浮点数数组,这四个维度分别是[batch,height,width,channels].
一个TensorFlow图描述了计算的过程.为了进行计算,图必须在会话里被启动.会话将图的op分发到诸如CPU或GPU之类的设备上,同时提供执行op的方法.这些方法执行后,将产生的tensor返回.在Python语言中,返回的tensor是numpyndarray对象;在C和C++语言中,返回的tensor是tensorflow:
:
Tensor实例.
计算
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Tensorflowr 入门教程