我有一个我定义如下的函数
def NewLoss(y_true,y_pred):
p=0
for i in range(3074):
if (y_pred[i+1]-y_pred[i])<0:
p+=(y_true[i]-y_pred[i])**2
elif (y_pred[i+1]-y_pred[i])>0:
p+=(y_true[i]-y_pred[i])**2+(y_true[i]-y_pred[i])*(y_pred[i+1]-y_pred[i])**2
else:
p+=(y_true[i]-y_pred[i])**2+0.5*(y_true[i]-y_pred[i])*(y_pred[i+1]-y_pred[i])**2
return p
我的y_true
和y_pred
是向量。当我尝试运行调用此函数的代码时,我收到以下错误:
&#34;不允许使用
tf.Tensor
作为Pythonbool
&#34;。
我想知道如何检查(y_true[i]-y_pred[i])
的符号并避免此错误,我实际上正在使用keras。
非常感谢你的帮助。
答案 0 :(得分:0)
true = y_true[:,:3074]
pred = y_pred[:,:3074]
predShifted = y_pred[:,1:3075]
<强>说明:强>
1 - 第一个轴是样本轴,也许您正在尝试使用时间步长轴执行此操作?如果是这样,请使用:
true = y_true[:-1]
pred = y_pred[:-1]
predShifted = y_pred[1:]
2 - 差异恰好等于零是非常罕见的,也许你不需要if语句的最后一部分。
3 - 如果张量的最大长度为3075,则可以简化选择:
#include <iostream>
using namespace std;
int main()
{
const int ci = 10;
int *pi = const_cast<int*> (&ci); /* pointer */
int &ref = const_cast<int&> (ci); /* reference */
ref = 30;
cout << ci << "," << *pi << "," << ref << endl;
return 0;
}