Linear Layer and Sequential: Building Architectures
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
Linearshould register all weights (and bias, if used) as parameters.Sequentialshould 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