誤ってConvレイヤーを作成し、パディングをfloatとして渡すと、紛らわしいエラーmsgが表示され、デバッグが困難になります。 また、フォワードパスを実行しているときにエラーがスローされます。
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
によってスローされます。この時点では、解析しているパラメータはわかりませんが、パラメータのインデックス(引数リスト内)のみがわかります。
タプルパーサーはパラメーターをautograd.functions.*
に解析するためにのみ使用されるため、 TupleParser::parse
関数を拡張して、パラメーター名も取り込んで、 TupleParser::invalid_type
に渡すことができます。より意味のあるエラーをスローしますか?
または、Pythonレベルでこれらのタイプチェックを追加することもできますか?
@apaszke @soumithどちらの方法を好むか、または別の方法を教えていただければ、PRをお送りします。
タプルパーサーにパラメーター名を追加するのは私にはいいですね