I’m trying to build a multilayer perceptron for sentiment classification. I am using skorch for cross validating and to integrate a pipeline that performs the hashing trick. I want to optimise the number of features in the hashing trick and therefore the input dimension is going to change every time I change that value. I was wondering if there is a way to automatically detect the input size within the model class.
This is my model:
class MLP(nn.Module):
def __init__(self, input_dim=5000, num_hidden = 1, hidden_dim=1, output_dim=4, dropout=0.5):
# Building the network from here
super(MLP, self).__init__()
# Hidden layers
self.linears = nn.ModuleList([nn.Linear(input_dim, hidden_dim) if i==0 else nn.Linear(hidden_dim, hidden_dim) for i in range(3)])
# Output layer
self.ol = nn.Linear(hidden_dim, output_dim)
# Activation functions
self.dropout = nn.Dropout(dropout)
def forward(self, data, **kwargs):
# To float
X = data.float()
# Hidden layers
for i, hl in enumerate(self.linears):
X = self.linears[i](X)
X = F.relu(X)
X = self.dropout(X)
# Output layer
out = self.ol(X)
out = F.softmax(out, dim = -1)
return out
Currently it has the input size as an argument but I want the code to automatically detect it. How can I do that?