VGG19模型多分类索引越界:无法识别字母Z的问题咨询
解决索引越界问题并正常识别字母Z
问题根源
你的模型输出层设置为Dense(26, activation='softmax'),对应A-Z共26个类别,因此输出数组的有效索引范围是0到25(A对应0,Z对应25)。但你在判断Z类时错误访问了output[0][26],超出了数组的索引边界,直接触发IndexError。同时原代码的两两比较逻辑既繁琐又易出错,不是合理的分类预测方式。
修正方案
最优方案:用argmax直接获取最大概率类别
这种方式无需手动编写大量判断条件,简洁且不易出错:
import numpy as np from keras.models import load_model import cv2 import matplotlib.pyplot as plt import imageio as io # 读取Z类图片 A= io.imread('/content/drive/MyDrive/Colab Notebooks/Proyek Akhir/datasetBISINDO/BISINDO Sign Language/Z/IMG_1067.JPG') #Z B= cv2.resize(A, (64, 64)) img = np.asarray(B) plt.imshow(img), plt.title("Predicted Result"), plt.axis('off') img = np.expand_dims(img, axis=0) # 加载模型 saved_model = load_model("/content/drive/MyDrive/Colab Notebooks/VGG19PAbagas.h5") output = saved_model.predict(img) # 获取最大概率对应的索引 pred_index = np.argmax(output[0]) # 将索引映射为对应字母(0=A,1=B...25=Z) pred_letter = chr(ord('A') + pred_index) print(f"预测结果:{pred_letter}")
备选方案:修正原判断逻辑(不推荐)
如果坚持使用原有的分支判断逻辑,需删除越界的索引访问,改为判断当前索引是否为最大概率:
# 替换原有的判断代码段 max_prob = np.max(output[0]) if output[0][0] == max_prob: print("A") # ... 此处省略B到X的判断逻辑 ... elif output[0][24] == max_prob: print('Y') elif output[0][25] == max_prob: print('Z') else: print('Tidak Terdefinisi')
内容的提问来源于stack exchange,提问作者Bagas Ruli Pandapotan
相关产品推荐
相关产品推荐

