百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

没那么难,深度神经网络概念整理

wptr33 2025-02-28 17:40 19 浏览

深度神经网络就是用一组函数去逼近原函数,训练的过程就是寻找参数的过程。

1.神经网络训练过程
神经网络的训练过程如下:

收集数据,整理数据

实现神经网络用于拟合目标函数

做一个真实值和目标函数值直接估计误差的损失函数,一般选择既定的损失函数

用损失函数值前向输入值求导,

再根据导数的反方向去更新网络参数(x),目的是让损失函数值最终为0.,最终生成模型


各层概念解释

输入层:就是参数输入

输出层:就是最后的输出

隐藏层(隐含层):除去其他两层之外的层都可以叫隐藏层

模型是什么:

模型包含两部分,一部分是神经网络的结构,一部分是各个参数,最后训练的成果就是这个

2、基础概念
1、数学知识

1.1导数

导数在大学的时候还是学过的,虽然概念很简单,但是过了这么多年几乎也都忘了,连数学符号都不记得了,在复习之后才理解:就是表示数据变化的快慢,是变化率的概念,比如重力加速度,表示你自由落体之后每秒速度的增量。

数学公式是:



不重要,看不看的懂都行,因为在后面的学习中也不会让你手动求导,框架里都有现成的函数

1.2 梯度

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)

梯度:是一个矢量,其方向上的方向导数最大,其大小正好是此最大方向导数。



2、前向传播和反向传播

前向传播就是前向调用,正常的函数调用链而已,没什么特别的,破概念搞得神神秘秘的

比如

def a(input):
return y

def b(input):
return y2
# 前向传播
def forward(input):
y = a(input)
y2 = b(y)
反向传播



反向传播就是根据误差和学习率,将参数权重进行调整,具体的算法下次会专门写一篇文章进行解析。

3、数据预处理手段
3.1 归一化(normalization)

将数据放缩到0~1区间,利用公式(x-min)/(max-min)

3.2 标准化(Standardization)

数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。将数据转化为标准的正态分布,均值为0,方差为1

3.3 正则化

正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。

3.4 独热码编码 (one hot)

one hot编码是将类别变量转换为机器学习算法易于使用的一种形式的过程。one-hot通常用于特征的转换

比如:一周七天,第三天可以编码为 [0,0,1,0,0,00]

注:我把英语都补在了后面,并不是为了装逼,只是为了下次看到这个单词的时候知道这个单词在表示什么。

4、数据处理库
numpy ,pandas, matplotlib 这三个是数据分析常用的库,也是深度学习中常用的三个库

4.1 numpy

numpy 是优化版的python的列表,提高了运行效率,也提供了很多便利的函数,一般在使用的时候表示矩阵

numpy中的一个重要概念叫shape ,也就是表示维度



注:numpy 的api 我也使用不熟练,相信会在以后的学习过程中熟练的,使用的时候查一查,不用担心。

4.2 pandas

Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据).

[Series] 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

注:pandas 可以当做Excel使用,里面的api 我也使用不熟练,不用担心,可以扫下核心概念就好

4.3 matplotlib

Matplotlib 是画图用的,可以用来在学习的过程中对数据进行可视化,我还没有学习这个库,只会照猫画虎,所以放轻松,只是告诉你有这么个东西,不一定现在就要掌握

5、训练集、测试集,测试集
训练集:用来训练模型的数据,用来学习的

验证集:用来验证模型的数据,主要是看下模型的训练情况

测试集: 训练完成之后,验证模型的数据

一般数据的比例为6:2:2

一个形象的比喻:

训练集----学生的课本;学生 根据课本里的内容来掌握知识。

验证集----作业,通过作业可以知道 不同学生学习情况、进步的速度快慢。

测试集----考试,考的题是平常都没有见过,考察学生举一反三的能力。
5、损失函数
损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样.



注:f(x) 表示预测值,Y 表示真实值,

这些只是常用的损失函数,实现不同而已,在后面的开发理解各个函数就行了,API caller 不用理解具体的实现,就像你知道快速排序的算法原理,但是没必要自己去实现,现成的实现拿来用不香吗?

6、优化器
优化器就是在深度学习反向传播过程中,指引损失函数(目标函数)的各个参数往正确的方向更新合适的大小,使得更新后的各个参数让损失函数(目标函数)值不断逼近全局最小。

常见的几种优化器



7、激活函数
激活函数就是对输入进行过滤,可以理解为一个过滤器



常见的非线性激活函数通常可以分为两类,一种是输入单个变量输出单个变量,如sigmoid函数,Relu函数;还有一种是输入多个变量输出多个变量,如Softmax函数,Maxout函数。

对于二分类问题,在输出层可以选择 sigmoid 函数。

对于多分类问题,在输出层可以选择 softmax 函数。

由于梯度消失问题,尽量sigmoid函数和tanh的使用。

tanh函数由于以0为中心,通常性能会比sigmoid函数好。

ReLU函数是一个通用的函数,一般在隐藏层都可以考虑使用。

有时候要适当对现有的激活函数稍作修改,以及考虑使用新发现的激活函数。

8、hello world
说了很多概念,搞个demo 看看,下面是一个最简单的线性回归的模型。

环境的安装在文章的开头。

import torch as t
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
import numpy as np

# 学习率,也就是每次参数的移动的大小
lr = 0.01
# 训练数据集的次数
num_epochs = 100
# 输入参数的个数
in_size = 1
#输出参数的个数
out_size = 1
# x 数据集
x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],
[9.779], [6.182], [7.59], [2.167], [7.042],
[10.791], [5.313], [7.997], [3.1]], dtype=np.float32)
# y 对应的真实值
y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573],
[3.366], [2.596], [2.53], [1.221], [2.827],
[3.465], [1.65], [2.904], [1.3]], dtype=np.float32)
# 线性回归网络
class LinerRegression(nn.Module):
def __init__(self, in_size, out_size):
super(LinerRegression, self).__init__()
self.fc1 = nn.Linear(in_size, out_size)

def forward(self, x):
y_hat = self.fc1(x)
return y_hat


model = LinerRegression(in_size, out_size)
# 损失函数
lossFunc = nn.MSELoss()
# 优化器
optimizer = optim.SGD(model.parameters(), lr=lr)
# 对数据集训练的循环次数
for epoch in range(num_epochs):
x = t.from_numpy(x_train)
y = t.from_numpy(y_train)
y_hat = model(x)
loss = lossFunc(y_hat, y)
# 导数归零
optimizer.zero_grad()
# 反向传播,也就是修正参数,将参数往正确的方向修改
loss.backward()
optimizer.step()
print("[{}/{}] loss:{:.4f}".format(epoch+1, num_epochs, loss))

# 画图看下最终的模型拟合的怎么样
y_pred = model(t.from_numpy(x_train)).detach().numpy()
plt.plot(x_train, y_train, 'ro', label='Original Data')
plt.plot(x_train, y_pred, 'b-', label='Fitted Line')
plt.legend()
plt.show()
上面是最简单的一个线性回归的神经网络,没有隐藏层,没有激活函数。

运行很快,因为参数很少,运行的最终结果可以看下,最终达到了我们的结果,你可以试着调整一些参数


————————————————
版权声明:本文为CSDN博主「香菜聊游戏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/perfect2011/article/details/120012457

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个else解...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。今天分享一下break和continue在代码中的执行效果是什么,进一步区分出二者的区别。一、continue例1:当小明3岁时不打印年龄,其余年龄正常循环打印。可以看...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。答案:CSS的盒模型是用于布局和定位元素的概念。它由内容区域...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录由浅入深,66条JavaScript面试知识点(一)由浅入深,66...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)1.vue的生命周期有哪些及每个生命周期做了什么?beforeCreate是newVue()之后触发的第一个钩子,在当前阶段data、methods、com...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...