Я заметил, что использовал функции opencv для применения нормализации с помощью этого кода:
subtract(image, Scalar(0.485, 0.456, 0.406), temp);
divide(temp, Scalar(0.229, 0.224, 0.225), image);
Эта операция изменяет только первый канал и не меняет другие каналы. По этой причине на самом деле значения входного тензора разные. Я применил нормализацию непосредственно к значениям тензора, написав этот код:
tensor_image = tensor_image.permute({ 2,0,1 });//chw
tensor_image = tensor_image.toType(torch::kFloat);
tensor_image = tensor_image.div(255.0);
//normalize
tensor_image[0] = tensor_image[0].sub_(0.485).div_(0.229);
tensor_image[1] = tensor_image[1].sub_(0.456).div_(0.224);
tensor_image[2] = tensor_image[2].sub_(0.406).div_(0.225);
Таким образом, я получил те же значения входного тензора по сравнению со стороной Python. После предсказания я получил те же значения выходного тензора. Моя проблема решена.