Tensorflow NotImplementedError:无法将符号张量(up_sampling2d_4_目标:0)转换为numpy数组

Tensorflow NotImplementedError:无法将符号张量(up_sampling2d_4_目标:0)转换为numpy数组,tensorflow,machine-learning,keras,tensorflow2.0,tensor,Tensorflow,Machine Learning,Keras,Tensorflow2.0,Tensor,NotImplementedError:无法转换符号张量 (向上采样2D_4_目标:0)到numpy数组 出现以下错误 import keras.backend as K from keras.optimizers import Adam from keras.losses import binary_crossentropy ## intersection over union def IoU(y_true, y_pred, eps=1e-6): if np.max(y_true)

NotImplementedError:无法转换符号张量 (向上采样2D_4_目标:0)到numpy数组

出现以下错误

import keras.backend as K
from keras.optimizers import Adam
from keras.losses import binary_crossentropy

## intersection over union
def IoU(y_true, y_pred, eps=1e-6):
    if np.max(y_true) == 0.0:
        return IoU(1-y_true, 1-y_pred) ## empty image; calc IoU of zeros
    intersection = K.sum(y_true * y_pred, axis=[1,2,3])
    union = K.sum(y_true, axis=[1,2,3]) + K.sum(y_pred, axis=[1,2,3]) - intersection
    return -K.mean( (intersection + eps) / (union + eps), axis=0)
---------------------------------------------------------------------------NotImplementedError回溯(最近的调用 最后)在 14 15虽然正确: --->16损失历史=拟合() 17如果np.min([mh.history['val_loss']表示损失历史中的mh])<-0.2: 18休息

适当地 1 def fit(): ---->2 seg_model.compile(优化器=Adam(1e-3,detax=1e-6),损耗=IoU,度量=[“二进制精度]) 3. 4步数=最小值(最大步数,列数方向形状[0]//批量大小) 5八月发电=创建八月发电(生成图像发电(列车df))

~/venv/lib/python3.7/site-packages/tensorflow\u core/python/training/tracking/base.py 在方法包装中(self,*args,**kwargs) 455 self._self_setattr_tracking=False#pylint:disable=protected access 456试试: -->457结果=方法(自身、*args、**kwargs) 458最后: 459 self._self_setattr_tracking=上一个值#pylint:disable=受保护访问

~/venv/lib/python3.7/site-packages/tensorflow\u core/python/keras/engine/training.py 编译中(自我、优化器、损失、度量、损失权重、, 样本权重模式,加权度量,目标张量,分布, **kwargs) 371 372#创建模型损失和加权度量子图。 -->373自我。编译加权损失和加权度量() 374 375#培训、测试和预测功能

~/venv/lib/python3.7/site-packages/tensorflow\u core/python/training/tracking/base.py 在方法包装中(self,*args,**kwargs) 455 self._self_setattr_tracking=False#pylint:disable=protected access 456试试: -->457结果=方法(自身、*args、**kwargs) 458最后: 459 self._self_setattr_tracking=上一个值#pylint:disable=受保护访问

~/venv/lib/python3.7/site-packages/tensorflow\u core/python/keras/engine/training.py 在"编制"权重"损失"和"加权"指标(自身,样本"权重)中
1651#损耗#重量2*输出2 fn(…)+ 1652#层损失。 ->1653 self.total_loss=self._prepare_total_loss(掩码)1654 1655 def_prepare_skip_target_掩码(self):

~/venv/lib/python3.7/site-packages/tensorflow\u core/python/keras/engine/training.py 准备中的总损失(自身、面罩)1711 1712如果 hasattr(损失,减少): ->1713每样本损失=损失fn.call(y\u true,y\u pred)1714加权损失=损失效用。计算加权损失( 每件样品1715件损失

~/venv/lib/python3.7/site-packages/tensorflow\u core/python/keras/loss.py 通话中(self,y_true,y_pred) 219 y_pred,y_true=tf_损耗_util.square或expand尺寸( 220 y_pred,y_true) -->221返回self.fn(y_true,y_pred,**self.\u fn\u kwargs) 222 223 def get_配置(自身):

借据中(y_true,y_pred,eps) 5##并集的交点 6定义IoU(y_真,y_pred,eps=1e-6): ---->7如果np.max(y_真)==0.0: 8返回IoU(1-y_true,1-y_pred)##空图像;计算零的IoU 9交点=K.sum(y_真*y_pred,轴=[1,2,3])

在amax中(*args,**kwargs)

~/venv/lib/python3.7/site-packages/numpy/core/fromneric.py in amax(a,轴,出,保持,首字母,其中)2619''2620
返回_wrapreduction(a,np.max,'max',轴,无,out, ->2621 keepdims=keepdims,initial=initial,where=where)2622 2623

~/venv/lib/python3.7/site-packages/numpy/core/fromneric.py in _包装生产(obj、ufunc、方法、轴、数据类型、输出、**kwargs) 88返回减少(轴=轴,输出=输出,**passkwargs) 89 --->90返回ufunc.reduce(对象、轴、数据类型、输出、**密码) 91 92

~/venv/lib/python3.7/site-packages/tensorflow\u core/python/framework/ops.py 在数组中(自身) 734 def阵列(自身): 735 raise NOTEImplementedError(“无法将符号张量({})转换为numpy” -->736“数组。”.format(self.name)) 737 738 def镜头(自身):

NotImplementedError:无法转换符号张量 (向上采样2D_4_目标:0)到numpy


数组。

您不能将
numpy
与tensorflow
Tensor
一起使用它们是两个不同的东西

问题在于:

if np.max(y_true) == 0.0:
    return IoU(1-y_true, 1-y_pred) ## empty image; calc IoU of zeros
您需要使用以下行:

is_zero = K.equal(y_true, 0)
y_true = K.switch(is_zero, 1-y_true, y_true)
y_pred = K.switch(is_zero, 1-y_pred, y_pred)

你能像上面这样说吗?不知道怎么转换答案里有,那是替换。