DenseNet

ConvNet Image Classification

class lucid.models.DenseNet(block_config: tuple[int], growth_rate: int = 32, num_init_features: int = 64, num_classes: int = 1000)

The DenseNet class implements the Dense Convolutional Network (DenseNet), featuring dense connections, bottleneck layers, and transition layers.

This class serves as the base for various DenseNet variants such as DenseNet-121, DenseNet-169, etc.

DenseNet architecture

Class Signature

class lucid.nn.DenseNet(
    block_config: tuple[int],
    growth_rate: int = 32,
    num_init_features: int = 64,
    num_classes: int = 1000,
)

Parameters

  • block_config (tuple[int]): Specifies the number of layers in each dense block.

  • growth_rate (int, optional): Number of output channels added by each dense layer. Default is 32.

  • num_init_features (int, optional): Number of output channels from the initial convolution layer. Default is 64.

  • num_classes (int, optional): Number of output classes for the final fully connected layer. Default is 1000.

Examples

Defining a DenseNet-121 model:

from lucid.models import DenseNet

model = DenseNet(
    block_config=(6, 12, 24, 16),  # DenseNet-121
    growth_rate=32,
    num_init_features=64,
    num_classes=1000
)

input_tensor = lucid.random.randn(1, 3, 224, 224)  # Example input
output = model(input_tensor)
print(output.shape)  # Output shape: (1, 1000)

Using a custom configuration:

model = DenseNet(
    block_config=(4, 8, 16, 12),
    growth_rate=24,
    num_init_features=48,
    num_classes=10
)

Note

DenseNet is a memory-intensive architecture due to dense connections. Consider optimizing for memory usage in large-scale applications.