小编Dan*_*Dan的帖子

在两个 nn.Modules 或损失函数之间动态应用数学运算

我想在两个损失函数或 nn.Modules 或 python 对象之间动态应用数学运算。在pytorch中生成动态图也可以被视为一个问题。

\n

例如:在下面的例子中,我想添加两个损失函数。

\n
nn.L1Loss() + nn.CosineEmbeddingLoss()\n
Run Code Online (Sandbox Code Playgroud)\n

如果我这样做,它会给我一个错误:

\n
----> 1 nn.L1Loss() + nn.CosineEmbeddingLoss()\nTypeError: unsupported operand type(s) for +: 'L1Loss' and 'CosineEmbeddingLoss'\n
Run Code Online (Sandbox Code Playgroud)\n

我还尝试创建一个具有转发功能和火炬操作的包装器,如下所示,但它也不起作用。在下面的情况下x, 和y可以是任何损失函数,也op可以是任何数学运算,例如加法、减法等。

\n
class Execute_Op(nn.Module):\n    def __init__(self):\n        super().__init__()\n        \n    def forward(self, x, y, op):\n        if op == 'add':\n            return torch.add(x, y)\n        elif op == 'subtract':\n            return torch.subtract(x - y)\n\nexec_op = Execute_Op()\nexec_op(nn.L1Loss(), nn.CosineEmbeddingLoss(), 'add')\n
Run Code Online (Sandbox Code Playgroud)\n

它给出如下错误:

\n
Execute_Op.forward(self, x, y, op)\n      5 def forward(self, x, y, op):\n …
Run Code Online (Sandbox Code Playgroud)

python neural-network pytorch automl

5
推荐指数
1
解决办法
309
查看次数

标签 统计

automl ×1

neural-network ×1

python ×1

pytorch ×1