Что вы можете сделать, это активировать последний слой с сигмоидом, результат будет между 0 и 1, а затем создать пользовательский слой, чтобы получить желаемый диапазон:
def get_range(input, maxx, minn):
return (minn - maxx) * ((input - K.min(input, axis=1))/ (K.max(input, axis=1)*K.min(input, axis=1))) + maxx
, а затем добавьте это в свою сеть:
out = layers.Lambda(get_range, arguments={'maxx': 30, 'minn': -20})(sigmoid_output)
Выход будет нормализован между «maxx» и «minn».
UPDATE
Если вы хотите обрезать ваши данные без нормализации всех ваших выходов, сделайте это вместо:
def clip(input, maxx, minn):
return K.clip(input, minn, maxx)
out = layers.Lambda(clip, arguments={'maxx': 30, 'minn': -20})(sigmoid_output)