MNIST手写数字识别CNN训练报NameError: x_train1未定义问题求助
报错原因排查
- 首先注意到你贴的报错上下文和你提供的完整代码不一致:报错信息里
model.compile之后多了一行x_train1 = np.array( x_train1).reshape(len( x_train1), -1),这行代码并没有出现在你提供的完整代码中。当前报错的直接原因就是运行这行额外代码时,x_train1还没有被成功定义。 - 常见触发场景1:你在Colab运行代码时没有按顺序执行所有单元格,仅运行了模型定义和训练部分的单元格,跳过了前面
load_data函数定义、数据加载处理的单元格,导致x_train1变量没有被赋值。 - 常见触发场景2:
load_data函数缩进错误导致加载失败。你提供的代码里load_data函数内部的代码缩进不统一,digits_data.rename、return等行的缩进和前面的代码块不一致,不符合Python语法要求,会直接导致函数定义或执行报错,无法返回x_train1等变量,后续代码调用时就会报变量未定义。
修复方案
- 先删除你实际运行代码里
model.compile之后额外添加的那行reshape代码:你提供的完整代码已经在load_data函数中把x_train1处理成了符合CNN输入要求的(样本数,28,28,1)格式,不需要额外做reshape,新增的那行属于冗余代码。 - 统一修正
load_data函数内部的代码缩进,所有函数内部的代码都保持4个空格的统一缩进,避免出现语法错误。 - 按顺序执行所有代码单元格,先运行导入库、文件上传、
load_data和preprocessing的代码,确认数据加载阶段没有报错后再运行模型定义和训练的代码。
其他非报错类优化建议
你当前代码里如果使用的是普通MNIST数据集,属于10分类任务,但to_categorical和输出层Dense都写的是36类,建议根据实际使用的数据集调整对应数值,如果是使用包含字母的扩展MNIST数据集可保持不变。
内容的提问来源于stack exchange,提问作者Gdeer Al Jably
相关产品推荐
相关产品推荐

