0
点赞
收藏
分享

微信扫一扫

实验2:Numpy手写多层神经网络

weednoah 2022-10-16 阅读 123

引言       

        这个作业的目的是给你们介绍建立,训练和测试神经系统网络模型。您不仅将接触到使用Python包构建神经系统网络从无到有,还有数学方面的反向传播和梯度下降。但在实际情况下,你不一定要实现神经网络从零开始(你们将在以后的实验和作业中看到),这个作业旨在给你们对像TensorFlow和Keras这样的包的底层运行情况有一个初步的了解。在本作业中,您将使用MNIST手写数字数据集来训练一个简单的分类神经网络使用批量学习和评估你的模型。

English(英文):http://t.csdn.cn/p8KTX


Link to this article .pdf file 

---------------------------------------------------------------------------------------------------------------------------------

提取码:v6zc 

https://pan.baidu.com/s/1_qFbN0Nhc8MNYCHEyTbkLg%C2%A0


实验2:Numpy手写多层神经网络

概念上的问题 

获得模板

获得数据

作业概述:

实验开始之前:

1. 预处理的数据

2. 独热编码

3.核心抽象

4. 网络层

5. 激活函数

6. 填充模型

7、损失函数

8.优化器

9. 精度指标

10. 训练和测试

11. 可视化的结果

CS1470 Students

CS2470 Students

重要的!


概念上的问题 

        请提交关于Gradescope的概念问题在hw2-mlp概念性下。您必须输入您提交的内容并上传PDF文件。我们建议使用LaTeX。

获得模板

Github Classroom Link with Stencil Code!

Guide on GitHub and GitHub Classroom

获得数据

可使用download.sh下载数据。方法可以运行bash脚本命令。

/script_name.sh(例如:bash ./download.sh)。

这与HW1类似。使用除去所提供的模板代码,但除非指定,否则不要更改模板。

这样做可能会导致与自动分级程序不兼容。不要更改任何方法签名!

这个作业需要NumPy和Matplotlib。你应该已经从HW1得到这个了。也可以查看虚拟环境指南,在本地机器上设置TensorFlow 2.5。请随意

如果必须使用colab,请参考本指南。

作业概述:

        在这个作业中,你将构建一个Keras模仿,Beras(哈哈有趣的名字),并将制定一个模仿Tensorflow/Keras API的顺序模型规范。Python与本作业相关的笔记本是为了让您探索一个示例实现这样你就可以自己动手了!笔记本上没有什么待办事项需要你去做;相反,测试是通过运行assign .py的主要方法来完成的。我们的模板提供了一个模型类,其中包含您需要使用的几个方法和超参数你的网络。你还将回答与作业和课程相关的概念性问题材料(如果你是2470专业的学生,别忘了回答2470专业的问题!)你应该包括一个简短的自述文件,说明你的模型的准确性和任何已知的bug。

实验开始之前:

这份家庭作业在发布两周后到期。实验室1-3提供了很好的练习这个任务,所以如果你卡住了,你可以等他们一会儿。具体地说:

☆ -

实现可调用/可扩散组件:实现此目标所需的技能

可以通过实验室1找到。这包括对数学的精通

符号、矩阵运算以及调用和梯度方法背后的逻辑。

☆ -

实现优化器:您可以通过以下方法实现BasicOptimizer类

按照实验室1中gradient - descent方法的逻辑。其他的优化

(例如Adam, RMSProp)将在实验室2:优化器中讨论。

☆ -

使用batch_step和GradientTape:您可以了解如何使用它们来训练您的基于赋值指令和这些指令的实现进行建模。与也就是说,他们确实模仿了Keras API。你将在实验3:介绍中了解所有这些Tensorflow。如果你的实验在截止日期之后,应该没问题;浏览一下与实验室相关的补充笔记本。你可以先做你能做的,然后在学习更多关于深度的知识时再添加。学习并意识到你在课堂上学到的概念实际上可以在这里使用!不要气馁,试着玩得开心点!

路线图:在这个作业中,我们会带你走过神经网络训练的流程,包括模型类的结构和您必须填写的方法。

1. 预处理的数据

        在训练网络之前,需要清理数据。这包括检索、更改数据并将其格式化为网络的输入。对于这个任务,您将处理MNIST数据集。它可以通过下载.sh脚本,但它也链接在这里(忽略它所说的hw1;我们使用这个这次是hw2的数据集!)。原始数据源在这里。您应该只使用训练数据训练网络,然后测试网络测试数据的准确性。你的程序应该在测试中打印出它的准确性数据集完成后。

注:预处理代码需要从HW1中拉入。

2. 独热编码

        在训练或测试模型之前,您需要对类标签进行“one-hot”编码因此,该模型可以优化到预测任何期望的类。注意,类标签本身就是简单的类别,在数字上没有任何意义。在如果没有单热编码,您的模型可能会学习之间的一些自然排序基于标签的不同类标签(标签是任意的)。例如,假设有一个数据点a对应标签“2”和一个数据点B对应于标签' 7 '。我们不想让模型知道B比a的权重高,因为从数字上讲,7 > 2。要一次性编码你的类标签,你需要必须转换你的一维标签向量吗到大小为num_classes的向量中(其中中的类的总数你的数据集)。对于MNIST数据集,它是这样的类似于右边的矩阵:

 您必须在Beras/onehot.py中填写以下方法:

3.核心抽象

        考虑以下模块的抽象类。一定要玩一下与此相关的Python笔记本作业,可以很好地掌握核心在Beras/core.py中为您定义的抽象模块!笔记本是探索性的(它不是必需的,所有的代码都给出了),并将为您提供许多深入理解和使用这些类抽象!注意以下模块与Tensorflow/Keras API非常相似。

可调用的:具有定义良好的前向函数的函数。这些是你需要的实现:

4. 网络层

        在本文中,您将实现在您的在Beras/layers.py中的顺序模型。你必须填写下列方法:

5. 激活函数

在这次作业中,你将实现两个主要的激活功能,即:Beras/activation .py中的LeakyReLUSoftmax。因为ReLU是一个特例的LeakyReLU,我们已经提供了它的代码。

6. 填充模型

        有了这些抽象概念,让我们为顺序深度学习创建一个管道        模型。你可以在assignment.py中找到SequentialModel类初始化你的神经网络的层,参数(权重和偏差),和超参数(优化器、损失函数、学习率、精度函数等)。的SequentialModel类继承自Beras/model.py,在那里您可以找到许多有用的方法。这还将包含适合您的数据和模型的函数评估你的模型的性能:

        我们鼓励你去看看keras。在介绍笔记本中的SequentialModel(在探索一个可能的模块化实现:TensorFlow/Keras)和参考来到实验室3,感受一下我们如何在深度学习中使用梯度磁带。

7、损失函数

        这是模型训练中最关键的方面之一。在这次作业中,我们会实现MSE或均方误差损失函数。你可以找到损失函数在Beras/ losses.py

8.优化器

       在Beras/optimizer .py文件中,确保为每个不同类型的优化器。实验二应该能帮上忙,祝你好运!

9. 精度指标

        最后,为了评估模型的性能,您需要使用适当的精度指标。在这项作业中,你将在Beras/ metrics.py实现评估分类的准确性:

 10. 训练和测试

        最后,使用上述所有原语,您需要在其中构建两个模型assignment.py:

        对于您使用的任何超参数(层大小,学习率,历元大小,批处理大小,等),请硬编码这些值在get_simple_model()get_advanced_model()函数。不要将它们存储在主处理程序下。一旦一切都实现了,就可以使用python3 assignment.py来运行你的建模,看看损失/精度!

11. 可视化的结果

        我们为您提供了visualize_metrics方法来可视化您的损失和每次使用matplotlib后,精确度都会发生变化。不要编辑此函数。在存储了损失和精度之后,应该在主方法中调用这个函数数组中的每个批处理,将传递给此函数。这应该是一条线横轴是第i批,纵轴是批量损失/精度值。调用这个是可选的!我们还提供了visualize_images方法来可视化您的使用matplotlib对真实标签的预测。此方法目前使用形状为[图像数量,1]的标签。不要编辑此函数。在训练模型之后,您应该使用所有的输入和标签调用这个函数。的函数会从你的输入中随机选择500个样本,并画出10个正确的和10个错误的分类帮助您直观地解释模型的预测!你在您达到测试准确度的基准之后,应该最后执行此操作。

CS1470 Students

CS2470 Students

- 除了和1470一样的任务之外还要完成:

分级和自动分级兼容性

概念: 你的评分标准主要是正确、深思熟虑和清晰。

代码: 你将主要根据功能来评分。你的模型应该有一个精度至少大于测试数据上的阈值。对于1470,这可以通过提供简单的模型参数化。对于2470,您可能需要试验超参数或开发一些自定义组件。虽然你不会根据代码风格打分,但你不应该有过多的在最终提交中打印声明。

重要的: 请尽可能使用向量化操作,并限制for循环的数量你使用。虽然运行这个作业没有严格的时间限制,但通常应该少一些超过3分钟。自动评分器将在10分钟后自动超时。你将不会收到使用Tensorflow或Keras函数的方法。

笔记本: 探险笔记本将手动评分,并应以pdf格式提交文件。请随意使用“从笔记本到乳胶pdf”。ipynb“笔记本!交你应该通过Gradescope在相应的项目作业下提交作业通过压缩你的hw2文件夹(Gradescope上的路径必须是hw2/code/filename.py)或通过GitHub(推荐)。通过GitHub提交,提交并推送所有更改到你的存储库到GitHub。您可以通过运行以下三个命令(这是一个这是了解它们的好资源):

1. git add file1 file2 file3 (or -A)
2. git commit -m “commit message”
3. git push

在提交和推送你的更改到你的回购(如果你不确定它是否有效,你可以在网上检查)之后,你现在可以上传回购到Gradescope!如果您在多个分支上测试代码,您可以选择您想要的任何一个分支。

重要的!

1. 请确保所有文件都在hw2/code中。否则,自动评分器将失败!

2. 在压缩代码之前删除data文件夹。

3. 在hw2/code目录中添加一个名为2470student的空白文件!该文件不应该有扩展名,并且用作标记来对特定于2470的需求进行分级。如果如果你不这样做,你就会丢分!

谢谢!

举报

相关推荐

0 条评论