Вы не можете использовать операторы потока управления Python, такие как операторы if-else, для выполнения условных операций в определении модели. Вместо этого вам нужно использовать методы, определенные в бэкэндах Keras. Поскольку вы используете TensorFlow в качестве бэкэнда, вы можете использовать tf.where()
для достижения этого:
import tensorflow as tf
scaled = Lambda(lambda x: tf.where(x >= 1000, tf.ones_like(x), x/1000.))(input_tensor)
В качестве альтернативы, для поддержки всех бэкэндов, вы можете создать маску для этого:
from keras import backend as K
def rescale(x):
mask = K.cast(x >= 1000., dtype=K.floatx())
return mask + (x/1000.0) * (1-mask)
#...
scaled = Lambda(rescale)(input_tensor)
Обновление: Альтернативный способ поддержки всех бэкэндов заключается в использовании K.switch
метода:
from keras import backend as K
scaled = Lambda(lambda x: K.switch(x >= 1000., K.ones_like(x), x / 1000.))(input_tensor)