TensorFlow学习笔记-1

TensorFlow是Google开发的第二代人工智能系统,于2015年11月宣布开源。故名思义,TensorFlow的要素为张量(Tensor)和流(Flow),他们分别是系统的数据结构和算法框架。TensorFlow的设计想法就是通过让N维向量在数据流图(Data Flow Graph)上的一个节点流到另一个节点的方式来完成计算。

例如,我们现在要计算两个矩阵相乘。在TensorFlow的框架下,第一步的工作是建立数据流图。在这个例子中,我们仅需要三个节点(TensorFlow中节点用op表示,operation的缩写):两个常数ops和一个计算乘法并输出结果的op.两个常数ops将自己的内存地址传到计算op上,计算op接受来自常数ops的输入,最后完成计算。代码如下:

import tensorflow as tf
matrix1 = tf.constant([[1., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2, name="A")

到现在为止,这几行代码只是在创建Data Flow Graph的拓扑结构,并没有做任何实质性的运算。观察一下,matrix1,matrix2,product的类型均为Tensor,product被命名为A,默认初始化为0:

>>> type(matrix1)
>>> tensorflow.python.framework.ops.Tensor
>>> type(product)
>>> tensorflow.python.framework.ops.Tensor
>>> print(product)
>>> Tensor("A:0", shape=(1, 1), dtype=float32)

数据流图建好了,接下来我们可以启动计算。这通过新建一个Session对象来实现:

sess = tf.Session()
result = sess.run(product)
sess.close()

run(op)方法将执行op节点本地以及所有op所需的input的计算,返回类型是numpy.ndarray.最后用close( )方法来回收对象。我们可以看一看执行结果:

>>> print(result)
>>> [[ 8.]]

这也可以通过with语句来实现,以下代码执行完毕后将自动回收sess.其中run( )的参数可以是一个op的list, 返回结果则是numpy.ndarray的list.

with tf.Session() as sess:  
    result = sess.run([product, matrix1, matrix2]) 

在执行一个Session的动作时,无需人为指派,TensorFlow会自动调度单机上的CPU和GPU资源实现并行。当然,我们也可以人为分配计算资源到一个任务:

with tf.Session() as sess:  
    with tf.device("/gpu:1"):    
        matrix1 = tf.constant([[1., 3.]])     
        matrix2 = tf.constant([[2.],[2.]])    
        product = tf.matmul(matrix1, matrix2)

其中参数”/cpu:0”表示计算机的CPU,”/gpu:0”,”/gpu:1”,…表示计算机的第1,2,…个GPU…

每次调用run( )方法都要通过sess对象是很麻烦的,好在TensorFlow为我们提供了InteractiveSession对象。通过生成InteractiveSession对象,我们相当于创建了一个全局的session,此后可以直接对变量调用run( ).示例代码如下:

sess = tf.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])

# Initialize 'x' using the run() method of its initializer op.
x.initializer.run()

# Add an op to subtract 'a' from 'x'.  Run it and print the result
sub = tf.sub(x, a)
print(sub.eval())

输出结果为

>>> [-2. -1.]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值