QR码数据集导入报错:无法将(410,410)数组广播至(28,28)
解决ValueError: could not broadcast input array from shape (410,410) into shape (28,28)问题
错误原因
你的代码是为MNIST的28x28灰度图设计的,但QR码图像尺寸为410x410,初始化的train、test数组尺寸与读取的图像尺寸不匹配,导致赋值时广播失败。
修复方案
方案1:适配QR码的原始尺寸
直接修改数组初始化和后续处理逻辑,适配410x410的图像:
- 修改
read_MNIST_Data函数中数组初始化代码:train = np.empty((1000,410,410),dtype='float') test = np.empty((10000,410,410),dtype='float') - 修改reshape逻辑:
trainX = train.reshape(train.shape[0],1,410,410) testX = test.reshape(test.shape[0],1,410,410) - 修改
plot_images函数中的绘图尺寸:plt.imshow(img.reshape(410,410), cmap="gray")
方案2:将QR码缩放到28x28尺寸
如果希望继续使用原有的28x28模型输入尺寸,读取图像后用OpenCV缩放:
- 修改训练集读取代码(测试集同理):
缩放时可根据需求选择插值方法,比如# 替换标记***的行 img = cv2.imread('C:/Users/trifo/Downloads/Train-20221025T200820Z-001/Train_Project/{0}'.format(filename),0) resized_img = cv2.resize(img, (28,28)) / 255.0 train[i] = resized_imgcv2.resize(img, (28,28), interpolation=cv2.INTER_AREA)
额外需要修复的代码问题
- 缩进错误:标记***的代码行缩进不正确,应和循环内的
trainY[i] = y保持同一缩进级别,否则只会处理最后一个文件 - 测试集加载错误:
get_train_test_loaders中testds错误使用了训练集的张量,应改为:testds = MyDataSet(x_test_tensor, y_test_tensor) - 数据集数量匹配:确保训练文件夹内的文件数量正好是1000,测试文件夹内是10000,否则会出现索引越界错误
内容的提问来源于stack exchange,提问作者Patrick Fenton
相关产品推荐
相关产品推荐

