在 Torch/Lua 中,加载保存的模型和使用 Xavier 权重初始化方法有什么区别?

我在一个人工神经网络项目中使用了 Torch 和 Lua。

有时我会使用 torch.save()torch.load() 命令将训练好的模型保存到文件中并在我的脚本中加载它。

最近,我一直在研究所谓的 Xavier 权重初始化方法[最初由 Xavier Glorot 开发] (http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf) 在 2010 年。

我在 torch-toolbox package 中找到了这种权重初始化方法的实现。 例子中包含以下代码:

-- 设计模型
require('nn')
model = nn.Sequential()
model:add(nn.SpatialConvolutionMM(3,4,5,5))

-- 重置权重
method = 'xavier'
model_new = require('weight-init')(model, method)

我在 Torch 控制台中运行了这个例子,并尝试分析对象的内容,如 modelmodel_new。 我看不到立即的区别,所以我想知道: 使用这个 Xavier weight-init 权重初始化和经典的 torch.load() 命令之间有什么区别?

点赞
用户1951176
用户1951176

引用所提到的文档:

网络模型中的权重和偏置将根据提供的方法进行重置。

因此,weight-init会将网络中的所有权重重置为某个值(如果使用Xavier方法,则为math.sqrt(2 /(fan_in + fan_out)(请参见[此处](https://github.com/e-lab/torch-toolbox/blob/master/Weight-init/weight-init.lua#L19)))。

另一方面,torch.load()会读取从预训练文件中保存的权重(该文件使用torch.save()保存)。 因此,除非您的权重在训练过程中没有改变,否则,如果您执行以下操作:

weight-init()-> train -> torch.save()-> torch.load() 您应该会看到与仅使用weight-init()时不同的结果。

2016-03-16 15:21:10