gpt4 book ai didi

python - 在 Keras 中 reshape 自定义损失函数中的张量

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:50 26 4
gpt4 key购买 nike

我在 reshape 张量时得到 None 类型。当使用损失函数和优化器编译模型时(开始训练之前),就会发生这种情况。我该怎么办?

错误:

TypeError: Failed to convert object of type <class 'tuple'> to Tensor. Contents: (None, -1). Consider casting elements to a supported type.  

自定义损失函数:

def custom_loss(y_true, y_pred):

y_pred = K.reshape(y_pred, (K.get_variable_shape(y_pred)[0], -1))
y_true = K.reshape(y_true, (K.get_variable_shape(y_true)[0], -1))
y_pred = K.std(y_pred, axis=0)
y_true = K.std(y_true, axis=0)
loss = (1/2) * (y_pred - y_true) ** 2
loss = K.mean(loss)

return loss

最佳答案

发生这种情况是因为您的 y_truey_pred 张量形状未正确定义。 None 在这里表示张量形状没有严格设置,但它可以根据我们看不到的先前操作而变化。或者你只是像这样初始化你的张量。

如何解决:

  • 首先,您应该研究 y_truey_pred 如何获得其形状并避免获得 None 形状,这样张量将具有确定的行数和列数<

例子:

您的损失函数适用于适当的输入:

import tensorflow as tf
from keras import backend as K


def custom_loss(y_true, y_pred):
y_pred = K.reshape(y_pred, (K.get_variable_shape(y_pred)[0], -1))
y_true = K.reshape(y_true, (K.get_variable_shape(y_true)[0], -1))
y_pred = K.std(y_pred, axis=0)
y_true = K.std(y_true, axis=0)
loss = (1 / 2) * (y_pred - y_true) ** 2

return loss


a = tf.constant([[1.0, 2., 3.]])
b = tf.constant([[1., 2., 3.]])
loss = custom_loss(a, b)
loss = tf.Print(loss, [loss], "loss")

with tf.Session() as sess:
_ = sess.run([loss])

但是当使用我没有定义形状的占位符时,会抛出同样的异常

a = tf.placeholder(tf.float32, (None, 32))

关于python - 在 Keras 中 reshape 自定义损失函数中的张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53203218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com