深度学习是一种强大的机器学习办法,它在各个范畴都有广泛应用。假如你是一个新手,想要入门深度学习,下面是一些过程和资源,能够协助你开端学习和实践深度学习。
1. 学习根本概念
在开端深度学习之前,你需求对一些根本概念有所了解。以下是一些你需求学习的重要概念:
- 神经网络: 它从信息处理视点对人脑神经元网络进行抽象, 建立某种简略模型,按不同的衔接办法组成不同的网络。神经网络是一种运算模型,由很多神经元之间彼此联接构成。学习怎么构建和练习神经网络是入门的重要一步。
- 神经元: 神经元模型是一个包括输入,输出与核算功用的模型。
- 前向传达和反向传达: 它是神经网络的根本运转办法,前向传达用于核算输出,反向传达用于更新网络参数。
- 激活函数: 激活函数决定神经元的输出。学习不同的激活函数以及它们的效果。
- 丢失函数: 丢失函数用于衡量模型的猜测与实践成果之间的差异。了解不同的丢失函数和它们的适用场景。
- 优化算法: 优化算法用于更新神经网络的参数以最小化丢失函数。了解常用的优化算法,如随机梯度下降法(SGD)和Adam。
2. 学习编程和数学根底
深度学习需求一些编程和数学根底。以下是你应该学习的根本内容:
- 编程言语: Python 是深度学习的主要编程言语。学习 Python 的根本语法和常用库,如 NumPy、Pandas与Matplotlib。
- 线性代数: 深度学习中运用矩阵和向量进行核算,因此了解线性代数的根本概念是必要的,可是要求不高,一般本科及以上理工科学生已具有根底。
- 概率与计算: 深度学习中的一些概念和技术涉及概率和计算。了解根本的概率和计算概念将有助于你了解深度学习模型的作业原理。要求也不高,一般本科及以上理工科学生已具有根底。
3. 学习深度学习结构
深度学习结构能够协助你更轻松地构建、练习和布置深度学习模型。以下是一些常见的深度学习结构:
- TensorFlow2:由 Google 开发的开源结构,简略,模块封装比较好,简单上手,对新手比较友好。在工业界最重要的是模型落地,目前国内的大部分企业支持TensorFlow模型在线布置,不支持Pytorch。
- PyTorch:由 Facebook 开发的开源结构,前沿算法多为PyTorch版本,假如是你高校学生or研究人员,主张学这个。相对于TensorFlow,Pytorch在易用性上更有优势,愈加方便调试。
挑选一个深度学习结构并学习其根本用法和特性。结构的官方文档和在线教程是学习的好资源。
4. 学习经典模型和事例
学习一些经典的深度学习模型和事例将协助你更好地了解深度学习的应用和作业原理。以下是一些你能够开端学习的模型和事例:
-
卷积神经网络(Convolutional Neural Networks,CNN):常用于图画辨认和核算机视觉使命的常用模型,是一种专门用来处理具有相似网格结构的数据的神经网络。卷积网络在图画辨认,自然言语处理,灾祸性气候猜测、围棋人工智能等许多应用范畴都表现优异。卷积神经网络一般由3个部分构成:
卷积层
,池化层
,全衔接层
。简略来说,卷积层担任提取图画中的部分及全局特征;池化层用来大幅降低参数量级(降维);全衔接层用于处理“紧缩的图画信息”并输出成果。 -
循环神经网络(Recurrent Neural Networks,RNN):用于序列数据建模和自然言语处理使命的常用模型,传统神经网络的结构比较简略,一般为:输入层 – 隐藏层 – 输出层。
-
生成对抗网络(Generative Adversarial Networks,GAN):用于生成新的数据样本的模型。是近年来深度学习范畴的一个热门方向。GAN并不指代某一个详细的神经网络,而是指一类根据博弈思维而规划的神经网络。GAN由两个分别被称为生成器(Generator)和判别器(Discriminator)的神经网络组成。其中,生成器从某种噪声分布中随机采样作为输入,输出与练习会集实在样本十分相似的人工样本;判别器的输入则为实在样本或人工样本,其意图是将人工样本与实在样本尽可能地区分出来。生成器和判别器交替运转,彼此博弈,各自的能力都得到升。抱负情况下,经过满足次数的博弈之后,判别器无法判别给定样本的实在性,即对于一切样本都输出50%真,50%假的判别。此刻,生成器输出的人工样本现已逼真到使判别器无法分辨真假,中止博弈。这样就能够得到一个具有“假造”实在样本能力的生成器。
-
Transformer:用于自然言语处理使命,如机器翻译和文本生成。Transformer模型在2017年被google提出,直接根据 Self-Attention 结构,取代了之前NLP使命中常用的RNN神经网络结构,并在WMT2014 Englishto-German和WMT2014 English-to-French两个机器翻译使命上都取得了当时的SOTA。与RNN这类神经网络结构相比,Transformer一个巨大的优点是:模型在处理序列输入时,能够对整个序列输入进行并行核算,不需求依照时刻步循环递归处理输入序列。与seq2seq模型相似,Transformer模型结构中的左半部分为编码器(encoder),右半部分为解码器(decoder)。
学习这些模型的根本原理和完结办法,并测验在实践问题中应用它们。
下面将经过深度学习在 MNIST 手写数字的辨认上的应用带咱们入门深度学习
一、深度学习是什么
深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)范畴中一个新的研究方向,它被引入机器学习使其更接近于开始的方针——人工智能(AI, Artificial Intelligence)。–引自百度百科
深度学习(deep learning)是机器学习的分支,是一种以人工神经网络为架构,对材料进行表征学习的算法。–引自维基百科
“深度学习”这四个字拆解成两个词便是“深度”和“学习”。“学习”大概是咱们学生时代接触最频频的词,那时候的学习便是上课、做题,最终经过考试。假如更抽象一点描述,学习便是认知的进程,从不知道到已知的探索与考虑进程。最早的学习,1+1=2,想想咱们是怎么学习的?伸出一只手指,再伸出一只手指,数一数,两只手指那便是2。
这儿界说一个概念,输入和输出,输入便是已知的信息,输出便是由输入取得的认知的成果。咱们将一个从已有的信息,经过核算、判别和推理得到成果的认知进程统称为“学习”。
怎么让机器也能够进行学习呢?学术界为此提出了“神经网络”的概念。人脑中担任活动的根本单元是神经元,这些神经元互相衔接成一个被称为神经网络的庞大结构。由此,学术界仿照人脑“神经网络“建立一个人工神经网络(ANN),咱们一般也简称为神经网络。
将1+1=2用神经网络能够表明为如下结构。
咱们将“1”、“+”、“1”与“2”一起作为输入不断练习神经网络(不断告知机器1+1=2),在练习若干次后,神经网络将会学会“1+1=2”。相同的,咱们将1+2=3放入神经网络中去,不断进行练习,若干次后神经网络也将学会1+2=3。如此循环往复,咱们能够教会神经网络进行加法运算,从而能够让神经网络学会算术运算,咱们把这个进程称为深度学习。
深度学习在生活中的应用不仅仅局限于此,在主动驾驶、语音辨认、主动机器翻译、即时视觉翻译(摄影翻译)、方针辨认等等范畴也都有重要应用,例如:手机上的小爱同学、地铁口的人脸辨认…..
下面我将经过对 MNIST 手写数字的辨认进一步讲解深度学习,带领咱们体会一次完好的深度学习完结的全进程。
假设现在咱们手上很多张手写的数字图片,需求经过深度学习让机器“知道”这些图片上的数字,然后告知咱们每一张图片上的数字是多少。
那么咱们应该怎么完结呢?全体的思路如下:
- 咱们先拿出 6 万张图片给机器进行学习(需求告知机器每一个图片上写的是哪一个数字)。
- 在学习后,再拿出1万张机器没“见过”的图片给它进行辨认,让它告知咱们,图片上写的是哪一个数字。
- 重复上面的进程,直到机器能够知道手写的数字。
至此,完结便可完结手写数字辨认这一效果。
二、完结进程
程序履行过程:
- ① 学习6万张图片上的数字
- ② 用1万张图片测验机器的学习效果(这1万张不参加①的练习)
- ③ 重复①、②
运用的编译器为Jupyter Notebook,假如你不太熟,能够先看看前面的文章:【小白入门深度学习 | 第二篇:编译器的运用-Jupyter Notebook】
假如你对下面的代码不是很了解,没有关系的,后面的文章中我会对每个部分打开更详细的解释。现在你需求做的是:了解每一个模块完结的功用,从全体上掌握整份代码。
我的环境:
- 言语环境:Python3.10.11
- 编译器:Jupyter Notebook
- 深度学习结构:TensorFlow 2.4.1
- 显卡(GPU):NVIDIA GeForce RTX 4070
相关教程:
- 深度学习环境配置教程:【新手入门深度学习 | 1-1:配置深度学习环境】
- 一个深度学习小白需求的一切材料我都放这儿了:【新手入门深度学习 | 目录】
主张你学习本文之前先看看下面这篇入门文章,以便你能够更好的了解本文: 新手入门深度学习 | 2-1:图画数据建模流程示例
强烈主张咱们运用Jupyter Notebook
编译器打开源码,你接下来的操作将会十分快捷的!
- 假如你是一名深度学习小白能够先看看我这个专门为你写的专栏: 《新手入门深度学习》
- 假如你有一定根底,可是
缺乏实战经验
,可经过 《深度学习100例》 补齐根底 - 别的,咱们正在经过 365天深度学习练习营 抱团学习,营内为咱们供给体系的学习教案与专业的指导、十分杰出的学习气氛,欢迎你的加入
1. 准备数据
导入数据
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
# 加载数据集
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
# 输出数据形状
train_images.shape, test_images.shape
((60000, 28, 28), (10000, 28, 28))
准备好 6 万张带有标签的练习图片让机器进行学习。1 万张测验图片让机器进行辨认,测验其是否学会了。(60000, 28, 28)
表明为:60000 张 28*28 像素的图片。
这儿咱们用第三方库 matplotlib
输出手写数字图片,看看咱们的手写数字(数据集)是什么姿态的。
import matplotlib.pyplot as plt
# 设置窗口巨细为 20*12 单位英寸
plt.figure(figsize=(20,12))
for i in range(20):
# 设置子图行数为5,列数为10,i+1表明第几个子图
plt.subplot(5,10,i+1)
# 去掉坐标轴刻度
plt.xticks([])
plt.yticks([])
# 显现图片
plt.imshow(train_images[i], cmap=plt.cm.binary)
# 显现标签
plt.xlabel(train_labels[i])
plt.show()
调整图片格局
需求将图片调整为特定格局程序才能够进行学习
#调整数据到咱们需求的格局
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))
# 输出数据sahpe
train_images.shape,test_images.shape,train_labels.shape,test_labels.shape
((60000, 28, 28, 1), (10000, 28, 28, 1), (60000,), (10000,))
(60000, 28, 28, 1)
:表明为:60000张 28*28 的灰度图片,最终一个数字为1时,代表灰度图片;为3时代表彩色图片。
2. 构建神经网络模型
咱们将图片输入到网络,图片首先会将其数字化,紧接着经过卷积层提取图片上这个数字的特征,最终经过数字的特征判别这个数字是哪一个。结构图如下:
上面的结构图中,向咱们展现了五层结构,那么每一层详细是用来做什么的呢?
- 输入层:用于将数据输入到神经网络
- 卷积层:运用卷积核提取图片特征,卷积核相当于一个小型的“特征提取器”
- Flatten层:将多维的输入一维化,常用在卷积层到全衔接层的过渡
- 全衔接层:起到“特征提取器”的效果
- 输出层:输出成果
卷积核与全衔接层从某些方面上讲都有提取特征的效果,可是所采用的办法是不同的。
这部分为深度学习的核心内容,我将在第四部分(构建模型)重点向咱们进行更详细深化的讲解,现在咱们主要使命是跑通整个程序,从全体上了解一下深度学习是什么。
model = models.Sequential([ #
layers.Conv2D(32, (3, 3), input_shape=(28, 28, 1)), # 卷积层:提取图片特征
layers.Flatten(), # Flatten层:将二维图片紧缩为一维形式
layers.Dense(100), # 全衔接层:将特征进行进一步紧缩
layers.Dense(10) # 输出层:输出成果
])
# 打印网络结构
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
_________________________________________________________________
flatten (Flatten) (None, 21632) 0
_________________________________________________________________
dense (Dense) (None, 100) 2163300
_________________________________________________________________
dense_1 (Dense) (None, 10) 1010
=================================================================
Total params: 2,164,630
Trainable params: 2,164,630
Non-trainable params: 0
_________________________________________________________________
3. 编译模型
在这一步,咱们需求设置模型的优化器,丢失函数、点评函数:
- 优化器:协助模型更好的练习
- 丢失函数:用于估量猜测值与实在值的不一致程度
- 点评函数:点评模型的质量
model.compile(optimizer='adam', # adam是优化器的一种
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), # 丢失函数的一种核算办法
metrics=['accuracy']) #采用准确率来点评模型
4. 练习模型
将数据传入模型进行练习,传入的数据分为练习数据、验证数据两部分。练习数据(练习集)用于练习模型,验证数据(验证集)用于监测模型的效果。epochs
表明模型的学习轮数(次数)。
"""
train_images :练习数据的图片
train_labels :练习图片对应的标签
epochs :练习轮数
validation_data:验证数据
"""
history = model.fit(train_images, train_labels, epochs=3,
validation_data=(test_images, test_labels))
Epoch 1/3
1875/1875 [==============================] - 39s 20ms/step - loss: 32.1691 - accuracy: 0.8110 - val_loss: 1.1053 - val_accuracy: 0.8700
Epoch 2/3
1875/1875 [==============================] - 42s 22ms/step - loss: 0.8161 - accuracy: 0.8832 - val_loss: 0.5099 - val_accuracy: 0.8955
Epoch 3/3
1875/1875 [==============================] - 36s 19ms/step - loss: 0.4562 - accuracy: 0.8920 - val_loss: 0.4225 - val_accuracy: 0.8843
5. 猜测
# 打印咱们想要进行猜测的图片
plt.imshow(test_images[1])
<matplotlib.image.AxesImage at 0x14695a3cfd0>
输出测验会集第一张图片的猜测数组
pre = model.predict(test_images)
pre[1]
array([ 12.474585 , 1.1173537, 21.654232 , 16.206923 , -10.989567 ,
17.235504 , 19.404213 , -22.553476 , 13.221286 , -10.19972 ],
dtype=float32)
这组浮点数对应着0~9,最大的浮点数对应着的数字便是神经网络的猜测成果。
import numpy as np
# 输出猜测成果
pre_num = np.argmax(pre[1])
print("模型的猜测成果为:",pre_num)
模型的猜测成果为: 2
三、总结
咱们经过算术学习、MNIST手写数字辨认了解了什么是深度学习,也用TensorFlow2完结了MNIST手写数字辨认,从全体上了解了一个深度学习程序是什么姿态的,应该有哪些过程