|
import tensorflow as tf |
|
from tensorflow.keras import layers, models, callbacks |
|
from tensorflow.keras.saving import register_keras_serializable |
|
import numpy as np |
|
|
|
@register_keras_serializable() |
|
def rainfall_proximity_penalty(inputs): |
|
rainfall = inputs[:, 0] |
|
distance = inputs[:, 4] |
|
proximity_score = tf.sigmoid((150 - distance) * 0.04) |
|
rainfall_score = tf.sigmoid((rainfall - 90) * 0.3) |
|
return (rainfall_score * proximity_score)[:, None] |
|
|
|
@register_keras_serializable() |
|
def flood_risk_booster(inputs): |
|
slope = inputs[:, 3] |
|
rainfall = inputs[:, 0] |
|
slope_boost = tf.sigmoid((slope - 2.0) * 1.5) |
|
rain_boost = tf.sigmoid((rainfall - 60) * 0.25) |
|
return (1.0 + 0.25 * slope_boost * rain_boost)[:, None] |
|
|
|
@register_keras_serializable() |
|
def flood_suppression_mask(inputs): |
|
elevation = inputs[:, 2] |
|
rainfall = inputs[:, 0] |
|
flatness = tf.sigmoid((elevation - 9.0) * 0.6) |
|
dryness = tf.sigmoid((20.0 - rainfall) * 0.2) |
|
return (1.0 - 0.3 * flatness * dryness)[:, None] |
|
|
|
CUSTOM_OBJECTS = { |
|
"rainfall_proximity_penalty": rainfall_proximity_penalty, |
|
"flood_risk_booster": flood_risk_booster, |
|
"flood_suppression_mask": flood_suppression_mask |
|
} |
|
|