前言:
本篇文章基于《Python深度学习》[英]尼格尔·路易斯 这本书上的知识,并结合笔者的思考而著
文章中会提到深度学习的基础知识,常见的基础深度学习算法,深度学习numpy等常用包的导入,以及一个小型的练习案例
一、基础知识
1.深度学习是什么
基于初高中所学的生物神经元模型,人工构建人工神经元后,用于处理复杂或大量信息的方法
上图为生物神经元模型,树突处输入,经过胞体加工后沿轴突延申方向传递输出
生物学的知识告诉我们,树突可以一个或多个,而轴突只有一个
类似的,人工神经元仿制,一个输入层有多个输入,一个隐藏层或多个隐藏层负责加工处理,一个输出层得到结果
但其实还有其他的神经网络拓扑结构,可以参考这位大佬的博客
神经网络拓扑结构 神经网络的拓扑结构_mob64ca13f2b62d的技术博客_51CTO博客
隐藏层实际是对输入数据进行加权求和、卷积变换、微积分等一系列数学计算
2.深度学习几个基础算法
1.人工神经网络
人工神经网络是深度学习中最基本的算法之一。
它由多个神经元组成,每个神经元都有权重和偏置,通过调整这些参数来实现模型的训练。人工神经网络可以学习复杂的非线性关系,并在各种任务中取得良好的性能。
简单翻译:像脑子一样,提前设定思考方式,输入数据后处理,输出;这个思考方式也可以使用反馈来不断自我调整修正参数,最后达到一个误差要求内的结果(正确的输出)
2.卷积神经网络(CNN)
卷积神经网络是专门用于处理图像和语音等二维数据的深度学习算法。
它利用卷积层、池化层和全连接层等不同类型的层组成,以自动提取出图像中的特征。CNN在计算机视觉和音频处理等领域广泛应用,如图像分类、目标检测和人脸识别等任务。
简单理解:对图片上的像素点或者音频的声波进行卷积计算,输出处理后的像素
3.循环神经网络(RNN)
循环神经网络是一种处理序列数据的深度学习算法。
它具有循环连接,可以将以前的信息传递到下一个时间步。RNN在自然语言处理、语音识别和机器翻译等任务中表现出色。然而,传统的RNN在长序列上存在梯度消失和梯度爆炸的问题,因此出现了一些改进的模型,如长短时记忆网络(LSTM)和门控循环单元(GRU)。
简单理解:记得上一步的问题指令,能模拟与人交谈时,有上下文的感觉
4.生成对抗网络(GAN)
生成对抗网络是由生成器和判别器两个网络组成的深度学习算法。
生成器网络试图生成与真实数据相似的假数据,而判别器网络则试图区分真实数据和假数据。通过训练生成器和判别器的对抗过程,GAN能够生成高质量的数据样本,广泛应用于图像合成、视频生成和文本生成等领域。
简单理解:有两个人,一个负责吹牛,一个负责检验真假(打脸),根据已知的真数据来比对新编的数据,然后不断迭代优化生成结果,直至以假乱真(有点像是现在的各种AI生成)
还有一些别的算法,可以自行去搜索学习
3.深度学习入门要求:数学基础
由于每个人对深度学习的掌握要求不同,以下为笔者建议的数学基础
1.会用就行,不要求理解
加减乘除
有python代码基础
高中基础(能差不多理解回归模型,知道输入输出,但不懂内部计算)
2.希望理解算法来加强记忆
微积分(高数)
线性代数
概率论与数理统计
一些大学理工科必备的数学基础(可理解大部分计算方法,如梯度,偏导数等)
二、深度学习几个基础包的导入
由于直接从官网下载的python不会自带numpy、pandas等深度学习基础包,所以需要手动下载,笔者这里使用的是pip命令
这个是运行时的报错:ModuleNotFoundError: No module named 'numpy',说明还没安装基础包
1.numpy下载
使用清华源的镜像下载,加快速度
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
参考资料
2.pandas下载
pip install pandas
参考资料 Pandas 安装 | 菜鸟教程 (runoob.com)
笔者用的是pycharm,遇到用win的cmd进行pip下载后,项目内却无法调用
这个是解决方法,其他问题可以先尝试通过搜索解决关于pip安装第三方库,但PyCharm中却无法识别的问题;以及PyCharm安装第三方库的方法解析_pycharm找不到第三方库-CSDN博客
还有一个问题,要区分panda和pandas这两个包,不要漏了s
三、一个小型的练习案例
在引入基础包后,尝试做一个小的神经网络来体验
例子:用DNN拟合y=x²
1.导入基础包与函数
import numpy as np
import pandas as pd
import random
2.生成示例
random.seed(2016)
sample_size=50 #样本量设为50
sample=pd.Series(random.sample(
range(-10000,10000),sample_size
)) #random.sample随机生成某个范围内的数
x=sample/10000
y=x**2
3.检查样本
打印前10个,检查x的值是否符合规定,左下为x,右下为y
print(x.head(10))
print(y.head(10))
可以使用describe函数来快速查看数据的摘要
print(x.describe())
这是笔者的样例输出,会包含结尾的dtype
4.格式化数据
这里书本使用的是neuralpy包——一个专门研究神经网络的机器学习库
使用该包前需要对数据进行格式转换
count = 0
dataSet = [([x.ix[count]],[y.ix[count]])]
count = 1
while (count < sample_size):
print("Working on data item:",count)
dataSet = (dataSet+ [([x.ix[count]],[y.ix[count]])])
count = count + 1
5.拟合模型
拟合一个有两个隐藏层的DNN,第一层3个神经元,第二层7个
通过 neuralpy 的 Network 方法指定
import neuralpy
fit = neuralpy,Network(1,3,7,1)
这里的neuralpy库没安装进的别慌,因为笔者也没找到能用的方法,待笔者去寻找一些帮助再更新下载方法
epochs = 100
learning_rate = 1
print("fitting model right now")
fit.train(dataSet,epochs,learning_rate)
#传参给训练函数,样本,迭代最大次数和学习速率
6.性能表现评估
count = 0
pred = []
while (count < sample_size):
out=fit.forward(x[count])
print("Obs: ",count+1,
"y = ",round(y[count],4)
"prediction = ",round(pd.Series(out),4)
pred.append(out)
count = count + 1
)
#预测值用fit.forward函数获得,通过while循环存在out中
下面是书中的输出结果,欢迎各位把尝试结果放在评论区,大家一起讨论
以上为笔者的学习笔记,如有不妥,欢迎各位指出0v0