Keras深度学习入门篇

news2024/11/24 13:09:09

Keras深度学习入门篇

第一部分:机器学习基础

一、机器学习的四个分支

  1. 监督学习
  • 分类
  • 回归
  • 序列生成,给定一张图像,预测描述图像的文字
  • 语法树预测,给定一个句子,预测其分解生成的语法树
  • 目标检测,给定一张图像,在图中特定目标的周围画上一个边界框
  • 图像分割,给定一张图像,在特定物体上画一个像素级的掩模
  1. 无监督学习
    常用于数据可视化、数据压缩、数据去噪或者更好的理解数据中的相关性
  • 降维
  • 聚类
  1. 自监督学习
    没有人工标注标签的监督学习,比如根据给定文本中前面的词来预测下一个词
  2. 强化学习
    接收环境信息,并学会选择使某种奖励最大化,如下围棋

二、张量(Tensor)是什么?

    张量是矩阵向任意维度的推广,是N维数组,能张能缩的变量。
张量的三个关键属性
1)维度、轴的个数、阶, ndim
2)形状, shape。
3)数据类型,dtype
通常,只有数字张量,没有字符张量,因为张量存储在预先分配的连续内存段中,而字符串的长度是可变的,无法用这种方式存储

  • 标量(0D 张量, scalar,也叫标量张量、零维张量)
>>> import numpy as np
>>> x = np.array(13)
>>> x
array(13)
>>> x.ndim
0
  • 向量(1D 张量, vector,一维张量)
>>> x = np.array([12, 3, 6, 14, 7])
>>> x
array([12, 3, 6, 14, 7])
>>> x.ndim
1
  • 矩阵(2D 张量,matrix)
>>> x = np.array([[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]])
>>> x.ndim
2

向量数据: 2D 张量,形状为 (samples, features)
比如,人口统计数据集,其中包括每个人的年龄、邮编和收入。每个人可以表示为包含 3 个值的向量,而整个数据集包含 100000 个人,因此可以存储在形状为 (100000, 3) 的 2D张量中

  • 3D 张量
>>> x = np.array([[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]]])
>>> x.ndim
3

时间序列数据或序列数据: 3D 张量,形状为 (samples, timesteps, features)
比如,股票价格数据集,每一分钟,我们将股票的当前价格、前一分钟的最高价格、最低价格保存为一个 3D 向量,整个交易日的数据为 (390, 3) 的 2D 张量(一个交易日有 390 分钟),250 天的数据则可以保存为 (250, 390, 3) 的 3D 张量

  • 4D 张量
    形状为 (samples, height, width, channels) 或 (samples, channels, height, width)
    比如,128张照片(256*256px)的彩色照片可以表示为(128, 256, 256, 3);

  • 5D 张量
    形状为 (samples, frames, height, width, channels) 或 (samples, frames, channels, height, width)
    比如,一个以每秒 4 帧采样的 60 秒 YouTube 视频片段,视频尺寸为 144× 256,共有 240 帧, 4 个这样的视频片段组成的批量将保存在形状为 (4, 240, 144, 256, 3)的张量中

三、张量的运算(参考矩阵运算)

  • 逐元素运算,如,加减法,one by one 对齐齐
  • 广播,维度不够,重复使用来凑,如,矩阵加一个常数中的常数
  • 点积,如,矩阵乘法
  • 变形,如转置

四、通用工作流程

    1. 定义问题

    有哪些数据可用? 你想要预测什么? 你是否需要收集更多数据或雇人为数据集手动添加标签?

    1. 找到能够可靠评估目标成功的方法

    对于简单任务,可以用预测精度,但很多情况都需要与领域相关的复杂指标

    1. 准备用于评估模型的验证过程

    训练集、验证集和测试集是必须定义的。验证集和测试集的标签不应该泄漏到训练数据中

    1. 数据向量化

    方法是将数据转换为向量并预处理,使其更容易被神经网络所处理(数据标准化等)

    1. 开发第一个模型

    它要打败基于常识的简单基准方法,从而表明机器学习能够解决你的问题。事实上并非总是如此!

    1. 通过调节超参数和添加正则化来逐步改进模型架构

    仅根据模型在验证集(不是测试集或训练集)上的性能来进行更改。请记住,你应该先让模型过拟合(从而找到比你的需求更大的模型容量),然后才开始添加正则化或降低模型尺寸

    1. 调节超参数时要小心验证集过拟合

    超参数可能会过于针对验证集而优化。我们保留一个单独的测试集,正是为了避免这个问题!

第二部分:深度学习基础

一、深度学习过程

在这里插入图片描述
想象有两张彩纸:一张红色,一张蓝色,将其中一张纸放在另一张上,揉成小球。这个皱巴巴的纸球就是你的输入数据,每张纸对应于分类问题中的一个类别。深度学习,就是通过一序列的的变换来一点点展开小球。
在这里插入图片描述

(1) 抽取训练样本 x 和对应目标y组成的数据批量
(2) 在x上运行网络,得到预测值y_pred
(3) 计算网络在这批数据上的损失,用于衡量y_pred和y之间的距离
(4) 计算损失相对于网络参数的梯度[一次反向传播(backward pass)]
(5) 将参数沿着梯度的反方向移动一点,比如 W -= step * gradient,从而使这批数据上的损失减小一点

二、层(level)

多个层组合成网络(或模型),常用的层有:

  • 全连接层( fully connected layer),也叫密集连接层(densely connected layer)、密集层(dense layer)
  • 循环层( recurrent layer,比如 Keras 的 LSTM 层)通常来处理形状为 (samples, timesteps, features) 的 3D 张量序列数据
  • 卷积层( Keras 的 Conv2D),通常用来处理保存在 4D 张量中的图像数据

多层组成的网络结构可分为:

  • 串行网络
  • 双分支( two-branch)网络
  • 多头( multihead)网络
  • Inception 模块
    选择正确的网络架构更像是一门艺术

三、损失函数( loss function)

用于学习的反馈信号,衡量在训练数据上的性能,在训练过程中需要将其最小化。它能够衡量当前任务是否已成功完成。

四、优化器( optimizer)

决定学习过程如何进行,决定如何基于损失函数对网络进行更新,它执行的是随机梯度下降( SGD)的某个变体。

  • 梯度
    梯度( gradient)是张量运算的导数,它是导数向多元函数导数的推广
y_pred = dot(W, x)
loss_value = loss(y_pred, y)
//如果输入数据x和y保持不变,那么这可以看作将W映射到损失值的函数
loss_value = f(W)

gradient(f)(W0)是函数f(W)在W0的导数
对于张量的函数 f(W),你可以通过将W向梯度的反方向移动来减小f(W),
比如 W1 = W0 - step * gradient(f)(W0),其中 step 是一个很小的比例因子。(注意,比例因子step是必需的,因为gradient(f)(W0) 只是W0附近曲率的近似值,不能离W0太远)于是还会有W2、W3、、直至收敛

  • 随机梯度下降可分为
    每次迭代取小批量的数据 —— 小批量SGD
    每次迭代取一个数据 —— 真SGD
    每一次迭代都在所有数据上运行 —— 批量SGD

  • SGD 还有多种变体
    优化点在于计算下一次权重更新时还考虑了上一次的权重更新,比如带动量的SGD、 Adagrad、RMSProp等变体。这些变体被称为优化方法( optimization method)或优化器( optimizer)。
    动量的概念源自物理学,动量解决了 SGD 的两个问题:收敛速度局部极小点。动量方法的实现过程是每一步移动小球,不仅要考虑当前的斜率值(加速度),还要考虑当前的速度(来自于之前的加速度)。在实践中指的是,更新参数 w 不仅要考虑当前的梯度值,还要考虑上一次的梯度值

  • 反向传播( backpropagation,有时也叫反式微分, reverse-mode differentiation)
    将链式法则应用于神经网络梯度值的计算,得到的算法叫作反向传播。反向传播从最终损失值开始,从最顶层反向作用至最底层,利用链式法则计算每个参数对损失值的贡献大小

五、监控指标(metric)

在训练和测试过程中需要监控的指标,常见的指标,比如准确率

  • Accuracy metrics

    • Accuracy
    • BinaryAccuracy
    • CategoricalAccuracy
    • TopKCategoricalAccuracy
    • SparseTopKCategoricalAccuracy
  • Probabilistic metrics

    • BinaryCrossentropy
    • CategoricalCrossentropy
    • SparseCategoricalCrossentropy
    • KLDivergence
    • Poisson
  • Regression metrics

    • MeanSquaredError
    • RootMeanSquaredError
    • MeanAbsoluteError
    • MeanAbsolutePercentageError
    • MeanSquaredLogarithmicError
    • CosineSimilarity
    • LogCoshError
  • Classification metrics based on True/False positives & negatives

    • AUC
    • Precision
    • Recall
    • TruePositives
    • TrueNegatives
    • FalsePositives
    • FalseNegatives
    • PrecisionAtRecall
    • SensitivityAtSpecificity
    • SpecificityAtSensitivity
  • Image segmentation metrics

    • MeanIoU
  • Hinge metrics for "maximum-margin"ification

    • Hinge
    • SquaredHinge
    • CategoricalHinge

第三部分:Keras基础

一、Keras是什么?

Keras 是一个模型级( model-level)的Python深度学习框架
keras可以方便地定义和训练几乎所有类型的深度学习模型,具有以下重要特性:

  • 相同的代码可以在CPU或GPU上无缝切换运行
  • 具有用户友好的API,便于快速开发深度学习模型的原型
  • 内置支持卷积网络(用于计算机视觉)、循环网络(用于序列处理)以及二者的任意
    组合
  • 支持任意网络架构:多输入或多输出模型、层共享、模型共享等。这也就是说, Keras
    能够构建任意深度学习模型,无论是生成式对抗网络还是神经图灵机

二、Keras和Tensorflow有什么关系?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qvacvrkd-1669885429458)(…/pic/deep-learning/keras.png)]

  • keras提供了一个高层次的构建模块
  • Keras 有三个后端实现方式: TensorFlow、Theano、微软认知工具包( CNTK, Microsoft cognitive toolkit)
  • NVIDIA CUDA 深度神经网络库( cuDNN),是 在 GPU 上,TensorFlow封装的一个高度优化的深度学习运算库
  • Eigen,是TensorFlow封装的一个低层次的张量运算库

三、Keras的开发步骤

  1. 定义训练数据:输入张量和目标张量
  2. 定义层组成的网络(或模型),将输入映射到目标
  3. 配置学习过程:选择优化器、损失函数、监控指标
  4. 调用模型的 fit 方法在训练数据上进行迭代
from keras import models
from keras import layers
from keras import optimizers

# 创建方式1
model = models.Sequential()
model.add(layers.Dense(32, activation='relu', input_shape=(784,)))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=optimizers.RMSprop(lr=0.001), 
				   loss='mse',
				metrics=['accuracy'])
model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)

# 创建方式2
# 下面是用函数式 API 定义的相同模型。
input_tensor = layers.Input(shape=(784,))
x = layers.Dense(32, activation='relu')(input_tensor)
output_tensor = layers.Dense(10, activation='softmax')(x)
model = models.Model(inputs=input_tensor, outputs=output_tensor)

第四部分:Quickly Start

一、四份常见的数据实践

Case场景数据数据结构(x.shape, y.shape)网络结构优化器损失函数监控指标
多分类MNIST手写字识别train: (60000, 28, 28) (60000,)
test: (10000, 28, 28) (10000,)
(512, activation=‘relu’, input_shape=(28 * 28,))
(10, activation=‘softmax’)
rmspropcategorical_crossentropyaccuracy
二分类电影评论IMDBtrain: (25000,) (25000,)
test: (25000,) (25000,)
(16, activation=‘relu’, input_shape=(10000,))
(16, activation=‘relu’)
(1, activation=‘sigmoid’)
rmsprop二元交叉熵binary_crossentropyaccuracy
多分类新闻分类train: (8982,) (8982,)
test: (2246,) (2246,)
(64, activation=‘relu’, input_shape=(10000,))
(64, activation=‘relu’)
(46, activation=‘softmax’)
rmsprop分类交叉熵categorical_crossentropyaccuracy
回归问题房价预测train: (404, 13) (404,)
test: (102, 13) (102,)
(64, activation=‘relu’, input_shape=(13,)
(64, activation=‘relu’)
(1)
rmsprop均方误差msemae

二、过拟合,泛化能力不强

  • 最优的解决办法是获取更多的训练数据
  • 减小网络大小
  • 添加权重正则化
  • 添加dropout正则化
    在训练过程中随机将该层的一些输出特征舍弃(设置为0),在层的输出值中引入噪声,打破不显著的偶然模式

三、欠拟合,模型能力不强

  • 添加更多的层
  • 让每一层更大
  • 训练更多的轮次

参考文章&图书

Keras文档
Keras中文文档
TensorFlow中文官网
《Python深度学习》

@ 学必求其心得,业必贵其专精

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

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

相关文章

CTFShow re3

先查一下,没包,64位 IDA看伪代码 再看循环 可以测出i5时v16为e560 而想让v160xffff,只需要ffff-e560就能得到v17[6] 1a9f 所以flag就是1a9f!! 等下为什么啊我没懂啊 回到前面 v19既没有赋值也没有输入&#xff0…

使用 Qt for Android 获取并利用手机传感器数据(1)开发环境省心搭建

现代手机拥有许多传感器,包括地磁、姿态、GPS、光照、温度、气压、摄像、声音、电磁等,完全就是一个高度集成的科学仪器。不夸张的说,一部手机加上一个外围的计算机和控制系统,做一个功能较强的自主移动机器人并不是不可能。但是&…

【wpf】 当用了数据模板之后如何获取控件的Item?

背景 我对一个treeview使用了数据模板 <TreeView.ItemTemplate> <!--子项的绑定--><HierarchicalDataTemplate DataType"{x:Type local_md:ToolsNodeItem}" ItemsSource"{Binding PathChildren}"><StackPanel Orie…

史上最全的Python包管理工具:Anaconda教程

事实上Anaconda 和 Jupyter notebook已成为数据分析的标准环境。 简单来说&#xff0c;Anaconda是包管理器和环境管理器&#xff0c;Jupyter notebook 可以将数据分析的代码、图像和文档全部组合到一个web文档中。 接下来我详细介绍下Anaconda&#xff0c;并在最后给出Jupyte…

[oeasy]python0022_框架标题的制作_banner_结尾字符串_end

结尾字符串(end) 回忆上次内容 ​python3​​ 的程序是一个 5.3M 的可执行文件 ​​python3​​ 里面存的是 cpu 指令可以执行的那种我们可以把指令对应的汇编找到 ​​objdump -d ~/python3 > python3.asm​​ 汇编语句是和当前机器架构的指令集相关的 ​​uname -a​​可…

【文件I/O】标准IO:库函数

标准IO&#xff1a;库函数一、基本概念1.文件类型2.标准I/O介绍3.流的概念4.文本流和二进制流5.流的缓冲类型6.标准I/O流&#xff08;stdin、stdout、stderr&#xff09;二、标准I/O函数1.fopen、fclose、errrno、strerror、perror&#xff08;打开、关闭文件&#xff0c;输出错…

[附源码]计算机毕业设计SpringBoot四川景区管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SpringBoot实用开发之热部署

目录 热部署 手动启动热部署 自动启动热部署 热部署范围布置 关闭热部署 热部署 能学到spring boot实用开发篇的相信都已经对IDEA和maven了如指掌了&#xff0c;我就基于这些前置知识来说一下热部署&#xff0c;其实也很简单。 手动启动热部署 首先可以在你的pom.xml文…

cubeIDE开发,I2C协议采集传感器数据(SHTC1、LTR-553ALS、BMP280、LSM6DSL、MMC3680KJ)

一、I2C总线协议 I2C&#xff08;Inter Integrated Circuit&#xff09;总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号线&#xff0c;一根是双向数据线 SDA&#xff08;serial data&#xff09;&#xff0c;另一根是双向时钟线…

EMQX Enterprise 4.4.11 发布:CRL/OCSP Stapling、Google Cloud Pub/Sub 集成、预定义 API 密钥

我们很高兴地告诉大家&#xff0c;EMQX Enterprise 4.4.11 版本正式发布&#xff01; 在此版本中&#xff0c;我们发布了 CRL 与 OCSP Stapling 为客户端提供更灵活的安全防护&#xff0c;新增了 Google Cloud Pub/Sub 集成帮助您通过 Google Cloud 各类服务发掘更多物联网数据…

[附源码]Python计算机毕业设计Django高校学生信息采集系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

2022爱分析· 信创厂商全景报告 | 爱分析报告

报告编委 张扬 爱分析联合创始人&首席分析师 孙文瑞 爱分析高级分析师 戴甜 爱分析分析师 王命航 爱分析分析师 目录 研究范围定义市场洞察厂商全景地图市场定义与厂商评估厂商入选列表 1.研究范围定义 1.1研究背景 近年来&#xff0c;受中美贸易战、科技战等内外部多重因…

java -数据结构,单向链表

顺序表的问题及思考&#xff1a; 顺序表中间/头部的插入删除&#xff0c;时间复杂度为O(N)增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗。增容一般是呈2倍的增长&#xff0c;势必会有一定的空间浪费。例如当前容量为100&#xff0c;满了以后…

HTTP和HTTPS协议(必备知识)

文章目录1、什么是HTTP协议2、HTTP协议格式<1>HTTP请求方法<2>HTTP的状态码3、HTTP是不保存状态的协议<1>使用Cookie的状态管理3、HTTPS<1>加密方式<2>理解HTTPS加密过程1、什么是HTTP协议 HTTP协议常被称为超文本传输协议&#xff0c;HTTP协议…

【网安神器篇】——mimikatz系统取证工具

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…

C语言第十二课(中):操作符详解【单目、关系、逻辑、条件操作符】

目录 前言&#xff1a; 一、单目操作符&#xff01;、-、、&、sizeof、~、--、、*、(类型)&#xff1a; 1.逻辑反操作&#xff01;&#xff1a; 2.正负值操作符-、&#xff1a; 3.取地址操作符 &与解引用操作符 *&#xff1a; ①.取地址操作符&&#xff1a; ②.解…

数据结构与算法基础(王卓)(3)

前置&#xff1a; //#include<iostream> #include<stdlib.h>//存放exit#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define MAXlength 100 //初始大小为100&…

小程序开发音视频问题汇总及解决方案

目录 问题一&#xff1a;开发音视频&#xff0c;必用的两个小程序组件live-player和live-pusher&#xff0c;他们做什么用的&#xff0c;怎么才能使用&#xff1f; 问题二&#xff1a;一个页面只能插入一个 问题三&#xff1a;真机调试图片预览及视频全屏无反应 问题四&am…

图库 | 图存储的基础概念

前言 图存储的全称叫图数据库存储引擎或图数据库存储层&#xff08;组件&#xff09;。在功能层面&#xff0c;它负责图数据库或图数仓的数据的持久化存储。因为存储距离用户层的应用较图计算更为遥远&#xff0c;过往很少有论著会专门讲述图存储环节&#xff0c;但笔者要说的…

Python搭建虚拟环境

一、简介 1.特点&#xff1a; python的虚拟环境类似于虚拟机&#xff0c;能够创建一个独立的python运行环境&#xff0c; 虚拟环境中的安装的第三方依赖包和全局环境中的包相互独立。 2.环境 1. python3.3以上版本(自带venv模块&#xff0c;若已安装则可直接改变环境变量来…