神经网络学习笔记——如何设计、实现并训练一个标准的前馈神经网络

news/2024/9/18 14:56:07/ 标签: 神经网络, 学习, 笔记

1.从零设计并训练一个神经网络icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV134421U77t/?spm_id_from=333.337.search-card.all.click&vd_source=0b1f472915ac9cb9cdccb8658d6c2e69

一、如何设计、实现并训练一个标准的前馈神经网络,用于手写数字图像的分类,重点讲解了神经网络的设计和实现、数据的准备和处理、模型的训练和测试流程。

- 以数字图像作为输入,神经网络计算并识别图像中的数字。

- 输入层包含784个神经元,隐藏层用于特征提取,输出层包含10个神经元。

- 输出层的输出输入到soft max层,将十维的向量转换为十个概率值。

二、神经网络的设计思路和实现方法,以及手写数字识别的数据处理流程和代码实现,包括图像预处理、构建数据集等。

- 神经网络设计思路:每个概率值对应一个数字

- 手写数字识别训练数据:使用mini数据集

  • 数据处理流程:图像预处理、读取数据文件夹、构建数据集

三、使用PyTorch进行图像分类的步骤,包括读取数据、构建数据集、小批量数据读取、模型训练等,以及涉及到的对象和损失函数等。

  • 1、读取数据、构建数据集
  • 2、模型的训练
  • 使用train loader进行小批量数据读入,创建模型、优化器和损失函数进行训练
  • 训练模型的循环迭代,外层代表整个数据集的遍历次数,内层使用小批量数据读取进行梯度下降算法。
  • 3、模型的测试 
  • 注:测试的时候,需要​编辑model.eval() 
import torch
import torch.nn as nn# 定义模型结构
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc = nn.Linear(10, 2)self.dropout = nn.Dropout(0.5)self.batch_norm = nn.BatchNorm1d(2)def forward(self, x):x = self.fc(x)x = self.dropout(x)x = self.batch_norm(x)return x# 初始化模型
model = SimpleModel()# 加载训练好的模型权重
model.load_state_dict(torch.load('model.pth'))# 将模型设置为评估模式
model.eval()# 测试数据
test_input = torch.randn(5, 10)# 禁用梯度计算
with torch.no_grad():output = model(test_input)print(output)

Q1:为什么训练集要分批次训练,跟每条数据单独训练(batch_size=1)有什么不一样的吗?

  • 较大的 batch_size,梯度更新会更加平滑和稳定,模型能够更好地学到数据的总体分布特征。
  • 最优的batch size跟训练集的大小有关,大数据集适合大batch,小数据集适合小batch,极端情况下batch_size=1也不是不可以。

 Q2:为什么loss会不断变小?

  • 梯度下降只包含了局部的损失函数信息,所以只能保证存在趋近局部最优的可能。

Loss 在训练过程中不断变小是因为优化算法(如梯度下降)的作用,但这个现象背后有多个原因和理论支持。逐步解析:

1. 梯度下降原理

梯度下降算法的核心思想是利用目标函数(即损失函数)的梯度来迭代地更新模型的参数。梯度本身指示了损失函数增长最快的方向,因此,通过向梯度的反方向更新参数,可以逐步减小损失值。

2. 局部最优与全局最优

  • 局部最优:在多维空间中,损失函数可能存在多个局部最小值。梯度下降算法只能保证找到其中一个局部最小值,而不一定是全局最小值。
  • 全局最优:对于凸函数,任何局部最小值也是全局最小值。但对于非凸函数(大多数深度学习模型的损失函数),找到全局最小值更加复杂。

3. 损失函数的性质

  • 凸性:如果损失函数是凸的,那么任何局部最小值也是全局最小值,梯度下降法最终能够找到这个全局最小值。
  • 非凸性:对于非凸函数,虽然存在多个局部最小值,但梯度下降法依然可以找到某个局部最小值,使得损失函数值减小。

4. 学习率的作用

  • 学习率是梯度下降中一个关键的超参数,它决定了每一步参数更新的幅度。适当选择学习率可以保证算法的收敛性和稳定性。

5. 损失函数的优化目标

  • 训练过程中,优化的目标是最小化损失函数,这通常意味着模型的预测误差在减少
  • 随着训练的进行,模型逐渐学习到数据中的模式和结构,使得预测更加准确,从而损失值减小。

6. 泛化能力

  • 虽然训练过程中损失持续减小,但最终目标是提高模型在未知数据上的泛化能力
  • 为了防止过拟合,通常会采取正则化技术(如L1、L2正则化,Dropout等),以及早停(early stopping)策略。

7. 局部信息与全局搜索

  • 梯度下降利用的是局部信息(即当前位置的梯度),它提供了一种贪婪的搜索策略,每一步都朝着减少损失的方向前进。
  • 尽管只能保证趋近局部最优,但在实际应用中,通过合理的初始化、学习率调度和正则化策略,梯度下降往往能找到使损失足够小的参数配置。

结论

损失函数不断变小是因为梯度下降算法通过利用局部梯度信息来不断更新模型参数,使得模型逐渐学习到数据的内在规律,从而减少预测误差。虽然梯度下降只能保证找到局部最优解,但通过适当的策略和技巧,通常可以训练出性能良好的模型。



http://www.ppmy.cn/news/1525194.html

相关文章

【SpringBoot3】面向切面 AspectJ AOP 使用详解

文章目录 一、AspectJ介绍二、简单使用步骤1、引入依赖2、定义一个Aspect3、开启AOP支持 三、AOP 核心概念四、切点(Pointcut)1. execution2. within3. this & target4. args & args5. within & target & annotation 五、通知&#xff0…

Unix时间戳与C语言的time.h库函数

目录 Unix时间戳介绍 UTC/GMT 时间与秒计数器转换代码 time.h库函数 Unix时间戳介绍 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 时间戳存储在一个秒计数器中,秒计数器…

15.5 创建监控控制平面的service

本节重点介绍 : k8s中service的作用和类型创建k8s控制平面的service 给prometheus采集用, 类型clusterIp kube-schedulerkube-controller-managerkube-etcd service的作用 Kubernetes Service定义了这样一种抽象: Service是一种可以访问 Pod逻辑分组…

MATLAB求解0-1线性规划问题的详细分析

引言 0-1线性规划是整数规划中的一种特殊形式,它广泛应用于资源分配、工厂选址、投资组合优化、物流运输等多个领域。0-1线性规划的特点是,决策变量只能取0或1的离散值,通常用于描述“是-否”决策问题。随着计算机技术的发展,数学…

《仙境传说RO:新启航》游戏攻略:VMOS云手机提升装备获取辅助!自由交易,辅助挂机操作!

在《仙境传说RO:新启航》中,想要快速提升战斗力并获取顶级装备,玩家需要熟练掌握多种获取资源与提升角色的途径。为了让玩家更加轻松地享受游戏,VMOS云手机推出了专属定制版云手机,内置游戏安装包,不需要重…

【c++实现】统计上升四元组

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1. 题目描述2. 解释3. DP前缀和枚举 1. 题目描…

使用 nvm 管理 node 版本:如何在 macOS 和 Windows 上安装使用nvm

🔥 个人主页:空白诗 文章目录 一、引言二、nvm的安装与基本使用2.1 macOS安装nvm2.1.1 使用 curl 安装2.1.2 使用 Homebrew 安装 2.2 Windows安装nvm2.2.1 下载 nvm-windows2.2.2 安装 nvm-windows 2.3 安装node2.4 切换node版本 三、常见问题及解决方案…

graphQL 参数使用报错问题

query{getMembers(sid:0,nodeId:"ns6;i7896"){methods} } //报错 "message": "Field \"methods\" of type \"[UaMethod]\" must have a selection of subfields. Did you mean \"methods { ... }\"?",这个错误信…

观众登记2025中国(深圳)国际智能手机供应链展览会

时间:2024年4月9-11日 地点:深圳会展中心 ◆展会背景background: 近年来,国内手机品牌在全球市场上的影响力不断增强,华为、OPPO、VIVO和小米等…

实战案例(2)防火墙+二交换机VLAN组网

案例二:防火墙充当三层交换机与路由器角色功能进行组网 拿到这样的拓扑后,首先要了解好客户的需求,然后根据需求进行划分 比如客户那边有监控跟办公网络,可以通过VLAN划分不同的区域,然后二层交换机对接终端的口划入到…

Spring Boot属性注入的多种方式!

Spring Boot的一个问题,证明你是不是真正的 "会用" Spring boot ?Spring Boot的一个问题,直接暴露你是不是真正使用Spring Boothttps://mp.weixin.qq.com/s?__bizMzkzMTY0Mjc0Ng&mid2247484040&idx1&sn64ad15d95e44c874cc890973…

国产服务器CPU发展分析

CPU行业概览:信创带动服务器CPU国产化 目前CPU行业由两大生态体系主导:一是基于X86指令系统和Windows操作系统的Wintel体系,主要用于服务器与电脑等;二是基于ARM指令系统和Android操作系统的AA体系,主要用于移动设备…

机器学习和深度学习存在显著区别

机器学习和深度学习在多个方面存在显著的区别,以下是对这些区别的详细阐述: 定义与起源 机器学习:是人工智能的一个分支领域,它使计算机能够从数据中学习并改进其性能,而无需进行显式编程。机器学习起源于20世纪50年代…

认识原码反码补码

目录 一.何为原码反码和补码? (1)原码 (2)反码 (3)补码 (4)总结 二.原反补之间的简单计算 (1)补码加法 (2) 补码减法 (3) 溢出问题 一.何为原码反码和补码? (1)原码 原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。 符号位:最高位&#xf…

uniapp数据缓存和发起网络请求

数据缓存 uni.onStorageSync同步的方式将数据存储到本地缓存 <template><button click"onStorageSync()">存储数据</button> </template><script setup>const onStorageSync () > {// 存储数据uni.setStorageSync(username, 张三)…

Python——爬虫(2)

要使用Python爬取B站热门视频&#xff0c;可以使用第三方库requests和BeautifulSoup来实现。 首先&#xff0c;你需要安装这两个库。你可以使用以下命令在终端或命令提示符中安装它们&#xff1a; pip install requests beautifulsoup4接下来&#xff0c;你可以使用以下代码来…

使用Astra DB和LangChain构建高效的RAG系统:从入门到实践

使用Astra DB和LangChain构建高效的RAG系统&#xff1a;从入门到实践 1. 引言 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;简称RAG&#xff09;是一种结合了信息检索和文本生成的AI技术&#xff0c;能够显著提升大语言模型的表现。本文将介绍如何使…

React Native 0.76版本发布

关于 React Native 的 New Architecture 概念&#xff0c;最早应该是从 2018 年 RN 团队决定重写大量底层实现开始&#xff0c;因为那时候 React Native 面临各种结构问题和性能瓶颈&#xff0c;最终迫使 RN 团队开始进行重构。 而从 React Native 0.68 开始&#xff0c;New A…

buildroot移植qt报错Info: creating stash file (补充qt添加字库)

移植qt库&#xff0c;编译文件报错Info: creating stash file /home/rbing/QT/uart/.qmake.stash Project ERROR: Unknown module(s) in QT: serialport rbingouc:~/QT/uart$ /home/rbing/linux/tool/buildroot-2022.02.9/output/host/usr/bin/qmake Info: creating stash fil…

ssm“健康早知道”微信小程序 LW PPT源码调试讲解

第二章开发技术与环境配置 以Java语言为开发工具&#xff0c;利用了当前先进的SSM框架&#xff0c;以MyEclipse10为系统开发工具&#xff0c;MySQL为后台数据库&#xff0c;开发的一个“健康早知道”微信小程序。 2.1 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2…