Глядя на документацию по переключателю , мы видим, что эта ошибка ValueError возникает, когда ранг условия больше, чем ранг выражений. Насколько я знаю, switch работает, проверяя значение условия в каждом измерении, а затем применяет соответствующий вывод.
В вашем случае для cond задан тензор с тем же размером, что и для y, тогда как loss_low и loss_high - это оба значения max, что означает, что они имеют размерность 1, если у вас значение ay с размером больше 1, вы вызовете эту ошибку.
Я не могу точно сказать из вашего кода, что именно вы пытаюсь сделать, но позвольте мне предложить следующий фрагмент кода на основе вашего кода.
from keras import backend as K
#q_low and q_high are parameters
def quantile_loss(q_low,q_high, y_p, y):
e = y_p-y
loss_low = K.repeat(K.mean(K.maximum(q_low*e, (q_low-1)*e)), y.shape[0])
loss_high = K.repeat(K.mean(K.maximum(q_high*e, (q_high-1)*e)), y.shape[0])
margin = 45 #constant number
margin_f = K.cast(margin,'float32')
cond = K.greater_equal(margin_f,y)
loss = K.switch(cond,loss_low,loss_high)
return loss
У меня нет доступа к остальной части вашего кода, поэтому я не могу сказать вам, если это будет работать, но вы можете играть с ним, должно быть что-то вроде этого.