- local e = torch.Tensor(3, height, width):fill(1.0)
- local y0 = 1 + gap
-
- for _, t in pairs(bt) do
- local d = t:dim()
- local h, w = t:size(d - 1), t:size(d)
- local n = t:nElement() / (w * h)
- local z = t:norm() / math.sqrt(t:nElement())
-
- local x0 = 1 + gap + math.floor( (width - n * (w + gap)) /2 )
- local u = torch.Tensor(t:size()):copy(t):resize(n, h, w)
- for m = 1, n do
-
- for c = 1, 3 do
- for y = 0, h+1 do
- e[c][y0 + y - 1][x0 - 1] = 0.0
- e[c][y0 + y - 1][x0 + w ] = 0.0
- end
- for x = 0, w+1 do
- e[c][y0 - 1][x0 + x - 1] = 0.0
- e[c][y0 + h ][x0 + x - 1] = 0.0
- end
- end
-
- for y = 1, h do
- for x = 1, w do
- local v = u[m][y][x] / z
- local r, g, b
- if signed then
- if v < -1 then
- r, g, b = 0.0, 0.0, 1.0
- elseif v > 1 then
- r, g, b = 1.0, 0.0, 0.0
- elseif v >= 0 then
- r, g, b = 1.0, 1.0 - v, 1.0 - v
- else
- r, g, b = 1.0 + v, 1.0 + v, 1.0
- end
- else
- if v <= 0 then
- r, g, b = 1.0, 1.0, 1.0
- elseif v > 1 then
- r, g, b = 0.0, 0.0, 0.0
- else
- r, g, b = 1.0 - v, 1.0 - v, 1.0 - v
- end
- end
- e[1][y0 + y - 1][x0 + x - 1] = r
- e[2][y0 + y - 1][x0 + x - 1] = g
- e[3][y0 + y - 1][x0 + x - 1] = b
- end
- end
- x0 = x0 + w + gap
- end
- y0 = y0 + h + gap + tgap + gap
- end
-
- return e