【发布时间】:2018-10-26 20:06:09
【问题描述】:
__init__()函数中定义层的方法,稍后在forward中调用层的方法和forward()函数中直接使用层的方法有什么区别?
在编写计算图之前,是否应该在构造函数中定义计算图中的每一层(例如__init__)?
我可以直接在forward() 中定义和使用它们吗?
【问题讨论】:
标签: python neural-network conv-neural-network pytorch
__init__()函数中定义层的方法,稍后在forward中调用层的方法和forward()函数中直接使用层的方法有什么区别?
在编写计算图之前,是否应该在构造函数中定义计算图中的每一层(例如__init__)?
我可以直接在forward() 中定义和使用它们吗?
【问题讨论】:
标签: python neural-network conv-neural-network pytorch
所有包含您想要在训练过程中训练的权重的东西都应该在您的__init__ 方法中定义。
您不需要在__init__ 中定义softmax、ReLU 或sigmoid 之类的激活函数,只需在forward 中调用它们即可。
例如 Dropout 层也不需要在 __init__ 中定义,它们也可以在 forward 中调用。 [但是在您的 __init__ 中定义它们的优点是在评估期间可以更轻松地关闭它们(通过在您的模型上调用 eval())。您可以查看两个版本的示例here。
希望这很清楚。如果您有任何其他问题,请直接询问。
【讨论】:
__init__函数中吗?我注意到 softmax、relu 和 sigmoid 没有任何可训练的参数,所以我得到了这个问题。
__init__ 中使用可训练参数初始化所有内容 - 对于 softmax、relu 或 sigmoid 等激活,情况并非如此。