北京交通大学《深度学习》专业课,实验2-前馈神经网络

news2024/11/15 9:53:54

1. 源代码

见资源“北京交通大学《深度学习》专业课,实验2-前馈神经网络”

2. 实验内容

(1)手动实现前馈神经网络解决上述回归、二分类、多分类任务
        分析实验结果并绘制训练集和测试集的loss曲线
(2)利用torch.nn实现前馈神经网络解决上述回归、二分类、多分类任务
        分析实验结果并绘制训练集和测试集的loss曲线
(3)在多分类实验的基础上使用至少三种不同的激活函数
        对比使用不同激活函数的实验结果
(4)对多分类任务中的模型评估隐藏层层数和隐藏单元个数对实验结果的影响
        使用不同的隐藏层层数和隐藏单元个数,进行对比实验并分析实验结果
(5)在多分类任务实验中分别手动实现和用torch.nn实现dropout
         探究不同丢弃率对实验结果的影响(可用loss曲线进行展示)
(6)在多分类任务实验中分别手动实现和用torch.nn实现L2正则化
        探究惩罚项的权重对实验结果的影响(可用loss曲线进行展示)
(7)对回归、二分类、多分类任务分别选择上述实验中效果最好的模型,采用10折交叉验证评估实验结果
        要求除了最终结果外还需以表格的形式展示每折的实验结果

3. 基础知识

4. 学习question&answer

问题一:手动实现前馈神经网络解决回归任务

模仿教程中的手动实现 ReLu 激活函数时,
报错:
原因:待转换类型的 PyTorch Tensor 变量带有梯度,直接将其转换为 numpy 数据将破坏计算图,因此 numpy 拒绝进行数据转换。
解决办法: 改变实现方式:
返回 max{0, input} 实现 ReLu 函数。

 问题二:手动实现前馈神经网络解决多分类任务

报错:在 loss.backward () 的时候出现 RuntimeError : Found dtype Long but expected Float
解决过程:
        • 检查 loss 类型( flaot32 准确)
        • →查找资料
        • loss 函数的输入类型不一致

         l = loss(y_hat, y).sum() à l = loss(y_hat, y.float()).sum() 

问题三

问题四:深度学习过程中梯度消失

        操作过程:

         结果:

问题五:多分类任务中的模型评估隐藏层层数和隐藏单元个数对实验结果的影响

        答:

        理论:层数越深 → 模型拟合函数的能力增强,效果会更好

        实际:简单数据集,隐藏层的层数和隐藏单元个个数不能过多。→ 更深的层数可能会带来过拟合的问题,同时也会增加训练难度,使模型难以收敛。

        因此在使用神经网络时,最好可以参照已有的性能良好的模型。

 问题六:深度学习和机器学习的区别

        模型复杂度:深度学习模型通常比机器学习模型更为复杂,包含多个层次的神经网络结构,这些网络可以从数据中学习更加抽象和高级的特征表示。

        数据量要求:深度学习模型通常需要更多的数据来训练,因为它们的参数量非常大,需要足够的样本来避免过拟合。

        特征工程:深度学习模型通常不需要进行显式的特征工程,因为它们可以自动从原始数据中学习特征表示。相比之下,机器学习模型需要手动选择和构造特征。

        计算要求:深度学习模型通常需要更强大的计算资源和更长的训练时间,因为它们的模型复杂度和参数量更高。

        应用范围:深度学习通常用于处理视觉、语音、自然语言处理等具有复杂结构和模式的数据,而机器学习则更加广泛,可应用于各种任务,如回归、分类、聚类等。

        总结:深度学习是机器学习的一个分支,它利用了深层次的神经网络和自动化特征提取等技术,以更高效和准确的方式处理数据和任务。

前馈解决回归、二分类、多分类

前馈神经网络解决回归问题的loss曲线:

前馈神经网络解决二分类问题的loss曲线:

前馈神经网络解决多分类问题的loss曲线:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1927594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GUI界面开发之tkinter(一)

Tkinter是一个内置的Python库,用于创建图形用户界面(GUI)。它提供了一组工具和小部件,用于创建窗口、对话框、按钮、菜单和其他GUI元素。 在本篇文章中,主要介绍了窗口等知识点。 大家好!我是码银&#x1…

STM32MP135裸机编程:烧录程序到EMMC的方法

0 前言 STM32MP135支持多种启动方式,包括SD卡、NAND Flash、EMMC等,基于STM32MP135裸机的SD卡烧录操作方法我们之前已经介绍过,现在介绍的STM32MP135烧录到EMMC的方法又和前面烧录到SD卡的操作有所不同。本文将介绍基于STM32MP135&#xff0…

缓存的击穿及解决方案

定义及图解 缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时 候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把…

Flutter 调用Google内购支付最新教程

前言: 各位同学大家好, 之前看到有人在群里问flutter 怎么调用Google支付, 今天就准备整理写一篇文章。 效果图 实现方式: 我们是通过flutter和安卓交互 然后在原生安卓里面加入了内购支付结算库的依赖 最后调起的Google 支付 安卓原生内购支付教程 flutter 端代码 我…

Go: IM系统开发及注意事项

概述 使用Go语言打造支持,同时十万人在线的IM系统系统单机支持十万人,如果分布式部署后,支持数百万都是可以的IM 系统, 即时通讯(Instant Messaging),比如说我们的微信,QQ 等IM 系统,它具备非常…

软件测试服务公司分享:系统测试和验收测试有什么联系和区别?

软件系统测试是指对软件系统的各个模块、组件以及整个系统进行全面检查和验证的过程。它旨在检测系统的功能是否符合需求、是否能够正常运行以及是否存在潜在的问题。在软件开发的整个生命周期中,系统测试是一个非常重要且必不可少的环节。 软件验收测试是软件在开…

vs code 启动react项目,执行npm start报错原因分析

1.执行 npm start错误信息:npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 npm start ~~~ CategoryInfo …

记录些Spring+题集(1)

接口防刷机制 接口被刷指的是同一接口被频繁调用,可能是由于以下原因导致: 恶意攻击:攻击者利用自动化脚本或工具对接口进行大量请求,以消耗系统资源、拖慢系统响应速度或达到其他恶意目的。误操作或程序错误:某些情…

【正点原子i.MX93开发板试用连载体验】录音小程序采集语料

本文最早发表于电子发烧友论坛:【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 接下来就是要尝试训练中文提示词。首先要进行语料采集,这是一…

C双指针元素去重

需求 在尾部插⼊、删除元素是⽐较⾼效的&#xff0c;时间复杂度 是 O(1)&#xff0c;但是如果在中间或者开头插⼊、删除元素&#xff0c;就会涉及数据的搬移&#xff0c;时间复杂度为 O(N)&#xff0c;效率较低。 代码 #include <stdio.h>// 相邻元素去重 int remove…

Linux-管道

管道&#xff1a;把一个命令的输出&#xff0c;通过管道连接&#xff0c;作为另一个命令的输入。管道的工作原理是通过一段共享内存来实现数据的传输&#xff0c;其中一个进程向管道写入数据&#xff0c;另一个进程则从管道的另一端读取数据。 1.可以通过ls -lh罗列出当前文件…

Smartbi体验中心升级新装,全产品线沉浸式体验

为了让用户更好地了解Smartbi产品在数据分析中的价值和能力&#xff0c;优化用户的产品体验&#xff0c;我们近期对Smartbi在线体验中心进行了全新改版和系统调优。本次更新内容包括全新首页、全新行业示例Demo、新增产品核心功能Demo&#xff0c;并优化了现有的Demo。让我们一…

直播预告|V学院|干货预警!2.5D、流光、动效?一次掌握!

随着可视化行业持续发展&#xff0c;可视化设计随之不断进化升级&#xff0c;对于设计师的视觉审美、设计能力和灵活运用等要求也随之进阶。可视化设计越来越卷了&#xff0c;设计师需要了解市场上的热点效果、优秀案例&#xff0c;持续学习&#xff0c;才能随行业发展不断进步…

C基础day9

一、思维导图 二、课后练习 1> 使用递归实现 求 n 的 k 次方 #include<myhead.h>int Pow(int n,int k) {if(k 0 ) //递归出口{return 1;}else{return n*Pow(n,k-1); //递归主体} }int main(int argc, const char *argv[]) {int n0,k0;printf("请输入n和k:&…

合合TextIn - 大模型加速器

TextIn是合合信息旗下的智能文档处理平台&#xff0c;在智能文字识别领域深耕17年&#xff0c;致力于图像处理、模式识别、神经网络、深度学习、STR、NLP、知识图谱等人工智能领域研究。凭借行业领先的技术实力&#xff0c;为扫描全能王、名片全能王等智能文字识别产品提供强大…

Jeecgboot vue3的选择部门组件JSelectDept如何实现只查询本级以及子级的部门

jeecgboot vue3的文档&#xff1a;地址 JSelectDept组件实现了弹窗然后选择部门返回的功能&#xff0c;但部门是所有数据&#xff0c;不符合需求&#xff0c;所以在原有代码上稍微改动了一下 组件属性值如下&#xff1a; 当serverTreeDatafalse的时候&#xff0c;从后端查询…

在uniapp中如何使用地图

1&#xff0c;技术选择 最好是使用webview html形式加载&#xff0c;避免打包app时的地图加载问题 2&#xff0c;webview使用 使用webview必须按照官方文档,官网地址&#xff1a;https://uniapp.dcloud.net.cn/component/web-view.html <template><view><!…

windows电脑的linux虚拟机连接电脑网络的方法

一、虚拟机新建网络适配器,将其设置为NAT模式 子网等信息就不知道该设置什么网段的先就设置为192.168.0.x,后面可以修改 二、电脑设置 1.网络和Internet>高级网络设置 2.编辑虚拟网络NAT适配器 &#xff08;1&#xff09;选中"自动获取ip地址",确认 3.编辑WLAN…

【后端开发实习】用Redis实现消息队列邮件发送

简介 用Resi本身封装的方法相比于调redis-smq库&#xff0c;实现方式就要简单朴素很多&#xff1a; 调用redis本身的List数据结构的Lpush实现消息的进队。用Redis的List数据结构的brpop方法实现消息的出队。将出队消息通过邮件方法发送给指定的用户。 生动形象理解就是用redi…

RabbitMQ 实现简易即时通讯

设计思路 利用消息队列的特性进行消息投递&#xff0c;假设客户端 A 要与客户端 B 进行通信。 客户端 A &#xff1a;创建队列 A-B &#xff0c;发送的消息推送到 A-B 队列&#xff0c; 绑定 B-A 队列&#xff0c;接收 B-A 队列推送给客户端的消息。 客户端 B &#xff1a;创建…