Torch 模块学习
1. Serialization
Torch 提供了 4 种序列化/反序列化 Lua/Torch objects 的方法.
torch.save(filename, object [, format, referenced])
将 object 写入 filename 文件.
format 可以是 ascii 或 binary(默认).
用例:
-- arbitrary object: obj = { mat = torch.randn(10,10), name = '10', test = { entry = 1 } } -- save to disk: torch.save('test.dat', obj)
[object] torch.load(filename [, format, referenced])
从 filename 文件读入 objects.
用例:
-- given serialized object from section above, reload: obj = torch.load('test.dat') print(obj) -- will print: -- {[mat] = DoubleTensor - size: 10x10 -- [name] = string : "10" -- [test] = table - size: 0}
[str] torch.serialize(object)
将 object 序列化为 string.
用例:
-- arbitrary object: obj = { mat = torch.randn(10,10), name = '10', test = { entry = 1 } } -- serialize: str = torch.serialize(obj)
[object] torch.deserialize(str)
从 string 反序列化 object
用例:
-- given serialized object from section above, deserialize: obj = torch.deserialize(str) print(obj) -- will print: -- {[mat] = DoubleTensor - size: 10x10 -- [name] = string : "10" -- [test] = table - size: 0}
2. Module
Module 是抽象类,定义了训练神经网络所必要的基础方法,通过成员函数来设计网络结构.
主要包含变量的两种状态:output 和 gradInput.
[output] forward(input)
根据输入 input,计算对应的输出 output. 一般 input 和 output 是 Tensors.
不推荐修改 forward 函数. 需要实现 updateOutput(input) 函数.
[gradInput] backward(input, gradOutput)
根据输入 input,计算关于 input 的梯度操作;需要是在 forward 之后调用;网络优化;
一般 input, gradOutput, gradInput 是 Tensors.
BP 包含种类梯度的计算及对应的函数:
关于输入变量的梯度计算 - updateGradInput(input, gradOutput)
关于网络参数的梯度计算 - accGradParameters(input,gradOutput,scale), gradParamaters * scale,累加
zeroGradParameters()
如果网络 module 已经有参数,该函数将关于其参数的累积梯度gradParameters清零.
updateParameters(learningRate)
更新网络 module 参数:
parameters=parameters−learningRate∗gradients_wrt_parameters
accUpdateGradParameters(input, gradOutput, learningRate)
累积参数梯度,并更新参数.
share(mlp,s1,s2,…,sn)
修改 module