MNIST手写字体识别(算法基础)

快教程

10分钟入门神经网络 PyTorch 手写数字识别

image-20240624194626103

慢教程

【深度学习Pytorch入门】

简单回归问题-1

梯度下降算法

梯度下降算法

l o s s = x 2 ∗ s i n ( x ) loss = x^2 * sin(x) loss=x2sin(x)

求导得:

f ‘ ( x ) = 2 x s i n x + x 2 c o s x f^`(x)=2xsinx + x^2cosx f(x)=2xsinx+x2cosx

迭代式:
x ‘ = x − δ x x^`=x-\delta x x=xδx

δ x \delta x δx 前乘上学习速度 l r lr lr , 使得梯度慢慢往下降无限趋近合适解,在最优解附近波动 ,得到一个近似解

求解器

  • sgd
  • rmsprop
  • adam

求解一个简单的二元一次方程

噪声

实际数据是含有高斯噪声的,我们拿来做观测值,通过观察数据分布为线型分布时,不断优化loss,即求loss极小值

  • y = w ∗ x + b + ϵ y = w * x + b + \epsilon y=wx+b+ϵ

  • ϵ ∽ N ( 0.01 , 1 ) \epsilon \backsim N(0.01,1) ϵN(0.01,1)

求解loss极小值,求得 y y y 近似于 W X + b WX + b WX+b 的取值:
l o s s = ( W X + b − y ) 2 loss = (WX + b - y)^2 loss=(WX+by)2
最后
l o s s = ∑ i ( w ∗ x i + b − y i ) 2 loss = \sum_i(w*x_i+b-y_i)^2 loss=i(wxi+byi)2
从而
w ‘ ∗ x + b ‘ → y ‘ w^` * x + b^` \rightarrow y^` wx+by

简单回归问题-2

凸优化(感兴趣可以查阅资料)

image-20240624160924656

  • linear Regression

取值范围是连续的

w x + b w 1 + b . . . . . . . w n + b wx+b\\ w_1+b\\ .......\\ w_n+b wx+bw1+b.......wn+b

用以上实际数据(8)预测 W X + B WX + B WX+B

# 梯度下降的应用
def compute_error_for_line_given_points(b,w,points):totalError = 0for i in range(0,len(points)):x = points[i,0]y = points[i,1]#  totalError += (y - (w * x + b ) ) ** 2b_gradient += -(2/N) * (y - ((w_current * x) + b_current))w_gradient += -(2/N) * x * (y - ((w_current * x) + b_current))new_b = b_current - (learningRate * b_gradient)new_w = w_current - (learningRate * w_gradient)return [new_b, new_w]#return totalError / float(len(points))def gradient_descent_runner(points, starting_b , starting_m, learning_rate, num_iterations):b = starting_bm = starting_mfor i in range(num_iterations):b, m = step_gradient(b,m,np.array(points),learning_rate)return [b,m]
  • Logistic Regression

值域压缩到 [0-1] 的范围

  • Classification

在上一种regression基础上,每个点的概率加起来为1

简单回归实战案例

import numpy as np# y = wx + b
def compute_error_for_line_given_points(b, w, points):totalError = 0for i in range(0, len(points)):x = points[i, 0]y = points[i, 1]totalError += (y - (w * x + b)) ** 2return totalError / float(len(points))def step_gradient(b_current, w_current, points, learningRate):b_gradient = 0w_gradient = 0N = float(len(points))for i in range(0, len(points)):x = points[i, 0]y = points[i, 1]b_gradient += -(2/N) * (y - ((w_current * x) + b_current))w_gradient += -(2/N) * x * (y - ((w_current * x) + b_current))new_b = b_current - (learningRate * b_gradient)new_m = w_current - (learningRate * w_gradient)return [new_b, new_m]def gradient_descent_runner(points, starting_b, starting_m, learning_rate, num_iterations):b = starting_bm = starting_mfor i in range(num_iterations):b, m = step_gradient(b, m, np.array(points), learning_rate)return [b, m]def run():points = np.genfromtxt("data.csv", delimiter=",")learning_rate = 0.0001initial_b = 0 # initial y-intercept guessinitial_m = 0 # initial slope guessnum_iterations = 1000print("Starting gradient descent at b = {0}, m = {1}, error = {2}".format(initial_b, initial_m,compute_error_for_line_given_points(initial_b, initial_m, points)))print("Running...")[b, m] = gradient_descent_runner(points, initial_b, initial_m, learning_rate, num_iterations)print("After {0} iterations b = {1}, m = {2}, error = {3}".format(num_iterations, b, m,compute_error_for_line_given_points(b, m, points)))if __name__ == '__main__':run()
# 跑完结果
Starting gradient descent at b = 0, m = 0, error = 5565.107834483211
Running...
After 1000 iterations b = 0.08893651993741346, m = 1.4777440851894448, error = 112.61481011613473

分类问题引入-1

MNIST数据集

  • 每个数字有7000张图像
  • 训练数据和测试数据划分为:60k 和 10k
H3:[1,d3]Y:[0/1/.../9]

(1) Nutshell

在最简单的二元一次线性方程基础上进行三次线性模型嵌套,使线性输出更稳定,每一次嵌套后的结果作为后一个的输入
p r e d = W 3 ∗ { W 2 [ W 1 X + b 1 ] + b 2 } + b 3 pred = W_3 *\{W_2[W_1X+b_1]+b_2\}+b_3\nonumber pred=W3{W2[W1X+b1]+b2}+b3

(2) Non-linear Factor

  • segmoid

  • ReLU

    • 梯度离散

      三层嵌套整流函数

      H 1 = r e l u ( X W 1 + b 1 ) H1=relu(XW1 + b1) H1=relu(XW1+b1)

      H 2 = r e l u ( H 1 W 2 + b 2 ) H2=relu(H1W2 + b2) H2=relu(H1W2+b2)

      H 3 = r e l u ( H 2 W 3 + b 3 ) H3=relu(H2W3 + b3) H3=relu(H2W3+b3)

      增加了非线性变化的容错

(3) Gradient Descent

o b j e c t i v e = ∑ ( r e d − Y ) 2 objective = \sum(red-Y)^2 objective=(redY)2

  • [ W 1 , W 2 , W 3 ] [W1,W2,W3] [W1,W2,W3]
  • [ b 1 , b 2 , b 3 ] [b1,b2,b3] [b1,b2,b3]

说人话就是让模型愈来愈贴近真实的变化(从正常的字体,到倾斜,模糊,笔画奇特等字体),以便更好的预测

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

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

相关文章

uORF和non-overlap对翻译效率的影响

以下是重叠和非重叠上游开放阅读框(uORFs)对翻译效率影响的总结: 重叠uORFs: 重叠uORFs对主要编码区的翻译影响更为显著,因为它们直接与下游编码序列(CDSs)竞争核糖体结合。重叠uORFs的翻译起始…

在C++程序中嵌入quickjs实现C++和javascript互相调用

quickjs是一个C实现的轻量级javascript解析引擎,可以嵌入到C程序中,实现C和js代码的交互。 以下基于quickjs-ng这一社区分支实现样例代码演示利用quickjs编写程序进行C和js互相调用,支持linux和windows。 代码结构 quickjs_demo- quickjs-…

Cesium大屏-vue3注册全局组件

1.需求 说明:产品经理要求开发人员在地图大屏上面随意放置组件,并且需要通过数据库更改其组件大小,位置等;适用于大屏组件中场站视角、任意位置标题等。 2.实现 2.1GlobalComponents.vue 说明:containerList可以通…

python基础语法 004-2流程控制- for遍历

1 遍历 1.1 什么是遍历? 可以遍历的元素:字符串、列表、元组、字典、集合字符串是可以进行for 循环。(容器对象,序列)可迭代对象iterable 例子: 1 )、for遍历字符串: name xiao…

RK3568驱动指南|第十五篇 I2C-第167章 I2C上拉电阻

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

SpringBoot实现图片添加水印

提示&#xff1a;今日完成图片添加水印功能 后续可能还会继续完善这个功能 文章目录 目录 文章目录 前端部分 后端 Xml Controller层 Sercive层 Service实现层 Config配置层 application.properties 文件后缀名获取 常量定义 前端部分 <!DOCTYPE html> <htm…

WIN11,如何同时连接有线网络与WLAN无线网络

之前写了两篇文章&#xff0c;一篇是双网卡多网卡时win11如何设置网卡优先级_多网卡设置网卡优先级-CSDN博客 另一篇是win11 以太网和WLAN冲突 连接网线时导致WiFi掉线 解决_win11 以太网和wifi不能同时生效-CSDN博客 这篇是对上面两篇的补充&#xff1a;主要解决电脑重启后&…

语音芯片TD5580,USB小音响芯片—拓达半导体

有时候电脑的声卡会出现损坏的问题&#xff0c;给我们的生活带来了很多麻烦。这时候&#xff0c;我们就需要一款方便易用的产品来解决声卡问题。USB声卡小音响就是为了解决这个问题而设计的一款便捷的产品。它不仅可以作为一个小音响&#xff0c;让您在工作和娱乐的时候享受高品…

docker-compose搭建minio对象存储服务器

docker-compose搭建minio对象存储服务器 最近想使用oss对象存储进行用户图片上传的管理&#xff0c;了解了一下例如aliyun或者腾讯云的oss对象存储服务&#xff0c;但是呢涉及到对象存储以及经费有限的缘故&#xff0c;决定自己手动搭建一个oss对象存储服务器&#xff1b; 首先…

烧结银到底有多牛?欢迎咨询SHAREX善仁新材研究院

烧结银到底有多牛&#xff1f;欢迎咨询SHAREX善仁新材研究院 在当今日新月异的科技浪潮中&#xff0c;材料科学以其独特的魅力引领着人类探索未知领域的步伐。在众多前沿材料中&#xff0c;烧结银凭借其卓越的性能和广泛的应用前景&#xff0c;逐渐崭露头角&#xff0c;成为科…

创建XCOM窗体和跳转连接

Xcom 窗体&#xff1a; (groupBox组合框&#xff0c;comboBox下拉框) xcom代码&#xff1a; namespace _01_作业 {// 1kb 1024B 1200B// 1MB public partial class Form1 : Form{public List<string> botelv new List<string> { "600","1200&…

Unix Network Programming Episode 96

‘socketpair’ Function The socketpair function creates two sockets that are then connected together. This function applies only to Unix domain sockets. #include <sys/socket.h> int socketpair(int family, int type, int protocol, int sockfd[2]);POSIX…

(十七)如何学习统计学基础知识(学习路线)

统计学是数据科学的基本支柱。统计学的目的是帮助你理解数据并从中得出有意义的结论。在数据科学中&#xff0c;统计学在理解数据模式和趋势、做出预测和检验假设方面起着至关重要的作用。 (一) 数据科学统计学习路线图 本文为学习统计学并将其应用于数据科学提供了清晰、结构化…

如何使用 SPM 插件从 Pkl 配置文件生成 Swift 接口

文章目录 前言示例展示 Pkl 配置生成 Swift 绑定手动安装和使用 pkl-gen-swift创建 SPM 命令插件加载 Pkl 配置总结前言 Pkl(全称为 Pickle)是苹果推出的一种全新的专用于配置的编程语言。它允许开发人员通过类型和内置验证安全、直观地设计数据模型。 作为苹果语言,Pkl 有…

Python容器 之 列表--下标和切片

列表的切片 得到是 新的列表字符串的切片 得到是 新的字符串 如果下标 不存在会报错 list1 [1, 3.14, "hello", False] print(list1)# 获取 列表中 第一个数据 print(list1[0]) # 1# 获取列表中的最后一个数据 print(list1[-1]) # [False]# 获取中间两个数 即 3.1…

3.2ui功能讲解之graph页面

本节重点介绍 : graph页面target页面flags页面status页面tsdb-status页面 访问地址 $ip:9090 graph页面 autocomplete 可以补全metrics tag信息或者 内置的关键字 &#xff0c;如sum聚合函数table查询 instante查询&#xff0c; 一个点的查询graph查询调整分辨率 resolutio…

记录:有趣的C#多元运算符 ? : 表达式写法

有时候用 if //...Whatre you she wanna go else if //...do do do else //...and i know something just like this... 感觉代码太多了怎么优雅的、高端的替换&#xff1f; 看个高端的栗子菊&#xff1a; LedCOM["parity"] ledData[4] "N" ? …

Study--Oracle-05-Oracler体系结构

一、oracle 体系概览 Oracle数据库的体系结构通常包括以下主要组件&#xff1a; 1、实例&#xff08;Instance&#xff09;&#xff1a;运行数据库的软件环境&#xff0c;包括内存结构&#xff08;SGA&#xff09;和进程结构&#xff08;Background Processes and User Proces…

Django 一对多关系

1&#xff0c;创建 Django 应用 Test/app9 django-admin startapp app9 2&#xff0c;注册应用 Test/Test/settings.py 3&#xff0c;添加应用路由 Test/Test/urls.py from django.contrib import admin from django.urls import path, includeurlpatterns [path(admin/,…

《每天5分钟用Flask搭建一个管理系统》 第10章:前端集成

第10章&#xff1a;前端集成 10.1 前端技术概述 前端技术指的是构建Web应用用户界面所使用的技术&#xff0c;包括HTML、CSS和JavaScript。现代Web开发中&#xff0c;前端框架如React、Vue.js和Angular等被广泛使用。 10.2 AJAX与Flask的集成 AJAX&#xff08;Asynchronous…