在lua中创建第一层AlexNet并行

时间:2017-06-26 18:37:09

标签: lua parallel-processing deep-learning layer torch

我正在尝试在Torch,Lua中为Alexnet的第一层提供并行表。我想将两批RGB图像传递到网络,然后将它们添加到下一层。例如:假设我想将6个通道的图像发送到alexnet的第一层,但在这种情况下,我想将两批3个通道分别发送到第一个并行层,加入它们然后将输出发送到下一个层层。 实际代码是这样的:

net = nn.Sequential()
c = nn.ParallelTable()
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2)) 
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2))
net:add(c)
net:add(nn.JoinTable(1,8))
net:add(nn.SpatialBatchNormalization(96))
net:add(nn.ReLU(true))
net:add(nn.SpatialMaxPooling(3,3,2,2)) 

我认为可行的代码是:

def departments_for_select
  Rails.cache.fetch("departments_for_select_#{session[:user_id]}", expires_in: 5.minutes) do
    Department.for_select(super_admin? ? nil : session[:user_id])
  end
end

我得到的错误是:

  

在nn.ParallelTable的1个模块中:   /torch/install/share/lua/5.1/cudnn/init.lua:171:断言失败了!

我想知道这个实现在哪里出错了,我们非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

您的错误在net:add(nn.JoinTable(1,8))行,它应该是3而不是8.此值是输入张量的维度数(不计算维度的维度)。在这里,您可以使用3D图像为网络提供信息,然后编写net:add(nn.JoinTable(1,3))

我使用了以下代码,一切顺利

require 'nn'
require 'cutorch'
require 'cunn'
require 'cudnn'

net = nn.Sequential()
c = nn.ParallelTable()
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2)) 
c:add(nn.SpatialConvolution(3,48,11,11,4,4,2,2))
net:add(c)
net:add(nn.JoinTable(1,3))
net:add(nn.SpatialBatchNormalization(96))
net:add(nn.ReLU(true))
net:add(nn.SpatialMaxPooling(3,3,2,2)) 

net:cuda()

input1 = torch.rand(128,3,227, 227):cuda()
input2 = torch.rand(128,3,227,227):cuda()

out = net:forward({input1, input2})

print(out:size())