### 准备数据:
* 将数据预处理为神经网络可以处理的格式-向量化。
* 数据中的每个时间序列位于不同的范围(比如温度通道位于 -20 到 +30 之间,但气压大约在 1000 毫巴上下)
* 对每个时间序列分别做标准化,让它们在相似的范围内都取较小的值。
* 编写一个 Python 生成器
* 以当前的浮点数数组作为输入,并从最近的数据中生成数据批量,同时生成未来的目标温度。
* 数据集中的样本是高度冗余的(对于第*N*个样本和第*N*+1 个样本,大部分时间步都是相同的),所以显式地保存每个样本是一种浪费。相反,我们将使用原始数据即时生成样本。
*****
### 合理性检查:
* 尝试一种**基于常识**的简单**方法**。它可以**作为**合理性**检查**
* **建立**一个**基准**,更高级的机器学习模型需要打败这个基准才能表现出其**有效性**
*****
### 基于常识的、非机器学习的基准方法
尝试机器学习方法之前,建立一个基于常识的基准方法是很有用的:
**小型的密集连接网络**
~~~
model = Sequential()
model.add(layers.Flatten(input_shape=(lookback//step, float_data.shape[-1])))#首先将数据展平
model.add(layers.Dense(32, activation='relu'))#通过两个Dense层并运行
model.add(layers.Dense(1))#最后一个Dense层没有使用激活函数,这对于回归问题是很常见的
model.compile(optimizer=RMSprop(), loss='mae')#使用 MAE 作为损失
history = model.fit_generator(train_gen,
steps_per_epoch=500,
epochs=20,
validation_data=val_gen,
validation_steps=val_steps)
~~~
### 使用循环 dropout 来降低过拟合
在循环网络中使用 dropout 的正确方法:对每个时间步应该使用相同的 dropout 掩码(dropout mask,相同模式的舍弃单元),而不是让 dropout 掩码随着时间步的增加而随机变化。此外,为了对`GRU`、`LSTM`等循环层得到的表示做正则化,应该将不随时间变化的 dropout 掩码应用于层的内部循环激活(叫作**循环**dropout 掩码)。对每个时间步使用相同的 dropout 掩码,可以让网络沿着时间正确地传播其学习误差,而随时间随机变化的 dropout 掩码则会破坏这个误差信号,并且不利于学习过程。
> 参见 Yarin Gal 的博士论文“Uncertainty in deep learning”。
Keras有两个与 dropout 相关的参数:
* `dropout`它是一个浮点数,指定该层输入单元的 dropout 比率
* `recurrent_dropout`指定循环单元的 dropout 比率
* 使用 dropout 正则化的网络总是需要更长的时间才能完全收敛,所以网络训练轮次增加为原来的 2 倍
循环层堆叠:
* 增加网络容量的通常做法是增加每层单元数或增加层数
* 在 Keras 中逐个堆叠循环层,所有中间层都应该返回完整的输出序列(一个 3D 张量),而不是只返回最后一个时间步的输出。这可以通过指定`return_sequences=True`来实现
~~~
model.add(layers.GRU(32,
dropout=0.1,
recurrent_dropout=0.5,
return_sequences=True,
input_shape=(None, float_data.shape[-1])))
model.add(layers.GRU(64, activation='relu',
dropout=0.1,
recurrent_dropout=0.5))
model.add(layers.Dense(1))
~~~
**双向 RNN**(bidirectional RNN):
RNN 按时间逆序处理输入序列(更晚的时间步在前)
* [ ] 编写一个数据生成器的变体,将输入序列沿着时间维度反转(即将最后一行代码替换为`yield samples[:, ::-1, :], targets`)
- 基础
- 张量tensor
- 整数序列(列表)=>张量
- 张量运算
- 张量运算的几何解释
- 层:深度学习的基础组件
- 模型:层构成的网络
- 训练循环 (training loop)
- 数据类型与层类型、keras
- Keras
- Keras 开发
- Keras使用本地数据
- fit、predict、evaluate
- K 折 交叉验证
- 二分类问题-基于梯度的优化-训练
- relu运算
- Dens
- 损失函数与优化器:配置学习过程的关键
- 损失-二分类问题
- 优化器
- 过拟合 (overfit)
- 改进
- 小结
- 多分类问题
- 回归问题
- 章节小结
- 机械学习
- 训练集、验证集和测试集
- 三种经典的评估方法
- 模型评估
- 如何准备输入数据和目标?
- 过拟合与欠拟合
- 减小网络大小
- 添加权重正则化
- 添加 dropout 正则化
- 通用工作流程
- 计算机视觉
- 卷积神经网络
- 卷积运算
- 卷积的工作原理
- 训练一个卷积神经网络
- 使用预训练的卷积神经网络
- VGG16
- VGG16详细结构
- 为什么不微调整个卷积基?
- 卷积神经网络的可视化
- 中间输出(中间激活)
- 过滤器
- 热力图
- 文本和序列
- 处理文本数据
- n-gram
- one-hot 编码 (one-hot encoding)
- 标记嵌入 (token embedding)
- 利用 Embedding 层学习词嵌入
- 使用预训练的词嵌入
- 循环神经网络
- 循环神经网络的高级用法
- 温度预测问题
- code
- 用卷积神经网络处理序列
- GRU 层
- LSTM层
- 多输入模型
- 回调函数
- ModelCheckpoint 与 EarlyStopping
- ReduceLROnPlateau
- 自定义回调函数
- TensorBoard_TensorFlow 的可视化框架
- 高级架构模式
- 残差连接
- 批标准化
- 批再标准化
- 深度可分离卷积
- 超参数优化
- 模型集成
- LSTM
- DeepDream
- 神经风格迁移
- 变分自编码器
- 生成式对抗网络
- 术语表