J'ai un resnet
modèle qui je travaille. Au départ, j'avais formé le modèle à l'aide des lots d'images. Maintenant qu'il est formé, je veux faire de l'inférence sur une seule image (224x224 avec 3 couches de couleur). Cependant, lorsque je passe l'image de mon modèle via model(imgs[:, :, :, 2])
J'obtiens:
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
...
...
Pour référence, imgs[:, :, :, 2]
donne:
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
...
...
Toute idée de ce que je suis en manque ici? Le modèle exigent les mêmes dimensions lors de l'inférence qu'il été formé? EST-il un moyen de vérifier cela pour m'assurer que je suis de donner les bonnes dimensions initiales?
Mise à jour: j'ai réalisé que j'ai besoin de passer dans le nombre d'images (qui dans ce cas est une), j'ai donc fait:
img1 = cat(imgs[:, :, :, 1]; dims = ndims(imgs[:, :, :, 1]) + 1 )
img1
model(img1)
qui fonctionne comme prévu. Je vais laisser cette question ouverte si quelqu'un a une réponse à des questions concernant la vérification de l'entrée s'estompe.