TensorFlow程序结构(深度剖析)学习笔记

此博客只是学习笔记,不具有任何参考价值

 

TensorFlow 将程序分为两个独立的部分来构建神经网络的蓝图

  • 计算图的定义

                计算图定义神经网络的蓝图,但其中的张量还没有相关的数值,

                为了构建计算图,需要定义所有要执行的常量、变量和运算操作

 

  • 计算图的执行

                使用会话对象来实现计算图的执行。会话对象封装了评估张量和操作对象的环境。

                这里真正实现了运算操作并将信息从网络的一层传递到另外一层。不同张量对象的值

                仅在会话对象中被初始化、访问和保护。在此之前张量对象只被抽象定义,在绘画中才被赋予实际意义。

 

计算图:是包含节点和边的网络。

  • 节点:对象(张量和运算操作)

每个节点可以有零个或多个输入,但只有一个输出。

  • 边:运算操作之间流动的张量
  • 定义数据
    • 张量(tensor)
    • 对象(常量、变量和占位符)
    • 所有计算(运算操作对象)
  • 实例:通过定义并执行计算图实现两个向量相加
import tensorflow as tf

v_1 = tf.constant([2,4,5,6])
v_2 = tf.constant([4,5,2,5])
add = tf.add(v_1,v_2)

with tf.Session() as sess:
    print(sess.run(add))

#sess = tf.Session()
#print(sess.run(add))
#sess.close()
[ 6  9  7 11]

每个会话都需要使用close()关闭,而with格式可以在运行结束时隐式关闭会话

 

  • 实例的深入分析

               计算图的构建:添加变量和操作,并按照逐层神经网络的顺序传递他们(让张量流动)

               TensorFlow 还允许使用 with tf.device() 命令来使用具有不同计算图形对象的特定设备(CPU/GPU)。

               在例子中计算图由三个节点组成,v_1 和v_2 表示这两个向量,Add时要对他们执行的操作,

               接下来为了是这个图生效,首相需要使用tf.Session() 定义一个会话对象 sess 然后使用Session 类中定义的run方法运行它

run(fetches,feed_dict=None,options=None,run_metadata)

               运算结果的值在 fetches 中提取;在示例中,提取的张量为 add。run 方法将导致在每次执行该计算图的时候,都将对与 v_add 相关的张量和操作进行赋                 值。如果抽取的不是 v_add 而是 v_1,那么最后给出的是向量 v_1 的运行结果:

[2 4 5 6]

               此外,一次可以提取一个或多个张量或操作对象,例如,如果结果抽取的是 [v_1...add]

import tensorflow as tf

v_1 = tf.constant([2,4,5,6])
v_2 = tf.constant([4,5,2,5])
add = tf.add(v_1,v_2)

with tf.Session() as sess:
    print(sess.run((add,v_2,v_1)))
(array([ 6,  9,  7, 11]), array([4, 5, 2, 5]), array([2, 4, 5, 6]))
  • 拓展

              养成显式定义所有张量和操作对象的习惯,不仅可使代码更具可读性,还可以帮助你以更清晰的方式可视化计算图。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值