深度学习入门教程第一篇(python)

文摘   2024-05-30 14:52   辽宁  
点击上方“进修编程”,选择“星标公众号

超级无敌干货,第一时间送达!!!

不到 5 分钟即可通过 6 个步骤构建基本的深度学习!

最近大家私信我让我出一个深度学习教程,那我就结合自己经验给大家来讲讲深度学习吧!

深度学习是机器学习的一个子集,它采用具有多个隐藏层的人工神经网络自动学习并从数据中提取高级、复杂的特征。

与通常需要手动特征工程的传统机器学习算法不同,深度学习模型可以直接从原始输入数据(例如图像、文本或音频)中学习强大的表示。

这些神经网络的深度及其级联的非线性变换层使得它们能够在大规模高维数据集中模拟复杂的模式和关系。

深度学习推动了计算机视觉、自然语言处理、语音识别甚至游戏等领域的重大突破,在许多任务上超越了人类的表现。

什么是深度学习?

深度学习是机器学习的一个强大的分支,近年来彻底改变了从计算机视觉到自然语言处理的许多领域。

从高层次来看,深度学习涉及训练具有多个隐藏层的人工神经网络,以端到端的方式学习数据表示(参见下图)。 

在上图中。

输入:表示输入神经网络的原始数据(例如图像、文本、传感器读数)。

隐藏层:这些是输入和输出之间的中间层。每个隐藏层由多个神经元(节点)组成,这些神经元学习从数据中提取相关特征。

输出:表示神经网络做出的最终预测或分类。

从图中可以看出,深度学习模型在训练过程中会自动从数据中学习数据表示(特征),而无需手动进行特征工程。多个隐藏层使网络能够捕获数据中的复杂模式和层次结构。

深度学习的一些关键概念包括:

1. 人工神经网络:深度学习的基本构建模块是人工神经网络,其灵感来自人类大脑的结构和功能。这些网络由相互连接的节点(神经元)组成,这些节点彼此之间传递信号。

2. 前馈网络:最简单、最广泛使用的神经网络架构之一是前馈网络,其中信息从输入层流经一个或多个隐藏层,到达输出层。

3. 激活函数:激活函数将非线性引入神经网络,使其能够学习数据中复杂的非线性关系。常见的激活函数包括 ReLU、sigmoid 和 tanh。

4. 反向传播:反向传播算法是深度学习模型的关键训练算法。它可以有效地计算损失函数相对于模型参数的梯度,从而允许使用基于梯度的优化技术(如随机梯度下降)来优化网络。

5. 卷积神经网络 (CNN):CNN 是一种特殊的神经网络,特别适合处理网格状数据,例如图像。它们通过使用卷积层和池化层来利用输入数据的空间结构。

6. 循环神经网络 (RNN):RNN 旨在处理顺序数据,例如文本或时间序列。它们保持在每个时间步骤更新的内部状态,从而能够捕获数据中的时间依赖性。

7. 正则化:使用dropout、L1/L2正则化和数据增强等技术来防止深度学习模型过度拟合并提高其泛化性能。

8. 优化算法:使用高级优化算法(例如 Adam 和 RMSProp)通过根据计算的梯度更新模型参数来有效地训练深度学习模型。

要开始深度学习,建议从探索一些流行的深度学习库和框架开始,例如 TensorFlow、PyTorch 或Keras。它们提供高级 API 和工具,使设计、训练和部署深度学习模型变得更加容易。

基本深度学习实现

我们可以使用 Keras 框架轻松实现深度学习模型。如果您想了解有关 Keras 的更多详细信息,请参阅以下简短说明:

深度学习中的 Keras 是什么?



Keras 是一个高级神经网络 API,运行在 TensorFlow、CNTK 或 Theano 之上。它旨在实现深度神经网络的快速实验,支持卷积网络和循环网络以及它们的组合。

深度学习背景下有关 Keras 的要点:

1. 抽象层:Keras 在 TensorFlow、CNTK 或 Theano 等较低级别的深度学习库之上提供了一个用户友好且直观的抽象层。这使开发人员可以专注于构建和训练模型,而无需陷入实现细节中。

2. 模型 API:Keras 提供两种主要模型 API:Sequential 模型和 Functional API。Sequential 模型是层的线性堆栈,而 Functional API 允许创建更复杂的模型架构。

3. 模块化:Keras 的设计高度模块化。它提供了各种预构建的层、优化器、损失函数和其他实用程序,可以轻松组合以创建复杂的深度学习模型。

4. 易于使用:Keras 以其简单易用而闻名,使其成为初学者和经验丰富的深度学习从业者的热门选择。简洁明了的语法允许快速进行原型设计和迭代。

5. 跨平台兼容性:Keras 可在多个深度学习后端上运行,包括 TensorFlow、CNTK 和 Theano。这允许在为给定项目选择最合适的后端时具有可移植性和灵活性。

6. 灵活且可扩展:Keras 不仅提供了高级抽象,还具有灵活性和可扩展性。开发人员可以轻松创建自定义层、模型和其他组件,以满足他们的特定需求。

7.快速实验:Keras 注重简单性和模块化,从而实现快速实验和迭代,这在构建和完善深度学习模型的迭代过程中至关重要。

1使用 Keras 框架将深度学习应用于随机生成的数据

1.1准备数据

  • 收集您的输入数据(X)和相应的目标/输出数据(y)。

  • 确保您的数据采用适当的格式(例如,numpy 数组)。

import numpy as np 
# 生成一些样本数据X_train = np.random.rand( 100 , 10 ) # 100 个样本,10 个特征y_train = np.random.randint( 2 , size=( 100 ,)) # 二元分类标签
# 生成样本测试数据X_test = np.random.rand( 20 , 10 ) # 20 个样本,10 个特征y_test = np.random.randint( 2 , size=( 20 ,)) # 二元分类标签
  • 我们首先为二元分类问题生成一些随机数据。我们有 100 个样本,每个样本有 10 个特征,以及相应的二元标签。

  • 我们还生成样本测试数据;X_test数据为一个 20x10 的 numpy 数组,表示 20 个样本,每个样本有 10 个特征,y_test数据为一个 20 元素的 numpy 数组,包含测试样本的二元分类标签。

1.2导入必要的库

# import librariesfrom keras.models import Sequentialfrom keras.layers import Dense, Activation
  • 导入必要的库。

1.3定义模型架构

以下三行是深度学习模型的基本部分。

# 定义模型model = Sequential() model.add(Dense(units= 8 ,activation= 'relu' ,input_shape=( 10 ,)))   # 具有 8 个神经元的隐藏层model.add(Dense(units= 1 ,activation= 'sigmoid' ))   # 具有 1 个神经元的输出层,用于二元分类

  • 使用 Keras 中的 API 定义深度学习模型Sequential。这是最简单的神经网络类型,其中各层按顺序堆叠。

  • 添加第一层,即隐藏层。该层有 8 个神经元,使用 ReLU(整流线性单元)激活函数。输入形状指定为(10,),与我们数据中的 10 个特征相匹配。

  • 添加第二层,即输出层。该层具有单个神经元,具有 S 型激活函数,适用于二元分类问题。

1.4编译模型


# 编译模型model.compile ( optimizer= 'adam' , loss= 'binary_crossentropy' , metrics=[ 'accuracy' ])
  • 通过指定优化器(Adam)、损失函数(二元交叉熵)和评估指标(准确度)来编译模型。

1.5训练模型

# 训练模型model.fit(X_train, y_train, epochs= 100 , batch_size= 32 , verbose= 0 )
  • 调用该fit()方法来训练模型。

  • 提供训练数据(X_train,y_train)和训练周期数。

  • 我们对模型进行了 100 个时期的训练,批次大小为 32。该verbose=0参数抑制了训练输出。

1.6评估模型

# evaluate the modelloss, accuracy = model.evaluate(X_test, y_test)print("Test Loss:", loss)print("Test Accuracy:", accuracy)
  • 损失函数是衡量模型在训练和评估期间表现的指标。训练期间的目标是尽量减少损失,因为这表明模型的预测更准确。评估步骤后报告的损失值代表测试数据集上的总体损失。

  • 准确率是衡量模型正确预测比例的指标。评估步骤后报告的准确率值代表测试数据集的总体准确率。准确率为 1.0(或 100%)表示模型对测试数据集中的所有样本都做出了正确的预测。

完整代码:

import numpy as npfrom keras.models import Sequentialfrom keras.layers import Dense
# Generate some sample dataX_train = np.random.rand(100, 10) # 100 samples, 10 featuresy_train = np.random.randint(2, size=(100,)) # Binary classification labels
# Define the modelmodel = Sequential()model.add(Dense(8, activation='relu', input_shape=(10,))) # Hidden layer with 8 neuronsmodel.add(Dense(1, activation='sigmoid')) # Output layer with 1 neuron for binary classification
# Compile the modelmodel.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Train the modelmodel.fit(X_train, y_train, epochs=100, batch_size=32, verbose=0)
# evaluate the modelloss, accuracy = model.evaluate(X_test, y_test)print("Test Loss:", loss)print("Test Accuracy:", accuracy)

模型图层排列说明:

示例输出:

1/1 [==============================] - 0s 121ms/step - loss: 0.7054 - accuracy: 0.5500Test Loss: 0.7053939700126648Test Accuracy: 0.550000011920929

预测

y_pred = model.predict(X_test)print(y_pred)# y_pred will be a NumPy array of shape (20,),# containing the predicted class labels (either 0 or 1) # for each of the 20 test samples.

示例输出:

1/1 [==============================] - 0s 19ms/step[[0.538452  ] [0.37946376] [0.444263  ] [0.5270121 ] [0.5934839 ] [0.5397232 ] [0.6944159 ] [0.5902402 ] [0.47912675] [0.51331776] [0.49360728] [0.52032197] [0.4843627 ] [0.55495685] [0.4487795 ] [0.59084755] [0.54808784] [0.54510885] [0.54986995] [0.53438747]]
欢迎点赞转发!本人五年项目开发经验接matlab、python程序设计!

—  —


进修编程
提升编程技能,学习编程技巧