Keras深度学习之分层概念

3.1 多层感知层简介

3.1.1 链接输入、输出的Dense层

Dense(8,input_dim=4,activation='relu')

  • 第一个参数:输出神经元的个数

  • input_dim:输入神经元的个数

  • activation:激活函数

    • linear:默认值,输入神经元与权重计算得到的结果值

    • relu:主要用于隐藏层。rectifier函数

    • sigmoid:sigmoid函数,主要用于二元分类问题的输出层中

    • softmax:softmax函数,主要用于多分类问题的输出层中

Dense层不受输入神经元个数的限制,可*设定输出神经元的个数

3.2搭建多层感知神经网络模型

深度学习为什么需要随机种子

基于随机种子来实现代码中的随机方法,能够 保证多次运行此段代码能够得到完全一样的结果,即保证结果的 可复现性,这样 别人跑你的代码的时候也能够很好地复现出你的结果。

3.2.1 设置模型训练过程

model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

  • loss:用于评价权重设定的代价函数

  • optimizer:搜索最优权重的优化算法

  • metrics:衡量指标

3.2.2 训练函数

  • 第一个参数:输入变量

  • 第二个参数:输出变量。也就是标签值

  • epochs:指定对整体训练数据集进行训练的循环次数

  • batch_size:对权重进行更新的batch大小

3.2.3 模型评价

scores = model.evaluate(x_test,y_test)
print("%s: %.2f%%" %(model.metrics_name[1],scores[1]*100))

3.3卷积神经网络分层

3.3.1 过滤特征显著的卷积层

keras中主要用于图像处理的是Conv2D层,多用于图像识别,同时具有过滤功能

  • 第一个参数:卷积过滤器个数

  • 第二个参数:卷积内核的(行,列)

  • padding:定义补边方法

    • valid:只输出有效区域(因此输出图像小于原图像)

    • same:输出图像与原图像大小相同

  • input_shape:定义除样本数量之外的输入格式,只有模式中的第一层需要定义

    • 通过(行,列,信道)定义。黑白图像的信道为1,彩色的信道为3

  • activation:设置激活函数

    • linear:默认值,直接输出输入神经元与权重计算结果

    • relu:rectifier函数

    • sigmoid

    • softmax

过滤器即为权重

如果将过滤器换为3个2*2的过滤器。则输出图像的个数也变为3个。总权重数量为12个(3乘2乘2)。

注意

  • 虽然权重为2乘2乘3=12个,过滤器个数为一个(是卷积核在输入图像3个信道分别做卷积,再将3个信道结果加起来得到一个卷积输出),输出信道个数为1(与过滤器数量同步

3.3.2 忽略细微变化的最大池化层

从卷积层的输出图像中抓取主要参数,输出更小的图像

  • pool_size:定义垂直、水平的缩小比例。((2,2)表示输出图像的大小为1输入图像的一半)

3.3.3 将视频一维化的Flatten层

在卷积神经网络模型中,反复通过卷积层或最大池化层提取主要特征后,会传送给全连接层进行训练。

从卷积层和最大池化层提取的信息是二维的,但需要转化为一维才能传送给全连接层

3.4搭建卷积神经网络模型

 

运行结果

Keras深度学习之分层概念

3.5卷积神经网络模型数据增强

提高卷积神经网络模型性能方法(之一)-------- 数据增强

适用场合:

当训练集数量不足不能充分反映测试集样本特征时,使用这种方法可以提高模型的性能

3.5.1 现实问题

不能由模型开发者生成测试集。

首先查看运用现有模型挑战测试集数据的结果,然后利用有限的训练集样本,考虑到最多的可能性,对数据进行增强处理。

3.5.2 数据增强

Keras中提供的ImageDataGenerator函数可以用于数据增强

3.6循环神经网络模型

keras中提供的循环神经网络层主要有SimpleRNN、GRU、LSTM

3.6.1 能够记忆长序列的LSTM层

  • 第一个参数:存储单元数量(决定了存储容量大小和输出形态)

  • input_dim:输入属性的个数

  • input_length:系列数据的输入长度

  • return_sequences:是否输出序列

  • stateful:是否维持内部状态

3.7搭建循环神经网络模型

3.7.1 准备序列数据

  • 音阶比句子更容易编码
  • 是时间序列数据
  • 输出结果可以以乐谱形式查看
  • 可以将模型训练的结果演奏成音乐

3.7.2 生成数据集

由于不能进行输入/输出,由字母和数字组成的音符需要进行预处理,将每个代码转换为数字。

3.7.3 训练过程

我们训练模型的目标是输入前四个音符,模型就能够演奏全曲

  • 将第1~4个音符作为数据,第5个音符作为标签值,对模型进行训练
  • 之后将第2~5个音符作为数据,第6个音符作为标签值,对模型进行训练
  • 一次类推,每次递进一个音符,直至训练完全曲

3.7.4 预测过程

两种预测方法:一步预测全局预测

  • 一步预测

    是指输入四个原音符后预测下一个符标,并反复此过程

  • 全曲预测

    是指仅输入初始四个音符即可预测全曲。

    这种预测方法中,完成前面部分的预测后,将预测值作为输入值,用来输出下一个预测值。

    缺点

    如果中间出现失误,那么后面的音程和节奏出现失误的可能性会很高,也就是说,预测误差会累积。

3.7.5 多层感知器神经网络模型

3个Dense层

3.7.6 标准LSTM模型

  • 模型由一个具有128个存储单元的LSTM层和Dense层组成
  • 输入样本量50个,时间步4个,属性1个
  • stateful模式未激活
  • 时间步

    时间步是一个样本中包含的序列个数,与input_length相同

在多层感知器神经网络模型中,4个音符对应输入4个属性,而LSTM中,4个音符对应输入4个序列,此处的属性个数为1

不足:

全曲预测中,中间部分发生失误后,对全部预测结果产生影响,整体结果并不理想

3.7.7 Stateful LSTM模型

处理长序列数据时,Stateful LSTM模型可以发挥其优势。因为将长序列数据按样本单位进行分割训练时,由于状态的记忆功能,LSTM内部可以记忆有效的训练状态,同时丢弃无效记忆

在训练时,需要考虑状态初始化。(在一些情况下,不能将当前样本的额训练状态作为下一个样本训练时的初始状态,就需要进行初始化操作。在状态传递过程中,如果当前样本与下一个样本之间不存在顺序关系,就不能维持状态,所以必须进行初始化设置)

初始化情况

  • 完成最后一次样本训练后,模型系统运行新一轮训练周期,对新样本进行训练时,需要将状态初始化

  • 同一个训练周期内部存在多个序列数据时,在对新的序列数据集进行训练之前,需要对状态进行初始化

结果:

全曲预测结果完全正确

3.7.8 多种输入属性的模型结构

将c4分解为(c,4)两个属性输入(将音程和音符分解为两个属性输入)

人类在识谱时,也是将音符分解为两部分识别的,可以说这种学习方式更接近于人类的认知方式

结果

运行的预测结果与原曲完全相同

按训练效率排序

多层感知器神经网络模型>标准LSTM模型>Stateful LSTM模型(一个属性)>Stateful LSTM模型(两个属性)

上一篇:实验结果分析


下一篇:基于深度学习的LSTM情感分析