U-NetでMultiple Outputの実装

ChatGPTの実装
Tensorflow/Kerasを用いている

from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, Concatenate
from tensorflow.keras.models import Model

def unet_multi_output(input_shape, num_classes):
    inputs = Input(input_shape)
    
    # Contracting path
    c1 = Conv2D(64, (3, 3), activation='relu', padding='same')(inputs)
    p1 = MaxPooling2D((2, 2))(c1)
    
    c2 = Conv2D(128, (3, 3), activation='relu', padding='same')(p1)
    p2 = MaxPooling2D((2, 2))(c2)

    # Bottom layer
    c3 = Conv2D(256, (3, 3), activation='relu', padding='same')(p2)

    # Expansive path
    u1 = UpSampling2D((2, 2))(c3)
    c4 = Conv2D(128, (3, 3), activation='relu', padding='same')(u1)
    m1 = Concatenate()([c2, c4])

    u2 = UpSampling2D((2, 2))(m1)
    c5 = Conv2D(64, (3, 3), activation='relu', padding='same')(u2)
    m2 = Concatenate()([c1, c5])

    # Multi-output, for this example, num_classes=3
    outputs = Conv2D(num_classes, (1, 1), activation='sigmoid')(m2)

    model = Model(inputs, outputs)
    return model

# Example usage
model = unet_multi_output((128, 128, 3), 3) # 128x128 images with 3 channels, 3 output masks
model.compile(optimizer='adam', loss='binary_crossentropy') # Use binary_crossentropy for multi-label tasks