mxnet - 胶子模型形状不一致
问题描述
我正在尝试胶子模型动物园。
import mxnet as mx
from mxnet.gluon.model_zoo import vision
import cv2
import numpy as np
ctx = mx.gpu(6) # successful
net = vision.alexnet(pretrained=True, ctx=ctx)
# preparing input image.
# You may ignore this process. This just preprocess an image for the net.
# To load input image as shape (batch=1, channel=3, width, height)
im = cv2.imread(‘img.jpg’) # w,h = 4032,3024. rgb color image
im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB).astype(float)/255
im = mx.image.color_normalize(im, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
im = np.transpose(im, (2,0,1)) # (4032,3024,3) -> (3,4032,3024)
im = im[None,:] # (3,4032,3024) -> (1,3,4032,3024). this means batchsize=1
im = mx.nd.array(im, ctx=ctx)
# run
r = net(im)
当我运行它时,会发生错误。
MXNetError: Shape inconsistent, Provided = [4096,9216], inferred shape=(4096,2976000)
我必须将图像大小调整为特定大小吗?在manual中,gluon 只需要最小尺寸的宽度、高度。我应该考虑最大尺寸还是固定输入尺寸?
解决方案
根据原始论文,您需要将输入大小固定为 256 到 256,因为这是训练 AlexNet 网络的图像大小。通常,您可以通过将较小的轴(宽度或高度)调整为 256,然后进行中心裁剪来实现它。
问题是,当您使用神经网络进行预测时,您需要以与训练数据完全相同的方式准备输入数据。如果你不这样做,在最简单的情况下会出现形状不匹配错误。在更复杂的情况下,当形状匹配,但图像与模型训练的图像截然不同时,结果肯定是错误的。
推荐阅读
- c++ - 我一直试图弄清楚我在这个链表程序中做错了什么
- android - How to handle large data set of a API response in React Native
- javascript - 检测浏览器是否支持语音合成标记语言
- java - Why does fetching results using "new Throwable().getStackTrace()[1].getMethodName()" termed as expensive?
- c# - Restsharp:自动映射查询参数
- php - 如何将 php ext dir 保存在变量中?
- python - Python animated cursor next to a printed line
- c - I got different output when using 2 different compilers
- ant - 从 css 文件中收集字符串并将它们保存到新的 css 文件中
- jupyter-notebook - 我可以恢复在 GCP Dataproc 中删除的 Jupyter 笔记本吗