You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载自定义图像数据集触发NameError:x_test未定义问题求助

问题原因

直接触发NameError的原因是:你在最后一行代码里直接使用了未定义的x_test变量——你的代码只把收集到的所有图像存入了x_train,完全没有创建x_test,自然会报错。

除此之外,你的代码还缺了两个核心环节(毕竟是要替代mnist.load_data()):

  • 没有划分训练集和测试集(mnist会自动拆分好训练/测试数据)
  • 没有收集图像对应的标签(to_categorical是用来处理分类标签的,不是图像数据)
修正步骤

1. 修复数据收集逻辑,同时收集标签

假设你的数据集结构是:path1下的每个子文件夹对应一个类别(比如mnist的0-9分类文件夹),子文件夹名称对应标签。修改代码同时收集图像和标签,顺便修复原代码的缩进错误(Python靠缩进识别代码块,原代码缩进不对会直接报错):

import os
import cv2
import numpy as np
from tensorflow import keras

path1 = 'C:\\Users\\klaud\\Desktop\\images\\'
all_images = []
all_labels = []  # 用来存每个图像对应的标签

subjects = os.listdir(path1)
numberOfSubject = len(subjects)
print('Number of Subjects: ', numberOfSubject)

# 遍历每个类别文件夹
for number1 in range(numberOfSubject):
    # 用os.path.join拼接路径,避免手动拼斜杠出错
    path2 = os.path.join(path1, subjects[number1])
    sequences = os.listdir(path2)
    # 从第4个文件开始读取(和原逻辑一致)
    for number2 in range(4, len(sequences)):
        path3 = os.path.join(path2, sequences[number2])
        img = cv2.imread(path3, 0)
        # 加个判断,避免读取损坏/不存在的图像报错
        if img is not None:
            img = img.reshape(512, 512, 1)
            all_images.append(img)
            # 用文件夹索引作为标签,也可以把subjects[number1]转成数字(如果文件夹名是数字的话)
            all_labels.append(number1)

# 转成numpy数组
all_images = np.array(all_images)
all_labels = np.array(all_labels)

2. 划分训练集和测试集

用scikit-learn的train_test_split拆分数据(没装的话先跑pip install scikit-learn):

from sklearn.model_selection import train_test_split

# 按8:2拆分训练/测试集,random_state保证每次拆分结果一致
x_train, x_test, y_train, y_test = train_test_split(all_images, all_labels, test_size=0.2, random_state=42)

3. 对标签做One-Hot编码

注意:to_categorical是处理标签数据的,不是图像!原代码用错了对象,应该用在y_train和y_test上:

num_classes = numberOfSubject
y_train = keras.utils.np_utils.to_categorical(y_train, num_classes)
y_test = keras.utils.np_utils.to_categorical(y_test, num_classes)
最终效果

现在你得到的x_train、y_train、x_test、y_test就和mnist.load_data()返回的结构一致了(只是你的图像尺寸是512x512x1,mnist是28x28x1),可以直接用于后续模型训练。

内容的提问来源于stack exchange,提问作者clautsick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:45:29