lua - 如何使用 Torch7 进行预测

标签 lua torch

我仍在熟悉 Torch,到目前为止一切顺利。然而,我遇到了一个我不确定如何绕过的死胡同:我怎样才能让 Torch7(或更具体地说是 dp 库)评估单个输入并返回预测输出?

这是我的设置(基本上是 dp 演示):

  require 'dp'
--[[hyperparameters]]--
opt = {
    nHidden = 100, --number of hidden units
    learningRate = 0.1, --training learning rate
    momentum = 0.9, --momentum factor to use for training
    maxOutNorm = 1, --maximum norm allowed for output neuron weights
    batchSize = 128, --number of examples per mini-batch
    maxTries = 100, --maximum number of epochs without reduction in validation error.
    maxEpoch = 1000 --maximum number of epochs of training
}
--[[data]]--
datasource = dp.Mnist{input_preprocess = dp.Standardize()}
print("feature size: ", datasource:featureSize())

--[[Model]]--
model = dp.Sequential{
    models = {
        dp.Neural{
            input_size = datasource:featureSize(),
            output_size = opt.nHidden,
            transfer = nn.Tanh(),
            sparse_init = true
        },
        dp.Neural{
            input_size = opt.nHidden,
            output_size = #(datasource:classes()),
            transfer = nn.LogSoftMax(),
            sparse_init = true
        }
    }
}

--[[Propagators]]--
train = dp.Optimizer{
    loss = dp.NLL(),
    visitor = { -- the ordering here is important:
        dp.Momentum{momentum_factor = opt.momentum},
        dp.Learn{learning_rate = opt.learningRate},
        dp.MaxNorm{max_out_norm = opt.maxOutNorm}
    },
    feedback = dp.Confusion(),
    sampler = dp.ShuffleSampler{batch_size = opt.batchSize},
    progress = true
}
valid = dp.Evaluator{
    loss = dp.NLL(),
    feedback = dp.Confusion(),
    sampler = dp.Sampler{}
}
test = dp.Evaluator{
    loss = dp.NLL(),
    feedback = dp.Confusion(),
    sampler = dp.Sampler{}
}

--[[Experiment]]--
xp = dp.Experiment{
    model = model,
    optimizer = train,
    validator = valid,
    tester = test,
    observer = {
        dp.FileLogger(),
        dp.EarlyStopper{
            error_report = {'validator','feedback','confusion','accuracy'},
            maximize = true,
            max_epochs = opt.maxTries
        }
    },
    random_seed = os.time(),
    max_epoch = opt.maxEpoch
}

xp:run(datasource)

最佳答案

您有两个选择。

一个。使用封装的 nn.Module转发你的torch.Tensor :

mlp = model:toModule(datasource:trainSet():sub(1,2))
mlp:float()
input = torch.FloatTensor(1, 1, 32, 32) -- replace this with your input
output = mlp:forward(input)

两个。将您的 torch.Tensor 封装到 dp.ImageView 中并通过您的 dp.Model 转发:

input = torch.FloatTensor(1, 1, 32, 32) -- replace with your input
inputView = dp.ImageView('bchw', input)
outputView = mlp:forward(inputView, dp.Carry{nSample=1})
output = outputView:forward('b')

关于lua - 如何使用 Torch7 进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399067/

相关文章:

java - LuaJ 数组/列表类型安全

installation - 导入 torch OSError : [WinError 127]

python - 如何查看 torch 的确切安装位置 pip vs conda torch 安装

deep-learning - 如何使用空间转换器在pytorch中裁剪图像?

iterator - 有没有一些聪明的方法来编写 lua 对象,使其兼作迭代器?

c - libc stat 函数和 LuaJIT

lua 字符串索引表并解包

c++ - 有没有一种方法可以将 Lua 成员变量绑定(bind)为使用该变量的名称调用 C/C++ 函数

linux - Torch7 Lua,加载模块时出错 'libpaths' (Linux)

Lua 命令行字符串