| | 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 |
| | } |
| |
|