だいぶ前ですが、Chainerのver. 1.1.0から、型のチェック機構が入りました。 この機能は、各Functionが呼ばれた時に、動作条件を満たしているか確認するものです。 Pythonだから型のチェックがなくて大変だと思われがちですが、実際には行列サイズに対する制約の方が多く、典型的な静的型付け言語の型システムだけでこれらを弾くのは難しいです。 最初に設計しているときから、この機能が必須だろうと思っていて、メインで作っていたのでその話を書きます。 例えば以下のnumpyのコードを考えてみましょう。 当然動きません。 >>> x = np.array([1, 2, 3]) >>> y = np.array([1, 2]) >>> z = x * y Traceback (most recent call last): File "<stdin>", line 1, in <modul