Eu tenho um resnet
o modelo que estou trabalhando. Originalmente, eu treinou o modelo usando lotes de imagens. Agora que ele é treinado, eu quero fazer inferência em uma única imagem (224x224 com 3 canais de cores). No entanto, quando eu passar a imagem para o meu modelo, através de model(imgs[:, :, :, 2])
Eu recebo:
DimensionMismatch("Rank of x and w must match! (3 vs. 4)")
Stacktrace:
[1] DenseConvDims(x::Array{Float32, 3}, w::Array{Float32, 4}; kwargs::Base.Iterators.Pairs{Symbol, Any, NTuple{4, Symbol}, NamedTuple{(:stride, :padding, :dilation, :groups), Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}, Tuple{Int64, Int64}, Int64}}})
@ NNlib ~/.julia/packages/NNlib/P9BhZ/src/dim_helpers/DenseConvDims.jl:58
[2] (::Conv{2, 2, typeof(identity), Array{Float32, 4}, Vector{Float32}})(x::Array{Float32, 3})
@ Flux ~/.julia/packages/Flux/ZnXxS/src/layers/conv.jl:162
...
...
Para referência, imgs[:, :, :, 2]
dá:
224×224×3 Array{Float32, 3}:
[:, :, 1] =
0.4 0.419608 0.482353 0.490196 … 0.623529 0.611765 0.627451
0.423529 0.478431 0.513726 0.486275 0.65098 0.65098 0.65098
0.419608 0.47451 0.541176 0.54902 0.682353 0.670588 0.639216
0.52549 0.529412 0.568627 0.564706 0.588235 0.592157 0.572549
0.556863 0.541176 0.513726 0.505882 0.603922 0.635294 0.654902
0.486275 0.490196 0.521569 0.537255 … 0.635294 0.654902 0.65098
0.529412 0.513726 0.533333 0.537255 0.603922 0.596078 0.596078
0.521569 0.52549 0.505882 0.513726 0.580392 0.576471 0.572549
...
...
Alguma idéia do que eu estou faltando aqui? O modelo de exigir as mesmas dimensões durante a inferência de que ele foi treinado na? Existe uma maneira de verificar isso para se certificar de que eu estou dando a entrada correcta dimensões?
Update: eu percebi que eu precisa passar o número de imagens (que neste caso é um), então eu fiz:
img1 = cat(imgs[:, :, :, 1]; dims = ndims(imgs[:, :, :, 1]) + 1 )
img1
model(img1)
o que funciona conforme o esperado. Vou deixar esta questão em aberto, se alguém tem uma resposta para as perguntas original sobre a verificação de entrada, são obscurecidas.