Deep learning keras中的成对距离自定义损失函数

Deep learning keras中的成对距离自定义损失函数,deep-learning,metrics,loss-function,Deep Learning,Metrics,Loss Function,我试图在keras中运行这个自定义损失函数,我总是遇到下面这个错误。这种成对约束损失 def loss(y_true, y_pred): pw = pairwise_distances(y_true, squared=False) n, d = y_pred.get_shape() # generate constraint data points c1 = y_pred[pw[:, 0], :] c2 = y_pred[pw[:, 1], :]

我试图在keras中运行这个自定义损失函数,我总是遇到下面这个错误。这种成对约束损失

def loss(y_true, y_pred):
    pw = pairwise_distances(y_true, squared=False)
    n, d = y_pred.get_shape()
    # generate constraint data points
    c1 = y_pred[pw[:, 0], :]
    c2 = y_pred[pw[:, 1], :]
    loss = np.zeros(dtype=np.float32, shape=(pw.shape[0], d * 2))
    loss[:, :d]  = np.abs(c1 - c2)
    loss[:, d:] = (c1 + c2) / 2
    return loss

Bellow is the error i get when i try to implement this loss function  


  File "C:\Users\Benji\Anaconda2\envs\ben\lib\site-packages\keras\engine\training.py", line 692, in _prepare_total_loss
    y_true, y_pred, sample_weight=sample_weight)
  File "C:\Users\Benji\Anaconda2\envs\ben\lib\site-packages\keras\losses.py", line 71, in __call__
    losses = self.call(y_true, y_pred)
  File "C:\Users\Benji\Anaconda2\envs\ben\lib\site-packages\keras\losses.py", line 132, in call
    return self.fn(y_true, y_pred, **self._fn_kwargs)
  File "C:/Users/Benji/PycharmProjects/Code/NEWWORK6.py", line 73, in loss
    c1 = y_pred[pw[:, 0], :]
  File "C:\Users\Benji\Anaconda2\envs\ben\lib\site-packages\tensorflow_core\python\ops\array_ops.py", line 766, in _slice_helper
    _check_index(s)
  File "C:\Users\Benji\Anaconda2\envs\ben\lib\site-packages\tensorflow_core\python\ops\array_ops.py", line 655, in _check_index
    raise TypeError(_SLICE_TYPE_ERROR + ", got {!r}".format(idx))
TypeError: Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got <tf.Tensor 'loss/activation_6_loss/loss/strided_slice:0' shape=(?,) dtype=float32>

Process finished with exit code 1


def丢失(y_真,y_pred):
pw=成对距离(y\u真,平方=假)
n、 d=y_pred.get_shape()
#生成约束数据点
c1=y_pred[pw[:,0],:]
c2=y_pred[pw[:,1],:]
损耗=np.0(数据类型=np.float32,形状=(pw.shape[0],d*2))
损失[:,:d]=净资产负债表(c1-c2)
损失[:,d::]=(c1+c2)/2
回波损耗
下面是我在尝试实现此损失函数时遇到的错误
文件“C:\Users\Benji\Anaconda2\envs\ben\lib\site packages\keras\engine\training.py”,第692行,在“准备”和“全损”中
y_true,y_pred,样本重量=样本重量)
文件“C:\Users\Benji\Anaconda2\envs\ben\lib\site packages\keras\loss.py”,第71行,在调用中__
损失=自我调用(y_true,y_pred)
文件“C:\Users\Benji\Anaconda2\envs\ben\lib\site packages\keras\loss.py”,第132行,在调用中
返回self.fn(y_true,y_pred,**self.\u fn\u kwargs)
文件“C:/Users/Benji/PycharmProjects/Code/NEWWORK6.py”,第73行,丢失
c1=y_pred[pw[:,0],:]
文件“C:\Users\Benji\Anaconda2\envs\ben\lib\site packages\tensorflow\u core\python\ops\array\u ops.py”,第766行,在切片帮助程序中
_检查索引
文件“C:\Users\Benji\Anaconda2\envs\ben\lib\site packages\tensorflow\u core\python\ops\array\u ops.py”,第655行,在检查索引中
raise TypeError(_SLICE_TYPE_ERROR+”,得到{!r})。格式(idx))
TypeError:只有整数、切片(`:`)、省略号(`…`)、tf.newaxis(`None`)和标量tf.int32/tf.int64张量是有效的索引,明白了吗
进程已完成,退出代码为1

您好,您可以检查此项,它可能会帮助您。您好,您可以检查此项,它可能会帮助您。