【深度学习】深度学习初认识,及使用keras框架实践流程 含源码

深度学习初认识,及使用keras框架实践流程

  • 一、机器学习(浅层学习)
  • 二、深度学习
      • 2.1 深度学习简介
      • 2.2 机器学习与深度学习的区别
      • 2.3 神经网络的数据
      • 2.4 构建整个模型

一、机器学习(浅层学习)

【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第1张图片
朴素贝叶斯:假设输入数据是独立的
  ↓
支持向量机(SVM):两个不同类别找到决策边界
  ↓
决策树(弱测试模型)、随机森林(构建很多决策树,将输出集成在一起)
  ↓
梯度提升机:将弱测试模型(通常是决策树)集成,通过迭代解决弱点
(具体机器学习可回看个人博客:https://blog.csdn.net/qq_31779317/article/details/89207185)

二、深度学习

2.1 深度学习简介

学习:衡量结果是一种反馈信号,用于调节算法的调节步骤(loss->min)
表示:对数据进行变换,使其适合当前输入数据与任务
深度(depth)(连续的表示层,每层包含n个隐藏单元,如Dense(16))
包括分层表示学习(layered representations learning)
和层级表示学习(hierarchical representations learning);
这些分层通过神经网络的模型学习得到。
【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第2张图片

2.2 机器学习与深度学习的区别

机器学习(浅层学习)仅仅是数据简单变换(变换到一两个表示空间,如SVM、决策树),无法达到精度,因此手动为数据设计层;XGBoost库
而深度学习对此步骤自动化(问:是否能重复使用浅层学习设计层?答:其收益随着层数增加而迅速降低,因为为三层模型中最优的第一表示层并不是单层或双层模型中最优的第一表示层),并且模型可同时共同学习所有表示层(每一层的变化都需要同时考虑上下两层的需要,即一旦模型修改某个内部特征,依赖于该特征的其他特征都会相应地自动调节适应)。Kears库

2.3 神经网络的数据

  • 张量:数据容量。
     轴的个数(阶)(ndim):如矩阵有2个轴,3D张量3个轴
     样本轴:数据张量的第一个轴(0轴)
     批量轴:批量 (将数据拆成几个批量)的第一个轴(0轴))
     形状(shape):每个轴大小,如矩阵形状(2,2),3D张量(2,2,2)
     数据类型(dtype):float32、uint8、float64 等

  • 标量(0D张量):如1(ndim=0,shape=())

  • 向量(1D张量):如[1,2](ndim=1,shape=(2,))

  • 矩阵(2D张量):如[[1,2],[3,4]](ndim=2,shape=(2,2))
     eg:每个人年龄、收入,1000个人,则可储存在形状为(1000,2)的2D张量中

  • 3D张量:如[[[1,2],[3,4]],[[5,6],[7,8]]](ndim=3,shape=(2,2,2))
     eg:每条推文280个字符,每个字符来自字母表(128个字符组成),1000条推文,则可储存在形状为(1000,280,128)的
       3D张量中

  • 高维张量:
     - 4D张量:图像数据
       eg:图像由高度、宽度、颜色深度(125,125,3),1000张图像 组成的批量可储存在形状为(1000,125,125,3)中
     - 5D张量:视频数据
       eg:多张图像组成,每秒4帧的60秒视频(即共240帧)(尺寸 240*240),可储存在形状为(240,4,240,240,3)

  • 导数:由于函数是连续的,x的微小变化会导致y的微小变化
       f(x + epsilon_x) = y + epsilon_y(f在应用中是损失函数);
       在某个点,如epsilon_x足够小,则f近似斜率为a的线性函(epsilon_y=a * epsion_x)
       f(x + epsilon_x) = y + a * epsilon_x
    【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第3张图片
    斜率a则称为f在p点的导数(a为负,x微小变化导致f减小),这些f函数称为可微函数
     导数应用:由于需对大量系数(可能百万个+)进行测试该增大还是减小(若用一般方法,即输入>       到y然后比较,是很低效的),利用可微计算梯度
         (即输入数据 -> 分层求权重w、算法等张量运算 -> 测试得到损失函数f -> 使用梯度方法(即优化器)将w沿着梯度
         (张量运算的导数)反方向移动一点来降低f(如W0=W1-step*gradient(f)(W0)) -> 如此循环得到损失值最小化)

  • 激活函数(非线性运算):带有激活函数的全连接(Dense)层(线性运算,Dense层只包含两个线性运算:点积和加法:output=dot(w, input) + b))都实现各自的非线性张量运算
     - ‘relu’:实现output=relu(dot(w, input)+b)运算
     - ‘softmax’:二分类问题。输出一个标量,值为0~1之间,表示概率
     - ‘sigmoid’:多分类问题。输出在N个输出类别上的概率分布,其概率总和为1
       eg:一篇新闻在46个主题上的概率分布,概率最大为最有可能是该主题
     - ‘tanh,linear,LeakyReLU、PReLU’

  • 损失函数:用它衡量任务的精确度,训练中要将其最小化
    选择损失函数:交叉熵(用于衡量概率分布之间的距离)
           二分类问题:二元交叉熵(‘binary_crossentropy’)
           多分类问题:分类交叉熵(‘categorical_crossentropy’)
           回归问题:均方误差(MSE(‘mean squared error’))
           序列问题:联结主义时序分类

  • 优化器:根据损失函数所得,对网络进行更新,它执行的是随机梯度下降(SGD)
    的某个变体
    ‘rmsprop’

  • 监控指标:分类问题:精度(‘accuracy’)
         回归问题:平均绝对误差(‘mae’)

2.4 构建整个模型

【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第4张图片


附实例:使用keras搭建

  1. 加载数据
    1)keras(…)数据库中加载imdb(…)
    在这里插入图片描述
    2)自制数据, train_test_split划分训练集与测试集在这里插入图片描述
    在这里插入图片描述
eg:x_train,x_test, y_train, y_test = cross_validation.train_test_split(train_data,train_target,test_size=0.3, random_state=0)
# train_data,train_target :所有数据,test_size=0.3:按所有数据0.3的比例分给第二个值(x_test,y_test) 
  ramdom_state:这组随机分配的数据的编号,若0/不填:下次分配的每组都不一样,若1..:下组也填1,则两组随机分配的数据一样
  1. 处理数据
    1)数据归一化
    【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第5张图片
    2)数据标准化
    .to_categorical (one-hot编码)
    在这里插入图片描述
    【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第6张图片
.to_categorical(x,num) 把x按num个类别来分类

or 手动标准化
  【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第7张图片
  【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第8张图片

  1. 定义模型:Keras的建模(本章使用CNN算法,具体看个人后续博客)
向.Sequential() 模型传递各个层

在这里插入图片描述
  【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第9张图片
  【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第10张图片

.summary() 输出模型概括
  1. 编译模型:.compile()
1).compile(optimizer=’优化器’,loss=’损失函数’,metrics=[‘监控数值’])

在这里插入图片描述
2)也可使用自定义优化器
在这里插入图片描述

  1. 监控训练模型:.fit()
1)fit(train_data,train_targets,epoch=轮次,batch_size=每批训练数值,verbose=0(静默模式))

在这里插入图片描述
2)如果需要,进行数据提升

ImageDataGenerator()

在这里插入图片描述
  【深度学习】深度学习初认识,及使用keras框架实践流程 含源码_第11张图片

  1. 查看结果:.evaluate() 测试模型
.evaluate(x_test, y_test)

在这里插入图片描述

.save() 保存模型
 eg:.save(“../..model.h5”)

在这里插入图片描述

load_model() 加载模型
 eg:load_model(“../..model.h5”)

在这里插入图片描述

个人代码行已存储在github:https://github.com/onlyhyl/Artificial-Intelligence/tree/master/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0

你可能感兴趣的:(机器学习,深度学习,keras,机器学习)