解题思路
本题就是模拟 LSTM 的前向传播过程。先读取长度为 T 的输入序列,每个时间步包含 B 个样本,每个样本有 D=5 个特征。然后读取输入门、遗忘门、输出门、候选细胞状态四组参数。
初始时隐藏状态和细胞状态都为 0。对于每个时间步,依次计算输入门、遗忘门、输出门和候选细胞状态,再用它们更新当前细胞状态和隐藏状态。每一步的隐藏状态都需要保存,最后输出所有时间步的隐藏状态以及最终细胞状态。
关键算法是 LSTM 前向传播模拟,按时间顺序递推即可。
复杂度分析
#P4869.第2题-基于LSTM进行室内温度预测
题目内容
【背景】
在现代智能家居系统中,准确预测室内温度变化对于实现舒适的居住环境和节能控制至关重要。室内温度受多种因素影响,包括室外温度、空调设定温度、门窗开关状态、室内人员数量等,这些因素之间存在复杂的非线性关系。
假设你正在开发一个智能温控系统,该系统通过传感器采集过去一段时间内的环境数据,使用 LSTM 模型预测未来时刻的室内温度。具体来说,系统每 5 分钟采集一次数据,包括以下 5 个特征:
- 室内温度
- 室外温度
- 空调功率
- 门窗开合状态
- 室内人员数量
【任务】
请你基于过去 T 个时间步的这 5 个特征,使用 LSTM 模型学习温度变化的动态模式,输出每个时间步的隐藏状态和最终细胞状态。
LSTM 核心公式如下,其中 σ() 为sigmoid激活函数:
给定输入 xt、上一时刻隐藏状态 ht−1、上一时刻细胞状态 ct−1:
- 遗忘门:ft=σ(Wf⋅[ht−1,xt]+bf)
- 输入门:it=σ(Wi⋅[ht−1,xt]+bi)
- 候选细胞状态:c~t=tanh(Wc⋅[ht−1,xt]+bc)
- 细胞状态更新:ct=ft⊙ct−1+it⊙c~t
- 输出门:ot=σ(Wo⋅[ht−1,xt]+bo)
- 隐状态更新:ht=ot⊙tanh(ct)
- 输出层:y^t=Wy⋅ht+by
计算中,本题中,上一时刻隐藏状态 ht−1、上一时刻细胞状态 ct−1 均初始化为0。
输入描述
第一行:T,5,D,H 共 4 个正整数,其中T为序列大小,B为批次大小(时间),D为输入特征维度,H为隐藏层维度,取值范围为 0<T<=100,0<B<=100,D=5,0<H<=10。
接下来 T 行:每行包含 B×D 个浮点数,表示输入序列,按时间步顺序,每个时间步的数据按批次顺序排列(即先第 1 个房间的 D 个特征,再第 2 个房间的 D 个特征,依此类推)。
最后四行:分别对应输入门、遗忘门、输出门和候选细胞状态的参数,每行包含:
- 输入权重(D×H)、隐藏权重(H×H)、偏置(H)的元素数
- 所有参数按行优先顺序展平
注:所有输入的每个数之间用一个空格分隔,每行末尾无多余空格
输出描述
第一行:所有时间步的隐藏状态(T×B×H),按时间步顺序展平输出
第二行:最终细胞状态(B×H),按批次顺序展平输出
注:所有浮点数保留 4 位小数(四舍五入),每个数之间用一个空格分隔,每行末尾无多余空格
样例1
输入
1 1 5 2
2.5 5.0 3.2 5.0 1
0.1 0.1 0.3 3.4 0.5 0.4 0.7 0.3 0.2 1.0 0.7 0.5
0.8 1.0 1.1 1.4
0.1 0.7 0.1 1.4 0.5 0.6 0.3 0.2 0.3 1.0 0.8 0.7
0.7 1.1 1.2 1.2
0.1 0.8 3.3 0.4 0.1 0.5 0.4 0.8 0.9 1.0 0.6 0.9
0.5 1.2 1.1 1.5
0.1 0.1 0.3 0.4 0.5 0.6 0.6 0.8 0.2 1.0 0.7 0.1
0.9 1.3 1.6 1.2
输出
0.7615 0.7616
0.9997 1.0000
说明
第一行:T=1,B=1,D=5,H=2:序列长度 1(1 个采样点),批次大小为 1(1 个独立房间),每个房间 5 维特征,隐藏层维度 2。
第二行:1×5大小的输入序列,房间1的特征:[2.5 5.0 3.2 5.0 1]
最后 4 行:各门参数:前5×2个数据为输入权重,其后2×2个数据为隐藏权重,最后 2 个为偏置项
输出:
第一行:1×1×2个数据,序列1的隐藏状态 [0.7615 0.7616]
第二行:最终细胞状态,输出 1×2 个数据
样例2
输入
2 2 5 1
21.0 25.0 22.0 25.5 1 21.0 25.0 22.0 25.5 2
22.0 26.0 20.5 24.0 2 22.0 26.0 20.5 24.0 1
0.1 0.15 0.2 0.1 0.15 0.3 0.3
0.4 0.45 0.5 0.4 0.45 0.5 0.6
0.7 0.6 0.8 0.7 0.6 0.8 0.9
1.0 0.9 1.1 1.0 0.9 1.1 1.2
输出
0.7616 0.7616 0.9640 0.9640
2.0000 2.0000
说明
- 第一行:T=2,B=2,D=5,H=1:序列长度为 2(2 个采样点),批次大小为 2(2 个独立房间),每个房间 5 维特征,隐藏层维度为 1。
- 接下来两行:分别为两个时间步的输入序列,每个时间步包含 2 个房间的 5 维特征。
- 最后 4 行:各门参数,每行包含输入门、遗忘门、输出门和候选细胞状态的权重与偏置。
- 输出:
- 第一行:按时间步顺序展平输出所有时间步的隐藏状态,格式为 T×B×H,即 2×2×1,结果为 0.7616 0.7616 0.9640 0.9640。
- 第二行:按批次顺序展平输出最终细胞状态,格式为 B×H,即 2×1,结果为 2.0000 2.0000。