Я расширил nn.Module
для реализации своей сети, функция переадресации которой выглядит следующим образом ...
def forward(self, X, **kwargs):
batch_size, seq_len = X.size()
length = kwargs['length']
embedded = self.embedding(X) # [batch_size, seq_len, embedding_dim]
if self.use_padding:
if length is None:
raise AttributeError("Length must be a tensor when using padding")
embedded = nn.utils.rnn.pack_padded_sequence(embedded, length, batch_first=True)
#print("Size of Embedded packed", embedded[0].size())
hidden, cell = self.init_hidden(batch_size)
if self.rnn_unit == 'rnn':
out, _ = self.rnn(embedded, hidden)
elif self.rnn_unit == 'lstm':
out, (hidden, cell) = self.rnn(embedded, (hidden, cell))
# unpack if padding was used
if self.use_padding:
out, _ = nn.utils.rnn.pad_packed_sequence(out, batch_first = True)
Я инициализировал скорч NeuralNetClassifier
вот так,
net = NeuralNetClassifier(
model,
criterion=nn.CrossEntropyLoss,
optimizer=Adam,
max_epochs=8,
lr=0.01,
batch_size=32
)
Теперь, если я вызову net.fit(X, y, length=X_len)
, он выдаст ошибку
TypeError: __call__() got an unexpected keyword argument 'length'
В соответствии с документацией функция соответствия ожидает словарь fit_params
,
**fit_params : dict
Additional parameters passed to the ``forward`` method of
the module and to the ``self.train_split`` call.
иИсходный код всегда отправляет мои параметры в train_split
, где очевидно, что аргумент моего ключевого слова не будет распознан.
Есть ли способ передать аргументы моей функции forward?