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