液体时间常数网络 (LTCs)
[更新] 孪生库添加了Pytorch版本及教程:https://github.com/mlech26l/ncps
这是论文https://arxiv.org/abs/2006.04439中描述的LTC网络的官方库。该库允许您通过时间反向传播(BPTT)训练连续时间模型。可用的连续时间模型如下:
模型 | 参考资料 |
---|---|
液体时间常数网络 | https://arxiv.org/abs/2006.04439 |
神经常微分方程(Neural ODEs) | https://papers.nips.cc/paper/7892-neural-ordinary-differential-equations.pdf |
连续时间循环神经网络(RNNs) | https://www.sciencedirect.com/science/article/abs/pii/S089360800580125X |
连续时间门控循环单元(GRU) | https://arxiv.org/abs/1710.04110 |
先决条件
所有模型都使用TensorFlow 1.14.0和python3在Ubuntu 16.04和18.04机器上实现和测试。以下所有步骤假设在这些条件下执行。
准备
首先,我们需要通过运行以下命令下载所有数据集:
source download_datasets.sh
该脚本会创建一个名为data
的文件夹,所有下载的数据集都存储在此文件夹中。
训练和评估模型
每个数据集对应一个Python模块:
- 手势分割:
gesture.py
- 房间占用检测:
occupancy.py
- 人类活动识别:
har.py
- 流量预测:
traffic.py
- 臭氧层水平预测:
ozone.py
每个脚本接受以下四个参数:
--model: lstm | ctrnn | ltc | ltc_rk | ltc_ex
--epochs: 训练时期数(默认为200)
--size: 隐藏RNN单元的数量(默认为32)
--log: 验证指标评估的间隔(默认为1)
每个脚本都会在给定的时期数下训练指定的模型,并在每个log
步之后评估验证性能。
在训练结束时,将还原表现最佳的检查点并在测试集上评估模型。
所有结果都会存储在results
文件夹中,并附加到CSV文件中。
例如,我们可以通过执行以下命令训练和评估CT-RNN:
python3 har.py --model ctrnn
脚本完成后,会生成一个名为results/har/ctrnn_32.csv
的文件,包含以下列:
best epoch
: 达到最佳验证指标的时期编号train loss
: 在最佳时期获得的训练损失train accuracy
: 在最佳时期获得的训练指标valid loss
: 在最佳时期获得的验证损失valid accuracy
: 在训练期间获得的最佳验证指标test loss
: 在测试集上的损失test accuracy
: 在测试集上的指标
超参数
参数 | 值 | 描述 |
---|---|---|
小批量大小 | 16 | 计算梯度下降更新的训练样本数量 |
学习率 | 0.001/0.02 | LTC为0.01-0.02,其他模型为0.001 |
隐藏单元 | 32 | 每个模型的隐藏单元数量 |
优化器 | Adam | 参见 (Kingma 和 Ba, 2014) |
beta_1 | 0.9 | Adam方法的参数 |
beta_2 | 0.999 | Adam方法的参数 |
epsilon | 1e-08 | Adam方法的ε参数 |
训练时期数 | 200 | 最大训练时期数 |
BPTT长度 | 32 | 时间步中的时间反向传播长度 |
ODE求解器步长 | 1/6 | 相对于输入采样周期 |
验证评估间隔 | 1 | 训练时期中的评估验证指标间隔 |
轨迹长度分析
运行main.m
文件可获取所需设置的轨迹长度结果,这可以在代码中进行调整。