Wenn ich eine Conv-Ebene erstelle und das Padding versehentlich als Float übergebe, erhalte ich eine verwirrende Fehlermeldung, die das Debuggen erschwert. Außerdem wird der Fehler ausgelöst, wenn ich den Vorwärtspass mache.
self.cnn = nn.Conv1d(in_channels=self.input_size, out_channels=self.num_filters,kernel_size=kw_l,padding=1.0)
self.cnn(inp) # error is thrown in this line
Die Fehlermeldung lautet „RuntimeError: argument 1 must be tuple of int, not tuple“
Zur Verdeutlichung denke ich, dass es hilfreich sein könnte, wenn der RuntimeError so aktualisiert wird, dass er den Typ des falschen Tupels enthält, sodass klar ist, dass der Typ voraussichtlich ein Int ist.
import torch
import torch.nn as nn
from torch.autograd import Variable
input = Variable(torch.randn(1, 1, 10))
output = nn.Conv1d(1, 1, 3, padding=1)(input) # fine
output = nn.Conv1d(1, 1, 3, padding=1.0)(input) # error
Diese Fehlermeldung wird von TupleParser
ausgegeben, an diesem Punkt weiß es nicht, welchen Parameter es analysiert, sondern nur den Index des Parameters (in der Argumentliste).
Da der Tupel-Parser nur zum Parsen von Parametern zu autograd.functions.*
verwendet wird, könnten wir die TupleParser::parse
-Funktionen so erweitern, dass sie auch den Parameternamen aufnehmen, damit er ihn an TupleParser::invalid_type
weitergeben kann einen Fehler werfen, der sinnvoller ist?
Oder könnten wir diese Typprüfungen einfach auf Python-Ebene hinzufügen?
@apaszke @soumith Ich sende gerne eine PR, wenn Sie mir mitteilen, welche Methode Sie bevorzugen / eine Alternative.
Das Hinzufügen von Parameternamen zum Tupel-Parser klingt für mich gut