FV-FloodNet / custom_objects.py
sharktide's picture
Create custom_objects.py
3e8ebba verified
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
}