在Torch中将Softmax添加到ResNet模型

时间:2016-02-20 18:34:31

标签: lua deep-learning torch softmax resnet

上下文:我正在尝试修改this Facebook's ResNet feature extractor script以对图像进行分类并打印ImageNet类标签。 假设我有火炬模型:

local model = torch.load('resnet-101.t7')
local output = model:forward(img:cuda()):squeeze(1)

这给了我每节课的分数。我想获得前5个班级及其概率。我认为要将分数转换为概率,我应首先使用SoftMax层。

所以我这样做:

local model = torch.load('resnet-101.t7')
local softMaxLayer = cudnn.LogSoftMax()
model:add(softMaxLayer)
local output = model:forward(img:cuda()):squeeze(1)

但是当我跑步时,我得到了:

  

/SpatialSoftMax.lua:38:错误的参数#1到'resizeAs'   (火炬.DoubleTensor预计,得到了火炬.CudaTensor)

该模型对我来说很好看:(仅显示最后一层)

  ...
  (9): cudnn.SpatialAveragePooling(7,7,1,1)
  (10): nn.View(2048)
  (11): nn.Linear(2048 -> 1000)
  (12): cudnn.LogSoftMax
}

关于可能出错的任何想法?

1 个答案:

答案 0 :(得分:2)

图层具有与之关联的类型。默认情况下,您将获得双重类型

local softMaxLayer = cudnn.LogSoftMax():cuda()
model:add(softMaxLayer)