我一直在与Torch和Lua合作开展人工神经网络项目。
我有时会使用命令torch.save()
和torch.load()
将经过训练的模型保存到文件中并将其加载到我的脚本中。
最近,我在2010年一直在研究所谓的Xavier权重初始化方法originally developed by Xavier Glorot。
我在torch-toolbox package中找到了这种权重初始化方法的实现。该示例包含以下代码:
-- design model
require('nn')
model = nn.Sequential()
model:add(nn.SpatialConvolutionMM(3,4,5,5))
-- reset weights
method = 'xavier'
model_new = require('weight-init')(model, method)
我在Torch控制台中运行了这个示例,并尝试分析对象的内容,例如model和model_new。我看不出立刻的区别,所以我想知道:使用此Xavier weight-init
模型权重初始化和经典的torch.load()命令有什么区别?
答案 0 :(得分:1)
引用上述文档:
The weights and biases in the network model will be reset based on the method provided.
因此,weight-init
将网络中的所有权重重置到某个值(如果Xavier方法为math.sqrt(2/(fan_in + fan_out)
(请参阅here))。< / p>
另一方面,torch.load()
读取从预先训练的文件(使用torch.save()
保存)中保存的权重。因此,除非你的权重在训练期间根本没有变化,否则如果你这样做:
weight-init() -> train -> torch.save() -> torch.load()
你应该看到其他结果而不仅仅是weight-init()。