Tensorflow NotImplementedError:无法将符号张量(up_sampling2d_4_目标:0)转换为numpy数组
NotImplementedError:无法转换符号张量 (向上采样2D_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)
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
与tensorflowTensor
一起使用它们是两个不同的东西
问题在于:
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)
你能像上面这样说吗?不知道怎么转换答案里有,那是替换。