当我创建一个 Conv 层并错误地将填充作为浮点数传递时,我得到一个令人困惑的错误消息,这使得调试变得更加困难。 此外,当我进行前向传递时会引发错误。
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
错误消息是“RuntimeError:参数 1 必须是 int 的元组,而不是元组”
为了澄清,我认为如果更新 RuntimeError 以包含不正确的元组的类型可能会有所帮助,因此很明显该类型应为 int。
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
此错误消息由TupleParser
引发,此时它不知道它正在解析哪个参数,而只知道参数的索引(在 args 列表中)。
由于元组解析器仅用于将参数解析为autograd.functions.*
我们可以扩展TupleParser::parse
函数以也接受参数名称,以便它可以将其传递给TupleParser::invalid_type
以抛出一个更有意义的错误?
或者我们可以在 python 级别添加这些类型检查?
@apaszke @soumith如果您让我知道您喜欢哪种方法/替代方法,我很乐意发送 PR。
向元组解析器添加参数名称对我来说听起来不错