坎坎坷坷的深度学习之路(二)-Hello world(1)

好消息是终于把tf的环境搭好啦,那就按照官网的教程一步一步来吧,先来理解一下tensorflow。

 Tensorflow是一个编程系统,它用图(graph)的方式来表示计算任务,并且在 会话(session)的上下文(context)中执行图,用tensor(张量)来表示数据,通过变量(variable)来维护运算状态,使用feed或fetch来为操作数(arbitrary operation)赋值或者获取数据。图的节点称为op(也就是operation),每个op都可以接受tensor来执行计算。

 先用tf做一个矩阵乘练练手,看看这session到底是啥。在hello world之前先touch world感受一下它的魅力。举个例子就做两个3*3的矩阵互乘吧:

import tensorflor as tf

#这里创建了两个常矩阵mat1和mat2,这里注意一下,tensorflow创建的是tensor(张量)而不是matrix(矩阵),
#所以这里如果创建矩阵,那么就是二阶张量,所以有两层中括号[[1,2,3],[2,3,4],[3,4,5]],我的记忆方法是
#创建几阶张量就有几层中括号
mat1 = tf.constant([[1,2,3],[3,4,5],[5,6,7]])    #这个constant也是tf的一个op
mat2 = tf.constant([[9,8,7],[7,6,5],[5,4,3]])

#这个是tf的矩阵乘法op,将前面的mat1和mat2作为输入,并且返回为cal,但是cal只是代表了矩阵乘法op的输出
cal = tf.matmul(mat1, mat2)

#创建一个会话(session),并且启动默认的图
sess=tf.Session()

#这里调用sess的run()方法是表明要取出cal的结果,然后print出来,这里传递给run的tensor不一定是一个,
#若传入多个tensor,那么也会取出多个tensor
result=sess.run(cal)
print(result)

#关闭会话
sess.close()
输出结果是
[[ 38  32  26]
 [ 80  68  56]
 [122 104  86]]
一个跟matlab一样方便的计算方式,当然tensorflow只是拿来做矩阵乘法啥的就真是大材小用,不如用numpy计算了。

不过看上面的代码,最后还得显式调用close(),麻烦死啦,可以用with代码块自动完成加载和关闭

with tf.Session() as sess:
 result=sess..run(cal)

 print(result)
如果需要指定在哪个设备上使用(如CPU或者GPU),需要明确地告诉tf在哪个设备上执行,可以修改成下面的代码。当然一般情况下tensorflow会自动选择,如果检测到了GPU,那它会尽可能用它找到的第一个GPU来工作。
with tf.Session() as sess:
 with tf.device("/gpu:0")
:

  
  
   ......

这里的设备用字符串进行标识,如"/cpu:0"(机器的cpu),"/gpu:0"(机器的第一个gpu),"/gpu:1"(机器的第二个gpu)等等。


  • 变量

变量是每个编程语言必不可少的组成部分,tensorflow也是,用op操作来维护变量。

import .........
..............
#前面导入包的部分省略

#tf.Variable()返回了一个tf的变量,它包含一些Rewriteconfig,也就是可以重写的属性,例如name
#下面这行返回了一个名为hello,初始值为0的变量
cur = tf.Variable(0, name="hello")

one = tf.Constant(1)
new = tf.add(cur, one)
update = tf.assign(cur, new)    #这是tf的赋值op,是图的一部分,在会话中调用run()之前,它也不会进行真正的赋值
init = tf.initialize_all_variables()

#启动图并运行op进行计算
with tf.Session() as sess:
 sess.run(init)

 print(sess.run(cur))

 for i in range(3):
  sess.run(update)

  print(sess.run(cur))


#得到了输出为
# 0
# 1
# 2
# 3
  
  
  • placeholder

这是用于tensorflow的feed机制,可以对图中任意op的任意tensor进行feed(打补丁或者注入),最常见的feed操作是作为run()的参数,当将某些操作指定为feed操作时,通常会用placeholder作为占位符来做标记

input1 = tf.placeholder(tf.types.float32)
input2 = tf.placeholder(tf.types.float32)
output = tf.mul(input1, input2)

with tf.Session() as sess:
 print(sess.run([output], feed_dict={input1:[7.], input2:[2.]})


#输出为
# [array([ 14. ], dtype=float32)]




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值