使用我们自己的框架进行MNIST数字分类#

来自AI初学者课程的实验任务。

读取数据集#

此代码从互联网上的存储库下载数据集。你也可以手动从AI课程仓库的/data目录中复制数据集。

In [4]:
!rm *.pkl
!wget https://raw.githubusercontent.com/microsoft/AI-For-Beginners/main/data/mnist.pkl.gz
!gzip -d mnist.pkl.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  9.9M  100  9.9M    0     0   9.9M      0  0:00:01 --:--:--  0:00:01 15.8M
In [3]:
import pickle
with open('mnist.pkl','rb') as f:
    MNIST = pickle.load(f)
In [4]:
labels = MNIST['Train']['Labels']
data = MNIST['Train']['Features']

让我们看看我们拥有的数据的形状:

In [5]:
data.shape
(42000, 784)

划分数据#

我们将使用 Scikit Learn 将数据划分为训练集和测试集:

In [6]:
from sklearn.model_selection import train_test_split

features_train, features_test, labels_train, labels_test = train_test_split(data,labels,test_size=0.2)

print(f"Train samples: {len(features_train)}, test samples: {len(features_test)}")
Train samples: 33600, test samples: 8400

指导说明#

  1. 将课程中的框架代码复制到此笔记本中,或者(更好)复制到一个单独的 Python 模块中
  2. 定义并训练一个单层感知机,观察训练和验证过程中的准确率
  3. 尝试判断是否发生了过拟合,并调整层参数以提高准确率
  4. 对两层和三层感知机重复上述步骤。尝试在层之间使用不同的激活函数进行实验
  5. 尝试回答以下问题:
    • 层间激活函数是否会影响网络性能?
    • 对于这个任务,我们是否需要两层或三层网络?
    • 在训练网络时是否遇到任何问题?特别是在层数增加时。
    • 网络的权重在训练过程中如何变化?你可以绘制权重最大绝对值与训练轮次的关系图来理解它们之间的关系。
In [ ]:

免责声明
本文档使用AI翻译服务Co-op Translator进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。