干货!!!学习笔记-TensorFlow入门秘籍

一、张量和图

TensorFlow 是一种采用数据流图(data flow graphs),用于数值计算的开源软件库。其中 Tensor 代表传递的数据为张量(多维数组),Flow 代表使用计算图进行运算。数据流图用「结点」(nodes)和「边」(edges)组成的有向图来描述数学运算。「结点」一般用来表示施加的数学操作,但也可以表示数据输入的起点和输出的终点,或者是读取/写入持久变量(persistent variable)的终点。边表示结点之间的输入/输出关系。这些数据边可以传送维度可动态调整的多维数据数组,即张量(tensor)

只有list才能直接print.使用计算图的步骤是:

1、graph = tf.Graph()

     with graph.as_default():

           #所要计算的变量设置以及计算

2、with tf.Session(graph=graph) as session:

          #如果上面定义的是变量,那么这里运行图钱就先要进行全局初始化

         # 如果是占位符的话,那么就是用dict进行馈送数据后,在运行

        #最后输出所有的结果

见下图:


 
 
 
 
所有的不同的变量都是存储在计算图中。所以我们在构建完成模型所需要的图之后,需要打开会话(session)来运行整个计算图。在会话中我们可以将所有的计算分配到CPU中。如上图所示,我们在之前定义了常量a和b,这只是定义了一张图,并没有运行这个图,如果此时打印出来的话就是一个tensor属性。对于变量的和运算都是存储在计算图中,而直接使用sess会话那么就会报错。所以这个时候我们需要去创建一个会话才能去管理TensorFlow所有的资源。注意:一般情况下我们在计算结束后,那么我们需要运行sess.close()去关闭这个会话,不然资源会有泄漏。
正确执行变量的方法:定义变量你要是想运行一定要记得初始化,下面是初始化的几种方法

1、


2、


会话开启的方式有两种:

 1、sess=tf.Session(),

      print(sess.run(result(变量或者常量)))

      sess.close

2、with tf.Session() as sess:

             #一系列操作

              print(sess.run(result))

二、变量和常量

TensorFlow 中最基本的单位是常量(Constant)、变量(Variable)和占位符(Placeholder)。常量定义后值和维度不可变,变量定义后值可变而维度不可变。在神经网络中,变量一般可作为储存权重和其他信息的矩阵,而常量可作为储存超参数或其他结构信息的变量。

weights = tf.Variable(tf.truncated_normal([256 * 256, 10])

print(weights.get_shape().as_list())

输出的是变量的张量的维度,而对于list没有这个操作

三、占位符和feed_dict

在前面已经创建了各种形式的常量和变量,但 TensorFlow 同样还支持占位符。占位符并没有初始值,它只会分配必要的内存。在会话中,占位符可以使用 feed_dict 馈送数据。

我们的feed_dict 是一个字典,在字典中需要给出每一个用到的占位符的取值。在训练神经网络时需要每次提供一个批量的训练样本,如果每次迭代选取的数据要通过常量表示,那么 TensorFlow 的计算图会非常大。因为每增加一个常量,TensorFlow 都会在计算图中增加一个结点。所以说拥有几百万次迭代的神经网络会拥有极其庞大的计算图,而占位符却可以解决这一点,它只会拥有占位符这一个结点。

例如:

#  占位符和feed_dict

#由于每次都会重复的输入x,如果我们建立每个值都用常量那么我们的节点会很多,这样会导致
#计算图的运行效率降低
w1=tf.Variable(tf.random_normal([1,2],stddev=1,seed=1))
x=tf.placeholder(tf.float32,shape=(1,2)) 
x1=tf.constant([[0.7,0.9]])
a = w1 + x
b = w1 + x1
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
#行y时将占位符填上,feed_dict为字典,变量名不可变 
y =sess.run(a, feed_dict={x:[[0.7, 0.9]]})
print(y)

sess.close


code:


结果为:


猜你喜欢

转载自blog.csdn.net/weili_/article/details/80784834