Tengo un resnet
modelo en el que estoy trabajando. Originalmente entrenado el modelo de uso de lotes de imágenes. Ahora que está capacitado, quiero hacer inferencia sobre una sola imagen (224x224 con 3 canales de color). Sin embargo, cuando me pase la imagen a mi modelo a través de model(imgs[:, :, :, 2])
Obtengo:
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 referencia, imgs[:, :, :, 2]
da:
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
...
...
Alguna idea de lo que me estoy perdiendo aquí? ¿El modelo requieren las mismas dimensiones durante la inferencia de que fue entrenado en? Hay una manera de comprobar esto para asegurarse de que estoy dando la entrada correcta dimensiones?
Actualización: me di cuenta de que tengo que pasar en el número de imágenes (que en este caso es uno de ellos), así que lo hice:
img1 = cat(imgs[:, :, :, 1]; dims = ndims(imgs[:, :, :, 1]) + 1 )
img1
model(img1)
que funciona como se espera. Voy a dejar esta pregunta abierta si alguien tiene una respuesta a las preguntas iniciales acerca de la comprobación de entrada se atenúa.