我已经构建了一个自定义损失函数来训练我的模型
def JSD_Tensor_loss(P,Q):
P=tf.make_ndarray(P)
Q=tf.make_ndarray(Q)
M=np.divide((np.sum(P,Q)),2)
D1=np.multiply(P,(np.log(P,M)))
D2=np.multiply(Q,(np.log(Q,M)))
JSD=np.divide((np.sum(D1,D2)),2)
JSD=np.sum(JSD)
return JSD
model.compile(optimizer='adam', loss=JSD_Tensor_loss, metrics=['accuracy'])
model.fit(x_train, x_test, epochs=EPOCHS)
虽然我已经将张量参数转换为numpy,但我有以下错误,无法解决它AttributeError: 'Tensor'对象没有'tensor_shape'属性
您的错误源于您对numpy的转换。数组(前两行).
如果你必须转换一个张量(在我看来你不应该在这种情况下),我会用:
P, Q = P.numpy(), Q.numpy()
然而,这在这里真的没有必要。只需将numpy函数替换为相应的tf。数学函数(docs)和你应该很好:
def JSD_Tensor_loss(P,Q):
M=tf.math.divide((tf.math.add(P,Q)),2)
D1=tf.math.multiply(P,(tf.math.log(P)))
D2=tf.math.multiply(Q,(tf.math.log(Q)))
JSD=tf.math.divide((tf.add(D1,D2)),2)
JSD=tf.math.reduce_sum(JSD)
return JSD
我不明白你对np.log的调用。你可能使用了一个过时版本的函数(docs))