Keras签署if语句

时间:2018-05-18 16:05:27

标签: keras

我有一个我定义如下的函数

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_truey_pred是向量。当我尝试运行调用此函数的代码时,我收到以下错误:

  

&#34;不允许使用tf.Tensor作为Python bool&#34;。

我想知道如何检查(y_true[i]-y_pred[i])的符号并避免此错误,我实际上正在使用keras。

非常感谢你的帮助。

1 个答案:

答案 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;   
 }