tf.cond()条件控制语句执行出错raise TypeError("true_fn must be callable.") TypeError: true_fn must be callable.

在写程序时,用tf.cond函数设置条件控制时出错

raise TypeError("true_fn must be callable.")
TypeError: true_fn must be callable.


捣鼓了一下午加一晚上,最后找到错误地方为tf.cond的标准传入参数为

tf.cond(pred,true_fn = None,false_fn = None,fn1=None,fn2=None)

传入的条件函数参数引起这个错误,但不是函数本身引起的问题,应该传入函数写为:

tf.cond(pred, lambda : train, lambda : inference)

某些参数已弃用。它们将在将来的版本中被删除。有关更新的说明: fn1/fn2 不推荐使用,支持使用 true_fn/false_fn 参数。

true_fn 和 false_fn 都返回输出张量的列表。true_fn 和 false_fn 必须具有相同的非零数和输出类型。

请注意, 条件执行仅适用于在 true_fn 和 false_fn 中定义的操作. 请考虑以下简单程序:

z = tf.multiply( a , b ) 
result = tf.cond( X < Y, lambda:tf.add( X ,Z), lambda: tf.square( Y ))

如果x < y,tf.add 将执行并且 tf.square 操作不执行。因为 z 是需要的至少一个分支的条件,因为 tf.multiply 操作始终无条件地执行。虽然这种行为与 TensorFlow 的数据流模型是一致的,但有时候,有些用户会期待一种较为惰性的语义。

请注意,cond 调用 true_fn 和 false_fn 一次(在调用 cond 的内部,而不是在 Session.run()期间 )。cond 将在 true_fn 和 false_fn 期间创建的图形片段一起使用一些附加的图形节点来确保右分支根据 pred 的值执行。

tf.cond 支持嵌套结构在 tensorflow.python.util.nest 中的实现。true_fn 和 false_fn 必须返回列表,元组和/或命名元组的相同(可能嵌套的)值结构。

单例列表和元组是唯一的例外:当由 true_fn 或者 false_fn 隐式解压缩到单个值时。通过传递 strict=True 禁用此行为。

 

这样就不会报错了,又踩了一个坑!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值