最近看到好多论文的神经网络都是用lua基于torch实现的,于是迫不得已学学lua和torch以及nn模块,才能看懂人家的代码。
首先看教程和文档:
- Learn Lua in 15minites!
- Torch 7,Hello world,neural networks!
- nn标准库的手册
-
在上面的教程里没有的,但是在别人的代码里常用的函数,在下面po出来
nn模块
简单操作
nn.Narrow()
这是nn标准库中的提取矩阵中对应子块的函数,官方定义如下:
module = nn.Narrow(dimension, offset, length)
用法如下:
> x = torch.rand(4, 5)
> x
0.3695 0.2017 0.4485 0.4638 0.0513
0.9222 0.1877 0.3388 0.6265 0.5659
0.8785 0.7394 0.8265 0.9212 0.0129
0.2290 0.7971 0.2113 0.1097 0.3166
[torch.DoubleTensor of size 4x5]
> nn.Narrow(1, 2, 3):forward(x)
0.9222 0.1877 0.3388 0.6265 0.5659
0.8785 0.7394 0.8265 0.9212 0.0129
0.2290 0.7971 0.2113 0.1097 0.3166
[torch.DoubleTensor of size 3x5]
> nn.Narrow(1, 2, -1):forward(x)
0.9222 0.1877 0.3388 0.6265 0.5659
0.8785 0.7394 0.8265 0.9212 0.0129
0.2290 0.7971 0.2113 0.1097 0.3166
[torch.DoubleTensor of size 3x5]
> nn.Narrow(1, 2, 2):forward(x)
0.9222 0.1877 0.3388 0.6265 0.5659
0.8785 0.7394 0.8265 0.9212 0.0129
[torch.DoubleTensor of size 2x5]
> nn.Narrow(1, 2, -2):forward(x)
0.9222 0.1877 0.3388 0.6265 0.5659
0.8785 0.7394 0.8265 0.9212 0.0129
[torch.DoubleTensor of size 2x5]
> nn.Narrow(2, 2, 3):forward(x)
0.2017 0.4485 0.4638
0.1877 0.3388 0.6265
0.7394 0.8265 0.9212
0.7971 0.2113 0.1097
[torch.DoubleTensor of size 4x3]
> nn.Narrow(2, 2, -2):forward(x)
0.2017 0.4485 0.4638
0.1877 0.3388 0.6265
0.7394 0.8265 0.9212
0.7971 0.2113 0.1097
[torch.DoubleTensor of size 4x3]
可以看到,dimension=1时为按行取(1为起始序号),dimension=2时为按列取。length为正数时表示取多少行或者列,为负数是表示取到倒数第几行或者列,其中-1表示最后。
注意,在Lua中进行截取或分片时,是包含开始和结束这两个元素的。如上面所示,从第2行开始取是包含第二行的,取到-2行是包含倒数第二行的,这一点与python不同
nn.CMulTable()
这个函数的输入为几个向量的table(在lua里所有列表、数组、矩阵都是table),输出这个table里各个向量component-wise的乘积。用法如下:
ii = {torch.ones(5)*2, torch.ones(5)*3, torch.ones(5)*4}
m = nn.CMulTable()
=m:forward(ii)
24
24
24
24