栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 深度学习 Class 7:高级的深度学习的优化实践

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 深度学习 Class 7:高级的深度学习的优化实践

目录

7.1 Keras函数式API

1.API简介 

2.多输入模型

3.多输出模型

4.层组成的有向无环图

5.共享层权重

6.将模型作为层

7.2 使用回调函数和TensorBoard检查并监控深度学习模型

1.回调函数作用于模型

2.TensorBoard

7.3 发挥模型性能

1.高级架构模式

​2.超参数优化

3.模型集成

4.结论


7.1 Keras函数式API

Sequential模型:

Inception模块:

 

残差连接:

 

1.API简介 
from keras import Input, layers
input_tensor = Input(shape=(32,))
dense = layers.Dense(32, activation='relu')
output_tensor = dense(input_tensor)

对比:

from keras.models import Sequential, Model
from keras import layers
from keras import Input
seq_model = Sequential()
seq_model.add(layers.Dense(32, activation='relu', input_shape=(64,)))
seq_model.add(layers.Dense(32, activation='relu'))
seq_model.add(layers.Dense(10, activation='softmax'))
input_tensor = Input(shape=(64,))
x = layers.Dense(32, activation='relu')(input_tensor)
x = layers.Dense(32, activation='relu')(x)
output_tensor = layers.Dense(10, activation='softmax')(x)
model = Model(input_tensor, output_tensor)
model.summary()

2.多输入模型

双输入模型

训练方法:可以向模型输入一个由Numpy 数组组成的列表,也可以输入一个将输入名称映射为Numpy 数组的字典。 

import numpy as np
num_samples = 1000
max_length = 100
text = np.random.randint(1, text_vocabulary_size,
size=(num_samples, max_length))
question = np.random.randint(1, question_vocabulary_size,
size=(num_samples, max_length))
answers = np.random.randint(answer_vocabulary_size, size=(num_samples))
answers = keras.utils.to_categorical(answers, answer_vocabulary_size)
model.fit([text, question], answers, epochs=10, batch_size=128)
model.fit({'text': text, 'question': question}, answers,
epochs=10, batch_size=128)

3.多输出模型

三输出: 

4.层组成的有向无环图

(1)inception模块

(2)残差连接

残差连接是让前面某层的输出作为后面某层的输入,从而在序列网络中有效地创造了一条捷径 

可以解决表示瓶颈:在Sequential 模型中,每个连续的表示层都构建于前一层之上,这意味着它能访问前一层激活中包含的信息。如果某一层太小(比如特征维度太低),那么模型将会受限于该层激活中能够塞入多少信息。梯度消失:如果这个反馈信号的传播需要经过很多层,那么信号可能会变得非常微弱,甚至完全丢失,导致网络无法训练。

5.共享层权重

即几个分支全都共享相同的知识并执行相同的运算

6.将模型作为层
from keras import layers
from keras import applications
from keras import Input
xception_base = applications.Xception(weights=None,
include_top=False)
left_input = Input(shape=(250, 250, 3))
right_input = Input(shape=(250, 250, 3))
left_features = xception_base(left_input)
right_input = xception_base(right_input)
merged_features = layers.concatenate(
[left_features, right_input], axis=-1)

7.2 使用回调函数和TensorBoard检查并监控深度学习模型

1.回调函数作用于模型

回调函数(callback)是在调用fit 时传入模型的一个对象,它在训练过程中的不同时间点都会被模型调用。

包括:(1)模型检查点(model checkpointing):在训练过程中的不同时间点保存模型的当前权重。
(2)提前终止(early stopping):如果验证损失不再改善,则中断训练(当然,同时保存在训
练过程中得到的最佳模型)。
(3)在训练过程中动态调节某些参数值:比如优化器的学习率。
(4)在训练过程中记录训练指标和验证指标,或将模型学到的表示可视化(这些表示也在不断更新)

回调函数:

(1)ModelCheckpoint 与EarlyStopping

EarlyStopping 回调函数来中断训练;ModelCheckpoint可以在训练过程中持续不断地保存模型

(2)ReduceLROnPlateau

如果验证损失不再改善,你可以使用这个回调函数来降低学习率

(3)自编写回调函数

2.TensorBoard

在训练过程中以可视化的方式监控指标;将模型架构可视化;将激活和梯度的直方图可视化;以三维的形式研究嵌入

7.3 发挥模型性能

1.高级架构模式

(1)批标准化

BatchNormalization 层通常在卷积层或密集连接层之后使用

(2)深度可分离卷积

对输入的每个通道分别执行空间卷积,然后通过逐点卷积(1×1 卷积)将输出通道混合

2.超参数优化

 优化过程:

(1) 选择一组超参数(自动选择)。
(2) 构建相应的模型。
(3) 将模型在训练数据上拟合,并衡量其在验证数据上的最终性能。
(4) 选择要尝试的下一组超参数(自动选择)。
(5) 重复上述过程。
(6) 最后,衡量模型在测试数据上的性能。

3.模型集成

将一系列不同模型的预测结果汇集到一起,从而得到更好的预测结果

4.结论

(1)构建高性能的深度卷积神经网络时,你需要使用残差连接、批标准化和深度可分离卷积。
未来,无论是一维、二维还是三维应用,深度可分离卷积很可能会完全取代普通卷积,因为它的表示效率更高。
(2)构建深度网络需要选择许多超参数和架构,这些选择共同决定了模型的性能。与其将这些选择建立在直觉或随机性之上,不如系统性地搜索超参数空间,以找到最佳选择。目前,这个搜索过程的计算代价还很高,使用的工具也不是很好。但Hyperopt 和Hyperas 这两个库可能会对你有所帮助。进行超参数优化时,一定要小心验证集过拟合!
(3)想要在机器学习竞赛中获胜,或者想要在某项任务上获得最佳结果,只能通过多个模型的集成来实现。利用加权平均(权重已经过优化)进行集成通常已经能取得足够好的效果。请记住,多样性就是力量。将非常相似的模型集成基本上是没有意义的。最好的集成方法是将尽可能不同的一组模型集成(这组模型还需要具有尽可能高的预测能力)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/689037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号