TensorFlow:TypeError:不允许将tf.Tensor作为Python bool使用 [英] TensorFlow: TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed

查看:1533
本文介绍了TensorFlow:TypeError:不允许将tf.Tensor作为Python bool使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用CNN输出中的描述符来定义三重态损耗,但是当我尝试训练网络时会出现此错误.

I'm trying to define a triplet loss using descriptor from a CNN's output, but this error showed up when I try to train the network.

我对损失函数的定义:

def compute_loss(descriptor, margin):
    diff_pos = descriptor[0:1800:3] - descriptor[1:1800:3]
    diff_neg = descriptor[0:1800:3] - descriptor[2:1800:3]
    Ltriplet = np.maximum(0, 1 - tf.square(diff_neg)/(tf.square(diff_pos) + margin))
    Lpair = tf.square(diff_pos)

    Loss = Ltriplet + Lpair

    return Loss

这里的描述子是CNN的结果,CNN的收入是一组三重集合,严格按此顺序包含了锚,puller和pusher.输入时,我将600个三元组打包在一起,然后将其输入到CNN中.

here descriptor is the outcome of CNN, the income of CNN is a set of triplets containing anchor, puller and pusher exactly in this order. As input I packed 600 triplet together and feed them into the CNN.

然后在训练网络时出现此错误:

Then I got this error when training the network:

2018-03-08 16:40:49.529263: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
Traceback (most recent call last):
  File "/Users/gaoyingqiang/Documents/GitHub/Master-TUM/TDCV/exercise_3/ex3/task2_new.py", line 78, in <module>
    loss = compute_loss(h_fc2, margin)
  File "/Users/gaoyingqiang/Documents/GitHub/Master-TUM/TDCV/exercise_3/ex3/task2_new.py", line 37, in compute_loss
    Ltriplet = np.maximum(0, 1 - tf.square(diff_neg)/(tf.square(diff_pos) + margin))
  File "/Users/gaoyingqiang/.virtualenvs/ex3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 614, in __bool__
    raise TypeError("Using a `tf.Tensor` as a Python `bool` is not allowed. "
TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.

Process finished with exit code 1

哪里出问题了?

推荐答案

您正在混合numpy和tensorflow操作. Tensorflow正常接受numpy数组(它们的值是静态已知的,因此可以转换为常量),反之则不然(张量值仅在运行会话时才知道,除了

You are mixing numpy and tensorflow operations. Tensorflow accepts numpy arrays normally (their value is known statically, hence can be converted to a constant), but not vice versa (tensor value is known only when the session is run, except eager evaluation).

解决方案:将np.maximum更改为tf.maximum.

这篇关于TensorFlow:TypeError:不允许将tf.Tensor作为Python bool使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆