Deep Learning相关概念介绍

news2024/9/23 13:28:25

工具:

  • Anaconda: anaconda.com/products/individual。我理解是一个基于Python的AI程序开发环境,其作用类似于google notebook。区别是google notebook是在网页上,而Anaconda一般是安装在自己的服务器上。
  • Jupyter Notebooks

Anaconda激活深度学习的命令:

  • conda activate deeplearning

介绍

Deep learning介绍

  • 属于machine learning的范畴
  • 3层及以上的神经网络
  • 模拟人类处理数据和做出决策的行为
  • 在过去几年指数级增长
  • 以大规模数据处理和推理的进步为动力(GPUs)

线性回归 (Linear Regression)

   y=ax+b,  a is slope(斜率), b is intercept(截距)

逻辑回归(Logistic Regression)

   y = f(ax+b), f是激活函数(Activation Function)

Perceptron(感知机)

  • 是一个用于二分类问题的有监督学习的算法
  • 类似于人脑中的一个细胞
  • 对应于神经网络中的一个结点
  • 基于逻辑回归

   感知机公式:

     y=f(w_{1}x_{1}+w_{2}x_{2}+...w_{n}x_{n}+b)

    w称为权重,b称为偏好,f为激活函数

人工神经网络(Artificial Neural  Network, ANN)

  • 感知机在神经网络中称为结点
  • 按照层组织所有结点
  • 每个结点均有权重,偏好以及激活函数
  • 每个结点和下一层的所有结点相连
  • 输入层,隐藏层,输出层

ANN结构

向量:ANN中的数据一般会用向量表示

采样,目标,特性:ANN中的一组数据称为采样,这个概念应该来自统计学。采样中,通常有一维数据是我们关注的最终结果,这一维称为目标。其余维度的数据称为特性。即可以理解为:在一组采样中,多个特性数据对应一个目标数据。

输入层

  输入预处理

  特性需要被转化为数字表示

输出类型所需的处理
数字的中心化和定标(centering and scaling)
类别的整数编码(integer encoding),独热编码(one-hot encoding)
文本TF-IDF(词频-逆文本频率),嵌入(embedding)
图像像素-RGB表示(Pixels-RGB representation)
语音数字的时间序列(Time series of numbers)
  • 中心化:取某个特性的所有数据的平均值作为中心,这个特性的所有数据减去这个平均值
  • 定标:特性的所有数据按照一定的比例缩放,使每个特性最终的数值都在统一的范围内。这是为了避免不同特性之间的基数本身存在差异,一起处理时会引入偏好

隐藏层

   输入层和输出层中间的层都称为隐藏层

权重和偏好

  • ANN中可以训练的参数

   计算权重和偏好的个数:如果前一层的结点数为A,当前层的结点数为B,则这两层之间的权重个数为:A * B;偏好个数为B。

激活函数

   流行的激活函数  

激活函数

输出

Sigmoid0~1
Tanh-1~1
Rectified Linear Unit(ReLU)0当x <0; 否则为x
Softmax概率向量,其和为1

输出层

训练神经网络

初始化

   数据被分为训练(Training),测试(Test),验证(Validation)三类

   权重(weights)和偏好(bias)

   方法:

  • 零初始化:初始化为全零
  • 随机初始化

前向传播(forward propagation)

   预测值(Predication, y hat)是通过前向传播得到的

测量精确度和误差

    损失和成本函数

  • Loss Function: 测量单个采样的预测误差
  • Cost Function: 测量一个采样集合的误差

   成本函数

成本函数应用
均方差(MSE)回归
根均方差(RMSE)回归
二进制交叉熵(Binary Cross Entropy)二分类
范畴交叉熵(Categorical Cross Entropy)多分类

    怎样测量精确度

  • 使用一个成本函数比较预测值和期望值之间的误差
  • 基于误差使用反向传播调整权重

反向传播(Back Propagation)

   反向传播怎样工作

  • 和前向传播方向相反,从输出层开始
  • 基于发现的误差,计算一个delta
  • 将这个delta应用于误差和偏好上
  • 基于新的误差和偏好,会得到一个新的误差,然后重复前面的步骤

梯度下降(Gradient Descent)

在前面的模型中,通过不断地循环,使得权重和偏好被不断地优化,误差不断地减小,这个过程称为梯度下降。即不断重复下面的步骤:

  • 前向传播
  • 误差估计
  • 反向传播
  • 调整权重和偏好

会存在误差停止减少的情况,此时会有一些额外的超参数(Hyper Parameters)用于这种情况,超参数也可以用于加速或减速这个过程。

批和期(Batches and  Epoch)

什么是批(Batch)

  • 单次传递给ANN的一个采样集合
  • 训练数据集可以分为一个或多个“批”
  • 每一“批”都会有一次成本估计和参数更新,即对于下一批采样数据,会使用更新后的参数

批的大小

  • 当批的大小等于训练集大小时,称为批梯度下降(Batch Gradient Decrease)
  • 当批的大小小于训练集大小时,称为迷你批梯度下降(Mini-batch Gradient Decrease)
  • 典型的批的大小有32,64,128等等

什么是期

  • 对于整个训练集,需要发送给ANN的次数
  • 每一期包含一个或多个批
  • 对于同一个批,可能在不同的期中发送给ANN,但每次都会使用当前更新后的权重
  • 当所有期完成后,训练过程结束
  • 期的大小越大,则精确度越高,但训练时间会越久

注意:批的大小和期的大小都是超参数,可以通过调整来优化训练过程

例子:训练集中总共有1000个采样,批的大小为128,期的大小为50。请问期是多少?训练过程总共循环几次?

期: ceiling(1000/128) = 8
循环次数:8 * 50 = 400

验证和测试(Validation and Testing)

  • 验证数据和测试数据通常都来源于原始数据,是从原始数据集中划分出来的。推荐的训练、验证、测试集数据量比例为8:1:1。
  • 验证数据集用于训练过程,测试数据集用于最后的模型评价
  • 在每个Epoch结束后,会将模型应用于验证数据集中,用于确保模型不会出现太大的偏差,调整模型(称为Fine-tuning)以待下一个Epoch的学习
  • 在所有Epoch和Fine-tuning结束后,会将模型应用于测试数据集,用于评价模型

一个ANN模型

ANN模型是由一些参数表示的:

  • 权重
  • 偏好

ANN模型也由一些超参数表示的:

  • 层数,每层的结点数,激活函数
  • 成本函数,学习速率,优化因子
  • 批的大小,期

预测过程

  • 预处理和输入准备
  • 将输入传给第一层
    • 使用当前的权重,偏好和激活函数计算Y
    • 传递给下一层
  • 重复以上过程直到输出层
  • 过程后处理输出,用于预测

重用已有的网络架构

大多数神经网络(NN)并非是从零开始创建的(created from scratch)。设计一个具有合适的层数和结点的NN是一个乏味的、重复的、耗时的过程。社区共享了很多知识和经验,可以拿来使用。

流行的网络架构:

  • LeNet5:用于文本和手写识别
  • AlexNet:卷积神经网络(Conventional Neural Network,CNN),用于图像识别
  • ResNet: 也是CNN,用于图像识别,克服了一些传统CNN的限制
  • VGG: 另一个流行的CNN
  • LSTM:循环神经网络(Recurrent Neural Network),用于预测文本序列
  • Transformers:是一个最新的架构,彻底改变了原生AI(generative AI)

使用可用的开源模型

开源模型

  • 在开源社区共享,模型已经经过了充分地训练,包括参数和超参数
  • Hugging face/ Github
  • 很方便地下载
  • 通常已经集成在了PyTorch/ TensorFlow中

选择开源模型

  • 理解其目的和原始的使用场景
  • 了解其训练基于的数据。数据可能是公共的;也可能是私有的、会涉及一些法律问题。
  • 探索模型的适用范围和用法(Popularity and Usage)
  • 复查许可(Licensing)和相关需求
  • 下载模型
  • 在你的使用场景中测试这个模型

深度学习示例

示例项目:Iris data set

Iris flower数据集是一个经典的用于分类问题的数据集,详见以下链接:

https://en.wikipedia.org/wiki/Iris_flower_data_set

由于sklearn提供了load_iris(),因此我们使用这个方法直接导入Iris数据集。

运行环境:google notebook(用法见初识Google Colab Jupyter Notebook),程序如下:

1. 加载数据和预处理

import pandas as pd
import os
import tensorflow as tf
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris

#Number of data to show
NB_TO_SHOW=5

# Use load_iris in sklearn to load Iris Flower Data Set directly
iris_data = load_iris()
print("\nLoaded Data:\n-------------------------------")
print(iris_data.data.shape)

#from sklearn import preprocessing
#label_encoder = preprocessing.LabelEncoder()

# Separate feature and target variables
X_data = iris_data.data
Y_data = iris_data.target
print("\nFeatures before scaling:\n-------------------------------")
print(X_data[0:NB_TO_SHOW])
print("\nTarget before scaling:\n-------------------------------")
print(Y_data[0:NB_TO_SHOW])

# Create a scaler model that is fit on the input data
scaler = StandardScaler().fit(X_data)

# Scale the numeric feature variables
X_data = scaler.transform(X_data)

# Convert target variable as a one-hot-encoding array
Y_data = tf.keras.utils.to_categorical(Y_data, 3)

print("\nFeatures after scaling:\n-------------------------------")
print(X_data[0:NB_TO_SHOW])
print("\nTarget after scaling:\n-------------------------------")
print(Y_data[0:NB_TO_SHOW])

# Split the training and test data
X_train,X_test,Y_train,Y_test = train_test_split(X_data, Y_data, test_size=0.10)
print(X_train.shape, Y_train.shape, X_test.shape, Y_test.shape)

2. 创建模型

from tensorflow import keras

NB_CLASSES=3

#Create a sequential model in Keras
model = keras.models.Sequential()

#Add the first hidden layer
model.add(keras.layers.Dense(128,                    #Number of nodes
                             input_shape=(4,),       #Number of input variables
                             name="Hidden-Layer-1",  #Logical name
                             activation='relu'))     #activation function

#Add the second hidden layer
model.add(keras.layers.Dense(128,                    #Number of nodes
                             name="Hidden-Layer-2",  #Logical name
                             activation='relu'))     #activation function

#Add an output layer with softmax
model.add(keras.layers.Dense(NB_CLASSES,             #Number of nodes
                             name="Output-Layer",    #Logical name
                             activation='softmax'))  #activation function

#Compile the model with loss & metrics
model.compile(loss='categorical_crossentropy',
              metrics=['accuracy'])

#Print the model meta-data
model.summary()

3. 训练模型

# Make it verbose so we can see the progress
VERBOSE=1

# Setup Hyper Parameters for training

# Set Batch size
BATCH_SIZE=16
# Set number of epochs
EPOCHS=10
# Set validataion split. 20% of the training data will be used for validation 
# after each epoch
VALIDATION_SPLIT=0.2

print("\nTraining Progress:\n-------------------------------")

# Fit the model.
history=model.fit(X_train,
                  Y_train,
                  batch_size=BATCH_SIZE,
                  epochs=EPOCHS,
                  verbose=VERBOSE,
                  validation_split=VALIDATION_SPLIT)

print("\nAccuracy during Training:\n-------------------------------")
import matplotlib.pyplot as plt

# Plot accuracy of the model after each epoch
pd.DataFrame(history.history)["accuracy"].plot(figsize=(8,5))
plt.title("Accuracy improvements with Epoch")
plt.show()

# Evaluate the model
print("\nEvalulation against Test Dataset:\n-------------------------------")
model.evaluate(X_test, Y_test)

4. 保存模型

使用google notebook,不需要保存模型;如果自己安装Jupyter Notebook,可以保存这个模型到本地。

# Saveing a model
#model.save("iris_save")

# Loading a Model
#loaded_model = keras.models.load_model("iris_save")

# Print Model Summary
#loaded_model.summary()

5. 使用训练好的模型预测新数据

# Raw prediction data
prediction_input=[[6.6, 3, 4.4, 1.4]]

#Scale prediction data with the same scaling model
scaled_input = scaler.transform(prediction_input)

# Get raw prediction probabilities
raw_prediction = model.predict(scaled_input)
print("Raw Prediction Output (Probabilities): ", raw_prediction)

# Find prediction
prediction = np.argmax(raw_prediction)
#print("Prediction is ", label_encoder.inverse_transform([prediction]))
print("Prediction is: ", iris_data.target_names[prediction])

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

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

相关文章

Linux - 安装 maven(详细教程)

目录 一、下载二、安装三、配置环境变量四、镜像资源配置 一、下载 官网&#xff1a;https://maven.apache.org/download.cgi 打开 maven 的官网下载页面&#xff0c;点击 bin.tar.gz 文件链接 即可下载最新版本的 maven 如果想要下载旧版本的 meven&#xff0c;则点击 Maven…

JavaScript中call和apply函数方法

看下下面这个代码示例&#xff1a; javascript const lufthansa {airline: Lufthansa,iataCode: LH,bookings: [],book(flightNum, name) {console.log(${name} booked a seat on ${this.airline} flight ${this.iataCode}${flightNum});}, };lufthansa.book(239, ‘IT知识一…

python实现有限域GF(2^8)上的乘法运算

有限域GF(2^8)上的乘法运算可以看成多项式的乘法 5e转换成二进制为0101 1110&#xff0c;对应的多项式为x^6x^4x^3x^2x 3f转换成二进制为0011 1111&#xff0c;对应的多项式为x^5x^4x^3x^2x1 将这两个多项式相乘再模多项式x^8x^4x^3x1得到结果为1110 0101&#xff0c;转换为…

【扩散模型】生成模型中的Residual Self-Attention UNet 以及 DDPM的pytorch代码

参考&#xff1a; [1] https://github.com/xiaohu2015/nngen/blob/main/models/diffusion_models/ddpm_cifar10.ipynb [2] https://www.bilibili.com/video/BV1we4y1H7gG/?spm_id_from333.337.search-card.all.click&vd_source9e9b4b6471a6e98c3e756ce7f41eb134 TOC 1 UNe…

Vue3+vite+vant UI移动端项目创建保姆级教程

项目创建 创建Vue3项目 npm create vue@latestcd shoujihao-h5npm installnpm run formatnpm run dev修改端口 vue3 默认端口5173 想要把端口号修改为8088,在vite.config.js中写入 server: {port: 8088,//端口号host: true,//ip地址 或 0.0.0.0 或 "loaclhost"o…

OSCP靶场--Walla

OSCP靶场–Walla 考点(1.hydra http基本认证爆破&#xff1a; 2.sudo -l&#xff1a;python导入外部模块提权 3.Linux内核提权&#xff1a;cve-2021-4034) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.181.97 --min-rate 2000 Starting N…

浅谈二进制漏洞研究与病毒研究

安全方向 最近一些朋友找到我&#xff0c;说想学习一下漏洞和病毒研究&#xff0c;其实很多安全研究人员想入门二进制安全&#xff0c;但关于二进制安全&#xff0c;很多新手朋友对这个方向不太了解&#xff0c;也不知道该怎么去深入的研究学习二进制安全&#xff0c;如何才能…

装修必看干货|入户玄关设计进门就是客厅应该怎么设计?福州中宅装饰,福州装修

入户玄关设计在进门就是客厅的情况下&#xff0c;想要拥有单独的玄关空间&#xff0c;以下是五点设计建议&#xff1a; ①隔断屏风 使用隔断屏风是传统而常见的一种空间分割方法。可以选用木制、金属或玻璃等材质的屏风&#xff0c;根据需要进行灵活搭配和定制。 屏风的款式和…

项目可行性方案:人脸识别实现无感考勤的项目技术可行性方案

目 录 1.引言 1.1编写目的 1.2背景 2.可行性研究的前提 2.1要求 2.2目标 3.对现有系统的分析 3.1系统改进示意图 3.2改进之处 3.3技术条件方面的可行性 4.结论 1.引言 1.1编写目的 本报告编写的目的是探究学校里对教室和办公室内教师的人脸进行识别从而…

Kubernetes-1

学习Kubernetes第一天 k8s-11、什么是Kubernetes2、配置Kubernetes2.1、准备三台全新的虚拟机2.2、关闭防火墙和SElinux2.3、修改主机名2.4、升级操作系统(三台一起操作)2.5、配置主机hosts文件&#xff0c;相互之间通过主机名互相访问2.6、配置master和node之间的免密通道2.7、…

Linux虚拟文件系统管理技术

Linux虚拟文件系统管理技术 1. 虚拟文件系统的组成1.1 虚拟文件系统架构1.2 超级块(super block)1.3 索引节点(inode)1.3.1 inode怎样生成的?1.3.2 inode和文件的关系? 1.4 目录项(dentry)1.5 文件对象(file) 2. 进程与文件系统的关系3. 磁盘与文件系统的关系4. 常见的文件系…

STM32 (4) GPIO(1)

1.芯片的引脚分布 2.普通IO引脚的命名规则 3.IO复用 IO引脚身兼数职的现象叫做IO复用&#xff0c;可以使芯片拥有更多的功能&#xff0c;例如&#xff1a; PA9和PA10既可以用于GPIO的引脚&#xff0c;也可以用于串口或定时器的引脚 通用&#xff1a;CPU直接控制IO引脚的输入输…

了解游戏中的数据同步

目录 数据同步 通过比较来看状态同步和帧同步 状态同步 帧同步 帧同步实现需要的条件 两者相比较 数据同步 在联机游戏中&#xff0c;我的操作和数据要同步给同一局游戏中其他所有玩家&#xff0c;其他玩家的操作和数据也会同步给我。这叫做数据同步&#xff0c;目前数据…

C# Onnx segment-anything 分割万物 一键抠图

目录 介绍 效果 模型信息 sam_vit_b_decoder.onnx sam_vit_b_encoder.onnx 项目 代码 下载 C# Onnx segment-anything 分割万物 一键抠图 介绍 github地址&#xff1a;https://github.com/facebookresearch/segment-anything The repository provides code for runn…

UDP协议和TCP协议详解

文章目录 应用层自定义协议 传输层udp协议TCP协议1.确认应答2.超时重传3.连接管理建立连接, 三次握手断开连接, 四次挥手tcp的状态 4.滑动窗口5.流量控制6.拥塞控制7.延时应答8.携带应答9.面向字节流10.异常情况 应用层 自定义协议 客户端和服务器之间往往要进行交互的是“结构…

115.龙芯2k1000-pmon(14)- pmon编程优化

通过上面的分析&#xff0c;发现&#xff0c;其实gzrom-dtb.bin其实有很多空白区域&#xff0c;而且空白区域填充的都是0&#xff0c;这对flash来说并不友好&#xff0c;能否把填充的位置改为ff呢&#xff0c;这样编程的速度也会加快&#xff0c;对flash来说也是一种保护呢。 …

#QT(DEMO)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;打印"hello wolrd" 3.记录 &#xff08;1&#xff09;创建一个新工程&#xff1a; 新建好一个工程存放文件夹&#xff08;路径不能有中文&#xff09;,然后按下图配置 &#xff08;2&#xff09;点击widgets.ui拖入以…

活动报名|AutoMQ x 阿里云云原生创新论坛(2024.03.09)见证“新一代云原生 Kafka ”重磅发布!

新一年&#xff0c; AutoMQ 首场线下活动重磅来袭&#xff01;2024年3月9日&#xff0c;由 AutoMQ 与阿里云联合举办的云原生创新论坛将于杭州与大家见面&#xff0c;双方联合重磅发布新一代云原生 Kafka ——AutoMQ On-Prem 版本 &#xff01;现场将会分享如何通过云原生和存算…

美摄科技实时语音数字人解决方案

随着科技的飞速发展&#xff0c;数字人技术已经逐渐渗透到我们生活的各个角落。作为数字人技术的先驱者&#xff0c;美摄科技凭借其卓越的实时语音数字人解决方案&#xff0c;正引领着企业步入一个全新的交互时代。 美摄科技的实时语音数字人解决方案&#xff0c;是基于语音和…

【JavaEE进阶】 Linux常用命令

文章目录 &#x1f343;前言&#x1f334;ls 与 pwd&#x1f6a9;ls&#x1f6a9;pwd &#x1f38d;cd&#x1f6a9;认识Linux目录结构 &#x1f340;touch与cat&#x1f6a9;touch&#x1f6a9;cat &#x1f332;mkdir与rm&#x1f6a9;mkdir&#x1f6a9;rm &#x1f384;cp与…