分享

Tensorflow系列之(一):Tensorflow的基本操作

 陈永正的图书馆 2017-09-13

Tensorflow是一个Google开发的深度学习的框架,十分的好用。下面我们就来简单介绍一下Tensorflow的基本用法

就我的理解来说,Tensorflow框架的写法和我们之前写的程序不太一样,如果要理解Tensorflow,先要理解它的基本组成部分,tensor

tensor, 张量, 就相当于一个指定维度的数组,就像numpy里面的ndarray,tenseflow的框架定义了一个图,操作就相当于图中的节点,我们的数据tensor就在节点之间运行(在节点之间流动,所以叫tensorflow)。每次我们要进行计算,必须使用一个session,会话,进行计算

一、Tensorflow的环境搭建

这一部分就先略去了,有时间再详细介绍

二、声明变量和常量

就像学习一门编程语言一样,我们学习Tensorflow也要先学习怎么对变量和常量进行运算,我们先看怎么进行变量和常量的声明

a = tf.Variable( 0.1, dtype= tf.float32 )
b = tf.constant( 0.2, dtype=tf.float32 )
  • 1
  • 2

在这里我们分别定义了变量a和常量b,相应的值就是代码中赋的值,现在我们想打印输出一下它们的值,但是我们不能直接打印,在这之前我们先要初始化session变量

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
  • 1
  • 2
  • 3

在初始化之后我们就可以进行我们想进行的操作啦!

a = tf.Variable( 0.1, dtype= tf.float32 )
b = tf.constant( 0.2, dtype=tf.float32 )

sess = tf.Session()
sess.run( tf.initialize_all_variables() )

print sess.run( a )
print sess.run( b )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
a = tf.Variable(0.1, dtype=tf.float32)
b = tf.constant(0.2, dtype=tf.float32)
c = tf.Variable(0.1, dtype=tf.float32)

sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())

tmp = tf.assign(c, b)  # assign

print sess.run(tmp)

tmp_var1 = tf.add(a, b)  # add
tmp_var2 = tf.mul(a, b)  # mul

print sess.run(tmp_var1)
print sess.run(tmp_var2)
print 'eval  ', b.eval()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

对于这里我的理解是这样的,在每次有相关的运算的时候,虽然写了这个运算,但是不会运行,指导我们执行了一个sess.run的操作,才会运行,这个时候就会递归地去找运算中的各个量的值是什么。如果找到了定义那就直接运算就可以了,如果找到了另外一个运算,递归地进行另外一个运算,然后再赋值

而且还有需要注意的一点是,我们在定义的时候使用Interactive Session,这样计算值的时候就可以直接使用tensor.eval(),而且如果这个计算有参数的话,直接使用tensor.eval( feed_dict = {} )就可以了

a = tf.Variable( 0.1, dtype= tf.float32 )
b = tf.constant( 0.2, dtype= tf.float32 )

sess = tf.Session()
sess.run( tf.initialize_all_variables() )

tmp_value = tf.add( a, b )
update_value = tf.assign( a, tmp_value )

for i in range( 5 ):
    print sess.run( update_value )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这段代码当中,每次要计算update_value的时候,都要去递归地计算a和tmp_value的值

这里要特别注意一下,有一个小小的坑(虽然说这个坑很小,但是我在坑里掉了很长时间),就是初始化值的时候,是run initialize,这个不是说我声明了这句话以后所有tensorflow的初始值全都初始化,而是说当我声明完了我所有需要的变量的时候,比如我声明完了神经网络里面所有的权值,这个时候我再来进行run initialize,然后再进行计算

三、占位符

tensorflow有一点比较特别的地方,就是会用到占位符。所谓占位符,placeholder,就是说我在声明网络结构的时候,并不知道输入的数据有多少组,所以就先用占位符,具体的写法是这样的

input = tf.placeholder( tf.float32, [ None, 100 ] )
  • 1

这里面的None就是指,不限定输入的tensor是多少维的

四、提供向量机制

当我们需要像我们设计的神经网络当中输入数据的时候,我们就需要使用tensorflow的feed_dict机制

sess.run( trainstep, feed_dict = input_layer: x_batches )
  • 1

这里x_batches就是我们输入的图片数据的变量名,inputlayer就是我们定义的神经网络的输入层名,通过这种方式来灵活的分离输入的图像和神经网络的结构,不管是训练还是预测都可以使用相同的结构

五、tensorflow当中常用的一些函数

tf.reduce_mean( value )
tf.reduce_sum( value )
  • 1
  • 2

这里的reduce就是python中的reduce一样的意思,求这个向量的和和均值

tf.argmax( value, axis = axis )
  • 1

这个和numpy里面的argmax是一样的,获取最大值的下标,只是在tensorflow里面这个函数的轴是要显式声明的

  • 1
trainstep = tf.train.GradientDescentOptimizer(0.01).minimize( cost )
  • 1

这是tensorflow当中的优化器,以0.01为步长来优化cost,tensorflow当中还自带了很多的优化器,使用起来非常方便,我们之后会尽量做详细的介绍

好啦!!有了这篇讲的知识,我们就可以去尝试着做一个简单的demo啦,在下篇文章当中我们向大家来介绍怎么用tensorflow来写一个简单的CNN来识别手写数字

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多