I’m not sure I can explain why exactly this is happening, but could you try
fname = "..."
learn.predict(fname)
That way the entire data-loading process is handled the same way as when training your model.
An easier way to load such images would be to do:
fname = "..."
PIL.Image.open(fname).convert("RGB")
which gives you a 3-channeled image and is safe to do (stacking the image may lead to some unexpected behavior)