机器学习实战 | 深度学习初级项目学习和总结

简介

准备写个系列博客介绍机器学习实战中的部分公开项目。首先从初级项目开始。


本文对机器学习实战三个初级项目中涉及的神经网络算法以及基于Keras的神经网络语法进行总结。

三个初级项目分别为:
第一篇:机器学习实战 | emojify 使用Python创建自己的表情符号(深度学习初级)
第二篇:机器学习实战 | MNIST手写数字分类项目(深度学习初级)
第三篇:机器学习实战 | 股票价格预测项目(深度学习初级)

神经网络类型和用法总结

这三个初级项目中分别用了卷积神经网络CNN和长短期记忆神经网络LSTM。此外,为了更好的解释LSTM神经网络,这里还给出了LSTM网络的基础——循环神经网络RNN的介绍。
因此本文共介绍CNN、RNN和LSTM这三种神经网络的特点和用法。

参考网址:

  1. 四种基本的神经网络架构
  2. 机器学习-常用八大神经网络框架
  3. 机器学习系列 | ML需要了解的十大神经网络架构
  4. 深度学习-常见神经网络

1. 卷积神经网络CNN

特点

卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。

在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。

在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。
卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。
共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。

子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。

结构

在这里插入图片描述
当输入图像被送入卷积神经网络后,先后要循环通过卷积层、激励层和池化层,最后从全连接层输出分类结果。除了卷积层,卷积网络通常也以池化层(pooling layer)为特色。

  • 输入层
    输入数据,通常会做一些数据处理,例如去均值、归一化等。

  • 卷积层
    卷积层是卷积神经网络的核心部分,参数是一个或多个随机初始化的核函数,核函数就像按照灯一样,逐行逐列扫描输入图像。
    扫描完毕后计算出的所有卷积结果可以构成一个矩阵,这个新的矩阵叫特征映射(feature map)。卷积层得到的特征一般会送到激励层处理。

  • 激励层
    主要作用是将卷积层的结果做非线性映射。
    常见的激励层函数有sigmoid、tanh、Relu、Leaky Relu、ELU、Maxout。

  • 池化层
    在连续的卷基层和激励层中间,用于压缩数据和参数的量,用于减少过拟合。
    简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
    常见的最大池化做法就是将特征映射划分为若干个矩形区域,挑选每个区域中的最大值。

  • 全连接层
    两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部,输出分类结果。

卷积神经网络的作用是逐层提取输入对象的特征,训练采用的也是反向传播的方法,参数的不断更新能够提升图像特征提取的精度。

用处

卷积神经网络主要是用于图像处理,也可以用于其他数据类型的处理,如音频文件。

2. 循环神经网络RNN

在这里插入图片描述

特点

卷积神经网络具有空间上的参数共享的特性,可以让同样的核函数应用在图像的不同区域。输出时只考虑前一个输入的影响,而不考虑不同时刻输入的影响。

把参数共享调整到时间维度上,让神经网络使用相同权重系数来处理具有先后顺序的数据,得到的就是循环神经网络。

循环神经网络(Recurrent Neural Network),也可以表示递归神经网络(Recursive Neural Network)。

  • 时间
    循环神经网络引入了“时间”的维度,适用于处理时间序列类型的数据。
    循环神经网络就是将长度不定的输入分割为等长的小块,再使用相同的权重系统进行处理,从而实现对变长输入的计算与处理。

  • 记忆
    循环神经网络t时刻的输出取决于当前时刻的输入,也取决于网络前一时刻t-1甚至更早的输出。
    从这个意义上来讲,循环神经网络引入了反馈机制,因而具有了记忆功能。
    记忆功能使循环神经网络能够提取来自序列自身的信息,输入序列的内部信息存储在神经网络的隐藏层中,并随着时间的推移在隐藏层中流转。

结构

RNN的基本结构包括输入层、隐藏层和输出层。
隐藏层的状态会随时间步更新,并作为下一时间的输入之一。
这种循环连接使得RNN具有记忆能力,能够捕捉序列中数据的依赖关系。

用处

RNN是一种专门处理序列数据的神经网络结构,它的特点是具有循环连接,能够在网络中传递信息,从而捕捉序列中的时序依赖关系。

RNN可用于处理文本数据、时间序列数据、语音信号等。

3. 长短期记忆网络LSTM

特点

RNN通过在时间共享参数引入了记特性,从而可以将先前的信息应用在当前的任务上,可是这种记忆通常只有有限的深度。

长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的。

LSTM可以像人的记忆中选择性地记住一些时间间隔更久远的信息,它会根据组成元素的特性,来判断不同信息是被遗忘或被记住继续传递下去。
LSTM就是实现长期记忆用的,实现任意长度的记忆。要求模型具备对信息价值的判断能力,结合自身确定哪些信息应该保存,哪些信息该舍弃,元还要能决定哪一部分记忆需要立刻使用。

结构

LSTM通常由下面4个模块组成:
在这里插入图片描述

  • 记忆细胞(memory cell)
    作用是存储数值或状态,存储的时限可以是长期也可以是短期

  • 输入门(input gate)
    决定哪些信息在记忆细胞中存储

  • 遗忘门(forget gate)
    决定哪些信息从记忆细胞中丢弃

  • 输出门(output gate)
    决定哪些信息从记忆细胞中输出

用处

由于独特的设计结构,LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。

基于Keras的神经网络用法总结

序贯型神经网络搭建-编译-训练全流程:

from keras.models import Sequential
from keras.layers import LSTM, Dropout, Dense

x_train = ***
y_train = ***

model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1], 1)))
model.add(LSTM(units=50))
model.add(Dense(1))
"""
往下可以继续接神经网络结构。。。
"""

model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=2)

model.save("saved_model.h5")

Sequential: 序贯模型,与函数式模型对立。from keras.models import Sequential, 序贯模型通过一层层神经网络连接构建深度神经网络。

add: 叠加网络层,输入参数可选为:

  • conv2D卷积神经网络层,
  • MaxPooling2D二维最大池化层,
  • Dropout随机失活层(防止过拟合),
  • Dense密集层(全连接FC层,在Keras层中FC层被写作Dense层)。

1. 创建

model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train_data.shape[1], 1)))
model.add(LSTM(units=50))
model.add(Dense(1))

2. 编译

model.compile(loss='mean_squared_error', optimizer='adam')

complie: 编译神经网络结构,输入参数包括:

  • loss,字符串结构,指定损失函数(包括MSE等);
  • optimizer,表示优化方式(优化器),用于控制梯度裁剪;
  • metrics,列表,用来衡量模型指标,表示评价指标。

3. 训练

model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=2)

fit: 在搭建完成后,将数据送入模型进行训练。输入参数包括:

  • x:训练数据输入;
  • y:训练数据输出;
  • batch_size: batch样本数量,即训练一次网络所用的样本数;
  • epochs:迭代次数,即全部样本数据将被“轮”多少次,轮完训练停止;
  • verbose:可选训练过程中信息是否输出参数,0表示不输出信息,1表示显示进度条(一般默认为1),2表示每个epoch输出一行记录;

4. 保存

# 用法一
model.save("saved_model.h5")

# 用法二
model.save_weights('emotion_model.h5')

save: 保存训练模型权重,训练成功后,会在源目录下保存***.h5文件,即为权重文件。

5. 预测

model.predict(x_test)

predict:利用训练好的模型权重lstm_model,对测试数据进行预测。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值