关于tf.cond函数中“正确”与“错误”函数中的普通python语句始终执行的问题
import tensorflow as tf
import numpy as np
x = tf.constant(2)
y = tf.constant(3)
global mask0
mask0 = np.ones(shape=[1, 6, 1], dtype='float32') def f1():
mask0[0, 0, 0] = 0.
print(1)
return tf.multiply(x, 17) def f2():
print(2)
return tf.add(y, 23) test = tf.cond(pred=tf.equal(x, y), true_fn=f1, false_fn=f2) with tf.Session() as sess:
print(sess.run(test))
print(mask0)
执行结果:
1
2
2018-08-01 10:25:46.443812: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
26
[[[0.]
[1.]
[1.]
[1.]
[1.]
[1.]]] 进程已结束,退出代码0
执行以上代码发现,即使判断为假,执行了f2,f1的值未返回,但f1中的语句依然执行了。最后发现,“正确”函数和“错误”函数都会在判断语句中被调用始终按照先“正确”函数,后“错误”函数的顺序执行一遍(经过将两个函数定义位置调换,测试确实如此,始终先打印“正确”函数中的字符),其中的非张量数据流不受流程控制,tensorflow的流程控制只对tensor张量有效。最后由于本人需要完成的功能,采取了在两个函数中只写张量运算的代码:
import tensorflow as tf
x = tf.constant(2)
y = tf.constant(3) mask0 = tf.ones(shape=[1, 5, 1], dtype='float32') def f2():
var0 = tf.one_hot(indices=[3], depth=5, axis=0)
print(2)
return var0 def f1():
var0 = tf.one_hot(indices=[1], depth=4, axis=0)
print(1)
return var0 for h1 in range(1):
var0 = tf.cond(pred=tf.equal(x, y), true_fn=f1, false_fn=f2)
mask0 = mask0 - var0 with tf.Session() as sess:
print(sess.run(mask0))
运行结果:
1
2
2018-08-01 10:44:25.417305: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
[[[1.]
[1.]
[1.]
[0.]
[1.]]] 进程已结束,退出代码0
注意这里tf.cond的两个函数返回数据维度不同也没有报错,经测试,当数据类型不同时会报错。普通python语句和之前一样按先“正确”后“错误”执行,tensorflow的数据流得到控制,只执行了“错误”语句。
关于tf.cond函数中“正确”与“错误”函数中的普通python语句始终执行的问题的更多相关文章
- JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚)
在与数据库操作时,如果执行多条更新的SQL语句(如:update或insert语句),在执行第一条后如果出现异常或电脑断电, 则后面的SQL语句执行不了,这时候设定我们自己提交SQL语句,不让JDBC ...
- Entity Framework中编辑时错误ObjectStateManager 中已存在具有同一键的对象
ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈 ...
- Xpath在选择器中正确,在代码中返回的是空列表问题
一.问题: 在进行爬虫的时候我们会用到xpath解析html文件,但是会有一种情况就是在xpath选择器中可以使用,但是在代码中就无法使用的情况. 二.原因: 1.是元素中有tbody的原因,这个元素 ...
- ASP.NET Core中显示自定义错误页面-增强版
之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取. 在这篇博文中改用middleware实现,并且放在独 ...
- python语句与函数
赋值语句 : 分支语句 : 函数 :根据输入参数产生不同输出功能 程序的输入与输出 input() 从控制台获得用户输入的函数 使用格式 print()函数 以字符形式向控制台输出结果的函数 字符类型 ...
- 深度学习原理与框架-图像补全(原理与代码) 1.tf.nn.moments(求平均值和标准差) 2.tf.control_dependencies(先执行内部操作) 3.tf.cond(判别执行前或后函数) 4.tf.nn.atrous_conv2d 5.tf.nn.conv2d_transpose(反卷积) 7.tf.train.get_checkpoint_state(判断sess是否存在
1. tf.nn.moments(x, axes=[0, 1, 2]) # 对前三个维度求平均值和标准差,结果为最后一个维度,即对每个feature_map求平均值和标准差 参数说明:x为输入的fe ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- 重点:怎样正确的使用QThread类(很多详细例子的对比,注意:QThread 中所有实现的函数是被创建它的线程来调用的,不是在线程中)good
背景描述: 以前,继承 QThread 重新实现 run() 函数是使用 QThread唯一推荐的使用方法.这是相当直观和易于使用的.但是在工作线程中使用槽机制和Qt事件循环时,一些用户使用错了.Qt ...
- 阿里云Windows远程连接出现身份验证错误,要求的函数不正确”的报错。
最近很多阿里云用户在远程Windows Server的云服务器ECS时出现“身份验证错误,要求的函数不受支持”的报错. 这个问题解决起来非常简单,修改组策略中的一个配置就可以了. 在运行中输入gped ...
随机推荐
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- 洛谷 P1131 [ZJOI2007]时态同步 树形DP
题目描述 分析 我们从根节点开始搜索,搜索到叶子节点,回溯的时候进行维护 先维护节点的所有子节点到该节点最大边权(边权为叶子节点到同时到达它所需要时间) 然后维护答案,答案为最大边权减去所有到子节点的 ...
- day64 django模型层
目录 一.单表操作(增删改) 二.必知必会13个方法 三.查看内部的sql语句的方法 四.神奇的双下划线查询 五.一对多外键的增删改查 六.多对多外键的增删改查 七.正反向查询概念 八.多表查询 1 ...
- 通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序
最近两天在Linux中调试.NET Core应用程序,同时我发现在Linux中调试.NET Core应用程序并不容易.一直习惯在Visual Studio中进行编码和调试.现在我想的是可以简单快速的测 ...
- python 并发专题(六):协程相关函数以及实现(gevent)
文档资源 http://sdiehl.github.io/gevent-tutorial/ 一.协程实现 线程和协程 既然我们上面也说了,协程也被称为微线程,下面对比一下协程和线程: 线程之间需要上下 ...
- java 基本语法(四) 流程控制(一) 分支结构
if(条件表达式){ 执行表达式} 结构二:二选一if(条件表达式){ 执行表达式1}else{ 执行表达式2} 结构三:n选一if(条件表达式){ 执行表达式1}else if(条件表达式){ 执行 ...
- linux专题(八):用户组管理
http://dwz.date/UDf 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个 ...
- Django之ORM查询操作详解
浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Python脚本中调用Django环境 其他操 ...
- less基础
less less的含义: less是一种动态样式语言,属于css预处理器的范畴,它扩展了css语言,增加了变量.Mixin.函数等特性,使css更易维护和扩展. 此外,less既可以在客户端上运行, ...
- Ethical Hacking - Web Penetration Testing(1)
How to hack a website? An application installed on a computer. ->web application pen-testing A co ...