Linear Layer and Sequential: Building Architectures

medium · neural-networks, linear-layer, sequential

Linear and Sequential: Building Network Architectures

Implement Linear, Sequential, and activation modules using the Module base class.

What you are building

1) Linear(Module)

Fully connected layer: y = x W^T + b

class Linear(Module):
    def __init__(self, in_features: int, out_features: int, bias: bool = True):
        # weight: (out_features, in_features)
        # bias: (out_features,) or None
        # Xavier init: k = 1/sqrt(in_features)
        pass

    def forward(self, x: List[Value]) -> List[Value]:
        # x length = in_features
        # return length = out_features
        pass

2) Sequential(Module)

A container that applies modules in order.

class Sequential(Module):
    def __init__(self, *modules: Module):
        # store in module_list
        # register each module (e.g., layer_0, layer_1, ...)
        pass

    def forward(self, x):
        for m in self.module_list:
            x = m(x)
        return x

3) Activation Modules

class Tanh(Module):
    def forward(self, x: List[Value]) -> List[Value]:
        pass

class ReLU(Module):
    def forward(self, x: List[Value]) -> List[Value]:
        pass

class Sigmoid(Module):
    def forward(self, x: List[Value]) -> List[Value]:
        # 1 / (1 + exp(-x))
        pass

Notes

  • Linear should register all weights (and bias, if used) as parameters.
  • Sequential should preserve order and expose parameters recursively.
  • Activation modules have no parameters but must still be Modules.

Example

model = Sequential(
    Linear(2, 4),
    Tanh(),
    Linear(4, 1)
)

x = [Value(1.0), Value(2.0)]
out = model(x)
Run tests to see results
No issues detected