依赖关系: 对于任意节点A,如果其输出对于某个后继节点B的计算是必需的,则称节点A为节点B的依赖节点。分为直接依赖和间接依赖,这可以直接字面理解。

如果某个节点A和节点B彼此不需要来自对方的任何信息,则称两者是独立的。

若A是B的依赖节点,那么B需要来自A的输入,若A无法进行计算,B也无法执行计算,只能一直等待A的数据的到来。

因此,若产生了循环依赖,两个节点都会无法执行,因为他们都在等待对方计算的完成。

设置初始值:

(1)由于数据流图中存在无限循环,因此程序无法以优雅的方式终止。

(2)依赖节点的数量变为无穷大,在统计依赖节点数量时,每个节点都不会只被统计一次,每当其输出发生变化时,它就会被再次标记为依赖节点。这使得追踪依赖信息变得不可能。

(3)被传递的值趋向于正无穷或负无穷或0。

数据流图的展开

TensorFlow工作模式

1)定义数据流图

2)运行数据流图(在数据上)

在TensorFlow中,数据流图中的每个节点都被称为一个Operation(简称为Op)。各Op可接收0个或多个Tensor对象作为输入,并输出0个或多个Tensor对象。tf.constant()创建了一个“常量”Op,它接收单个常量值,然后把同样的值输出给与其直接连接的节点。另有一个字符串参数name,用于对节点标识:

a= tf.constant(5, name=”input_a”)

tf.multiplyOp接收两个输入,然后把他们的乘积输出。tf.addOp接收两个输入,然后把他们的和输出。对于这些Op,我们均传入了name参数。无需专门对数据流图的边进行定义。

tf.mul,tf.sub and tf.neg are deprecated in favor of tf.multiply, tf.subtractand tf.negative

为运行数据流图,需要创建一个TensorFlowSession对象:

sess= tf.Session()

Session对象在运行时负责对数据流图进行监督,并且是运行数据流图的主要接口。

sess.run(e)

这让我们可以看到节点e的运行结果。

TensorBoard 对数据流图可视化

writer=tf.summary.FileWriter(‘./my_graph’,sess.graph)

创建了一个TensorFlow的FileWiter对象,第一个参数是一个字符串输出目录,即数据流图的描述在磁盘中的存放路径,运行Python代码的my——graph路径下。第二个输入是Session对象的graph属性,该属性引用了所要追踪的数据流图。FileWiter对象会将对该数据流图的描述输出到“my_graph”路径下。

启动一个使用来自“my_graph”目录下的数据的TensorBoard服务器:

$tensorboard –logdir="my_graph"

完成数据流图的构造,需要将Session对象和FileWriter对象关闭,释放资源:

writer.close()

sess.close()

张量:即n维矩阵的抽象。1D张量相当于向量,2D张量相当于矩阵,更高维数的张量,称“N维张量”。

a= tf.constant([5, 3], name="input_a")

b= tf.reduce_prod(a, name="prob_b")

c= tf.reduce_sum(a, name="sum_c")

d= tf.add(b, c, name="add_d")

给定某个张量作为输入,Op接收其所有分量,分别将它们相乘或相加。

TensorFlow有数量及其庞大的数据类型可供使用,但基本的Python类型缺乏对你希望使用的数据类型的种类进行明确声明的能力,因此借助NumPy数组手工定义Tensor对象。

在NumPy中没有与tf.string精确对应的类型,因此在NumPy中使用字符串不要显式指定dtype属性。

不要用tf.int32去初始化一个NumPy数组。

希望检查张量值是否相同:

tf.equal()和tf.not_equal()

TensorFlowSession

sess.run(fetches,feed_dict)

fetches参数要么是Tensor对象要么是一个Op,Tensor对象输出为一个NumPy数组,Op输出为None。

feed_dict参数

a= tf.add(2, 5)

b= tf.mul(a, 3)

sess= tf.Session()

replace_dict= {a: 15}

sees.run(b, feed_dict=replace_dict)

意味着如果有大规模的数据流图,我们希望用一些虚构的值对某些部分进行测试,TensorFlow不会在不必要的地方浪费时间。

占位节点:为运行时即将到来的某个Tensor对象预留位置

a= tf.placeholder(tf.int32, shape=[2], name="my_input")

dtype参数必须指定,shape参数可选,为None时表示可接收任意形状的Tensor对象。

通过sess.run()中的feed_dict参数传入值:

input_dict= {a: np.array([5, 3], dtype=np.int32)}

a= tf.placeholder(tf.int32, shape=[2], name="my_input")

b= tf.reduce_prod(a, name="prod_b")

c= tf.reduce_sum(a, name="sum_c")

d= tf.add(b, c, name="add_d")

sess= tf.Session()

input_dict= {a: np.array([5, 3], dtype=np.int32)}

sess.run(d,feed_dict=input_dict)

placeholder的值无法计算——传入sess.run()会引发异常。

Variable对象

Variable对象的初值通常是全0或者全1或用随机数填充的张量。

#2*2的零矩阵

zeros= tf.zeros([2, 2])

#长度为6的全1矩阵

ones= tf.ones([6])

#3*3*3的张量,服从0~10的均匀分布

uniform= tf.random_uniform([3, 3, 3], minval=0, maxval=10)

#服从0均值,标准差为2的正态分布

normal= tf.random_normal([3, 3, 3], mean=0.0, stddev=2.0)

#不会返回任何均值超过2倍标准差的值

trunc= tf.truncated_normal([2, 2], mean=5.0, stddev=1.0)

#默认均值为0,标准差为1.0

random_var= tf.Variable(tf.truncated_normal([2, 2]))

Variable是由Session对象管理的,需要对Variable对象初始化,Session对象才会跟踪这个Variable对象的值的变化。

init= tf.global_variables_initializer()

#跟踪一个Variable对象子集

init= tf.variables_initializer([var1], name="init_var1")

Variable.assign()是一个Op,要使其生效必须在一个Session对象中运行

my_var= tf.Variable(1)

my_var_times_two= my_var.assign(my_var * 2)

init= tf.global_variables_initializer()

sess=tf.Session()

sess.run(init)

sess.run(my_var_times_two)

TensorFlow Fundation相关推荐

  1. tensorflow 1.x Saver(保存与加载模型) 预测

    20201231 tensorflow 1.X 模型保存 https://blog.csdn.net/qq_35290785/article/details/89646248 保存模型 saver=t ...

  2. python 虚拟环境 tensorflow GPU

    拿到一个新的容器之后,怎么创建一个独立的GPU训练环境呢?之前弄的时候总是零零散散的,现在把它总结在这里,供自己以及有需要的朋友查阅. conda创建 1.1 下载anaconda wget -c h ...

  3. API pytorch tensorflow

    pytorch与tensorflow API速查表 方法名称 pytroch tensorflow numpy 裁剪 torch.clamp(x, min, max) tf.clip_by_value ...

  4. tensor转换 pytorch tensorflow

    一.tensorflow的numpy与tensor互转 1.数组(numpy)转tensor 利用tf.convert_to_tensor(numpy),将numpy转成tensor >> ...

  5. Tensorflow会话

    Tensorflow中的会话是来执行定义好的运算的.会话拥有并管理Tensorflow程序运行时的所有资源.当计算完成之后需要关闭会话来帮助系统回收资源,否则可能出现资源泄露的问题. Tensorfl ...

  6. tensorflow问题

    20210121 ImportError: No module named 'tensorflow.python' https://stackoverflow.com/questions/414156 ...

  7. tensorflow兼容处理 tensorflow.compat.v1 tf.contrib

    20201130 问题提出: v1版本中tensorflow中contrib模块十分丰富,但是发展不可控,因此在v2版本中将这个模块集成到其他模块中去了.在学习tensorflow经常碰到tf.con ...

  8. ImportError: No module named tensorflow.compat.v1 忽略已经安装的某个包版本 忽略已安装版本...

    ImportError: No module named tensorflow.compat.v1 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声 ...

  9. 请注意更新TensorFlow 2.0的旧代码

    TensorFlow 2.0 将包含许多 API 变更,例如,对参数进行重新排序.重新命名符号和更改参数的默认值.手动执行所有这些变更不仅枯燥乏味,而且容易出错.为简化变更过程并让您尽可能顺畅地过渡到 ...

最新文章

  1. SPOJ 694 Distinct Substrings(后缀数组)
  2. 如何通过IP定位交换机
  3. 基于xp系统搭建android开发环境
  4. Formal Languages and Compilers-LL(1),FIRST and FOLLOW
  5. 1.5 对象类型转换:向上转型和向下转型
  6. 金融贷款逾期的模型构建6——特征选择
  7. snmpd服务无法更改默认端口
  8. discusz 判断当前页是门户还是论坛
  9. java 运算符_详解Java表达式与运算符
  10. 寿光农商行计算机机房,寿光农村商业银行:新系统上线前奏——培训
  11. IP转发的最长前缀匹配
  12. 2020成人高考计算机基础知识题库,成人高考计算机考试全套题库
  13. Oracle函数写法和举例
  14. phpstudy教程之自带ftp server使用方法详解(图文)
  15. 【ASP.NET】第十课——网站的配制与部署
  16. 用C++写一个简单小病毒(零基础奶妈级教学,不可能学完还不懂)
  17. 全国大学生软件测试大赛Web应用测试(六)Jmeter性能测试具体流程
  18. 微信小程序例子——修改小程序的标题
  19. IA32 gnu assembly 32 bit instruction pretend to be 64 bit instruction
  20. 关于QQ使用的一些代码

热门文章

  1. Hadamard积介绍
  2. 详解研发企业内部关注两大核心:专利申请和专利侵权分析
  3. 专业婚礼户外摄影调色效果lr预设
  4. 成为信用卡的主人—信用卡理财系列之二
  5. 量化选股策略到是量子好还基面子
  6. mp3音频剪辑软件怎么使用?
  7. 爬虫scrapy框架 爬取一药网
  8. 腾讯马化腾、商汤科技汤晓鸥等六位大佬深度解读人工智能的过去、现在和未来
  9. 把搜狗输入法改为98版的
  10. 2021年化工自动化控制仪表考试试卷及化工自动化控制仪表考试总结