import tensorflow as tf
from tensorflow.keras import layers, models
# Define a simple FCN model with dropout and batch normalization
class FCNSegmenter(tf.keras.Model):
def __init__(self):
super().__init__()
self.conv1 = layers.Conv2D(32, 3, padding='same', activation='relu')
self.bn1 = layers.BatchNormalization()
self.conv2 = layers.Conv2D(64, 3, padding='same', activation='relu')
self.bn2 = layers.BatchNormalization()
self.dropout = layers.Dropout(0.3)
self.conv3 = layers.Conv2D(1, 1, activation='sigmoid') # Output segmentation mask
def call(self, x, training=False):
x = self.conv1(x)
x = self.bn1(x, training=training)
x = self.conv2(x)
x = self.bn2(x, training=training)
x = self.dropout(x, training=training)
x = self.conv3(x)
return x
# Assume X_train, y_train, X_val, y_val are preloaded image and mask datasets
model = FCNSegmenter()
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0005),
loss='binary_crossentropy',
metrics=['accuracy'])
early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
history = model.fit(X_train, y_train, epochs=50, batch_size=16, validation_data=(X_val, y_val), callbacks=[early_stop])