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

MNIST数据集是否含验证集?mnist_loader中pickle加载逻辑解析

问题解答

一、为什么能从数据集中获取到验证集?

原始MNIST确实只有60000条训练数据和10000条测试数据,但你使用的mnist.pkl.gz是Michael Nielsen预先处理过的版本——他把原始60000条训练数据拆分成了50000条训练集和10000条验证集,测试集则保留原始的10000条不变。这个拆分是作者提前完成并序列化到pickle文件中的,所以你加载时能直接拿到三个数据集。

二、training_data, validation_data, test_data = pickle.load(f)执行时具体发生了什么?

这条语句的执行过程可以拆解为以下几步:

  • 首先f是通过gzip.open打开的压缩文件流(原代码中会实时解压mnist.pkl.gz的字节流,无需手动提前解压);
  • pickle.load(f)会读取流中的序列化字节数据,将其反序列化为Python对象——这里的对象是一个包含三个元素的元组,对应拆分后的训练集、验证集、测试集;
  • 最后通过Python的解包赋值语法,把元组里的三个数据集分别赋值给training_data、validation_data、test_data三个变量。

补充说明:这三个数据集的结构是作者预先整理好的,比如training_data是一个包含50000个元组的列表,每个元组是(输入向量, 标签向量):输入向量是784维的numpy数组(对应28x28手写图片的像素值),标签向量是10维的one-hot数组(对应0-9的数字分类);验证集和测试集的结构类似,样本数量各为10000。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:07:07