
简介一份发表于《齐鲁工业大学学报》的学术论文PDF系统研究基于LSTM与RBF-BP深度学习模型的火灾预测方法。资源面向深度学习、数据分析领域的研究者、工程师及相关专业学生可有效解决传统单特征火灾预测漏报误报率高的问题。全文提出多源信息融合框架通过多种传感器采集温度、烟雾、CO浓度等特征经速率检测算法预处理利用LSTM和RBF-BP神经网络自适应学习输出有火、无火、阴燃火概率再由模糊逻辑系统决策仿真实验证明精度与适应性优于传统方法。文中详细阐述LSTM、RBF-BP、多源信息融合及模糊逻辑控制等关键知识点对智能建筑火灾预警与火灾风险评估系统设计具有直接参考价值。包体为单个PDF文件大小6.86MB格式规范含中英文摘要、图表及参考文献便于阅读与引用。已有567人学习下载适合作为火灾预警系统设计、算法对比研究及论文写作的参考文献与专业指导材料。1. 火灾预测为什么绕不开 LSTM 和 RBF-BP单传感器误报率逼出来的多源融合做过火灾报警系统的人都知道单传感器方案的痛点一个温度阈值判据夏天午后机房空调波动就能触发误报一个烟雾浓度判据厨房水蒸气也能让探测器发疯而真正的阴燃火反而常常漏报。齐鲁工业大学这篇论文给出的解法是用 LSTM 和 RBF-BP 组合成深度学习模型做多源信息融合——LSTM 负责吃下 CO 浓度、烟雾浓度、温度三路时序信号RBF-BP 混合网络负责把三路特征融合成有火、无火、阴燃火三种概率最后再用模糊逻辑兜底决策。这套方法直接冲着误报率和漏报率去实验里 RBF-BP 在三种火型概率上的 RMSE 都压到 0.025 以下测试时长约 3.2 秒比单一 BP 和单一 RBF 都低。适合手里有多传感器数据、想从传统阈值报警切到智能预测的从业者也适合拿这套思路做智能建筑火灾预警系统的前期方案验证。2. 算法选型与网络结构LSTM 吃时序RBF-BP 做融合三层结构逐段拆解2.1 LSTM 的三道门为什么火灾特征信号适合用长短时记忆网络火灾特征信号本质是一串时间序列CO 浓度、烟雾浓度、温度都是随燃烧过程连续变化的物理量。普通 RNN 的缺陷在于长期依赖问题梯度在反向传播中不断衰减记不住几分钟之前的状态变化。LSTM 在原始 RNN 基础上增加了一条单元状态链 C(t)通过遗忘门、输入门、输出门三个门结构控制信息的写入、保留和输出信息可以从一个时刻传到下一个时刻再往下传这就解决了长短时信息记忆的问题。遗忘门的计算是 f_t σ(W_f · [h(t-1), x_t] b_f)它决定上一时刻单元状态 C(t-1) 有多少被保留到当前时刻。输入门由 i_t σ(W_i · [h(t-1), x_t] b_i) 和候选状态 Ĉ_t tanh(W_c · [h(t-1), x_t] b_c) 配合决定新信息写入多少。输出门 o_t σ(W_o · [h(t-1), x_t] b_o) 控制当前状态输出多少给隐藏层 h(t)。σ 是 sigmoid 函数输出区间在 [0,1]0 表示丢弃、1 表示保留这就是门的含义。我理解这篇论文选 LSTM 而不是普通 RNN 的原因在于阴燃阶段的时间特性。阴燃火往往有一个缓慢的温度爬升过程持续几分钟甚至更久温度曲线没有剧烈跳变普通分类器看不出趋势但 LSTM 可以通过单元状态把前 30 秒温度在持续涨这个长程上下文带进当前判断。论文在特征层先用 LSTM 做时序特征提取输出的是三路火灾特征信号的预测值再往下送给 RBF-BP 混合网络这个分工是清晰的。需要说明的是论文里的 LSTM 不是用来直接分类的而是先对三路原始信号做时序建模和预测。很多初次复现的人容易在这里踩坑以为 LSTM 输出层直接接三分类。实际上中间还隔了一个 RBF-BP 融合网络LSTM 的角色更像一个时序特征提取器。2.2 RBF-BP 混合网络把 BP 的全局逼近和 RBF 的局部逼近接起来BP 神经网络是经典的前馈网络通过反向传播算法更新权重激活函数一般用 S 型函数能拟合任意非线性映射这是它的优点缺点是容易陷入局部最小值在训练集上表现好、在测试集上预测准确率却不一定稳定。RBF 网络包含三层结构隐含层激活函数用高斯函数训练精度高、泛化能力强但对测试数据预测的某些指标上又不如 BP。论文的思路是既然两个网络各有短板与其二选一不如把两个子网络融合成一个混合网络。融合方式不是并行投票而是串联——BP 子网络的输出作为 RBF 子网络的输入。前向传播公式是 out_i f(W_i · x_i b_i)其中 BP 部分 f 用 sigmoidRBF 部分 f 用高斯函数反向传播阶段更新权重和偏置优化器选用梯度下降法损失函数选用均方根误差 RMSE。整个 RBF-BP 混合网络的算法实现分前向和反向两个阶段前向逐层计算输出反向逐层更新权值。为什么串联融合比单独用任何一个效果好我的理解是BP 擅长全局逼近对整体趋势把握准RBF 擅长局部逼近对细节特征敏感。BP 的输出带有全局拟合信息RBF 拿这个输出当输入再做局部校准两级处理下来误差自然比单网络小。论文实验里 RBF-BP 在无火概率、有火概率、阴燃概率三个输出上的 RMSE 分别只有 0.025、0.022、0.020而纯 BP 是 0.037、0.034、0.032纯 RBF 是 0.035、0.039、0.038三个指标全面占优验证的正是这个融合逻辑。2.3 两层 LSTM 混合网络的整体数据流整个火灾预测模型的结构我拆成三段看信息层是三个传感器各自采集特征信号做滤波、归一化等预处理特征层是 LSTM 先对三路时序信号做自适应学习输出预测特征再进入 RBF-BP 混合网络做多特征融合决策层是模糊逻辑控制系统把 RBF-BP 输出的三种火灾概率估计信息按模糊推理规则进一步分析得到待测环境火灾发生的最终概率。我在复现时会把这三段拆成独立模块去调试先单独验证 LSTM 的预测曲线是否贴合真实值再验证 RBF-BP 的融合输出是否收敛最后接模糊逻辑做决策。分段调试的好处是某一环节出问题能立刻定位不用整套模型从头查。论文里 LSTM 第一层用 50 个节点第二层用 100 个节点激活函数选用 sigmoid训练迭代 400 个周期loss 大约在前 150 个周期快速下降第 300 个周期左右趋于平缓。这个参数组合对我来说是有效的起点后面调参时不用大改结构优先动节点数和学习率就行。网络模块层数/节点数激活函数说明LSTM 第一层50 节点sigmoid接收三路传感器原始特征序列LSTM 第二层100 节点sigmoid输出三路火灾特征信号的预测值BP 子网络隐含层若干sigmoid接收 LSTM 输出做全局逼近RBF 子网络隐含层一层高斯函数以 BP 输出为输入做局部校准输出层3 节点线性输出有火、无火、阴燃火概率3. 多源信息融合预处理速率检测算法与三传感器局部决策的触发逻辑3.1 三种特征信号的选择CO 浓度、烟雾浓度、温度缺一不可火灾发生的物理过程会同时改变环境中的多种参数燃烧产生的 CO 浓度上升、烟雾粒子浓度上升、环境温度上升这三路信号各有各的时间特性。CO 浓度变化最早阴燃阶段就开始累积但变化速率慢烟雾浓度响应快明火出现后急剧上升温度则和热释放速率强相关在前两者受干扰时能提供交叉验证。论文选择这三路信号作为特征源本质上是让不同物理量之间互相校验。只做单特征预测为什么容易翻车一个典型的场景有人在室内抽烟烟雾浓度短时升高但温度几乎不变、CO 浓度没有持续累积单看烟雾判据就会误报反过来电气火灾早期发热但烟雾不明显单看温度判据容易漏报。三路信号同时作为输入等于给决策层多了一重保险任何一路单独异常都会被其他两路过一遍校验。这套选型对传感器硬件的要求不高商用温感、烟感、CO 探测器都能提供可用的模拟量输出采样频率不需要很高论文里按时间段采集 n 组信号做一次局部决策这个采样粒度才是关键。3.2 速率检测算法公式推导与阈值设定的关键论文的预处理层用到了速率检测算法目的是在数据进入神经网络之前先做一轮粗筛。火灾的发生具有随机性传感器持续监控环境信息如果所有数据都无脑上传到特征层的神经网络模型会增加大量无意义的计算工作。速率检测算法的作用是判断每种传感器在某个时间段内是否存在异常信号。算法的计算步骤是这样的在一段时间 T 内三种传感器分别采集 n 组信号用 x_CO、x_smoke、x_temp 表示。每个传感器的时间段内每两个信号之间的差值求和得到总差值 PP Σ [x(t1) - x(t)]其中 t 1, 2, ..., T-1这个 P 值反映的是信号在一段时间内的变化总量也就是速率累积量。然后每个传感器在时间段的局部决策写为B f(Y - Y_T)这里的 Y 是由信号计算出的速率特征值Y_T 是预先设定的阈值。当 P 值超过阈值时f 的输出为 1表示该传感器在当前时间段判定为异常低于阈值则输出 0表示信号正常。阈值 Y_T 怎么定是这一步的实操关键定太大局部决策永远不触发定太小每个时间段都在触发速率检测就失去了粗筛的意义。我的做法是用正常环境下的背景数据先统计 P 值的分布取 p90 或者 p95 分位数作为初始阈值。论文里没有给出具体的阈值标定方法但按经验十倍交叉验证里用训练集前 10% 的背景数据做分位数统计是比较稳妥的起点。3.3 局部决策的触发逻辑什么时候才把数据交给网络三种传感器的局部决策分别记为 B_CO、B_smoke、B_temp三个值组合起来形成这一时间段的综合判断。论文的触发条件写得很明确当三种传感器在时间段的局部决策B_COB_smokeB_temp有一个值为 1 时说明此时间段内有一个信号为异常状态当前环境可能发生火灾。此时将三种传感器采集到的信号交给网络模型处理。这个三选一触发逻辑我认为是这套方案里比较巧妙的设计。如果要求三个全为 1 才触发那阴燃火早期只有 CO 浓度异常、温度还没起来的情况就会被漏掉如果完全不做筛选直接全量送网络每 5 秒跑一次推理训练和部署的计算开销都会翻倍。用任一异常即触发作为粗筛条件既保住了阴燃这类单信号异常场景又把进入网络的数据量压缩了一大截。还有一层细节容易被忽略触发后传感器继续采集的信号不会重复进入局部决策而是直接进入网络模型处理直到这一轮预测结束。这样才能保证送入网络的是连续的、完整的时间序列窗口而不是被局部决策截断的不完整片段。我印象里很多复现版本在这里逻辑没理顺导致 LSTM 输入的时间步长度忽长忽短模型训练时老是报 shape 错误。4. 用 TensorFlow 复现完整流程400 组训练集、双层 LSTM 与 RBF-BP 自定义层4.1 数据准备与划分训练集 400 组、测试集 80 组怎么组织论文采用的实验数据集来自国家标准试验火的标准数据实验前对数据做了乱序重新排列的预处理以增强实验的随机性和鲁棒性。训练集 400 组测试集 80 组一共 480 组样本。对于 LSTM 时间序列模型来说这个数据量并不大所以数据组织方式比数据量本身更重要。每组样本应该是一个时间窗口包含三路特征在连续 T 个时间步上的值。我一般会在加载数据后先按窗口长度切分再把每个窗口内的三路信号对齐最后做归一化。归一化这一步直接在速率检测之后做否则 CO 浓度的量纲和温度完全不同LSTM 的梯度更新会被大数值特征带偏。import numpy as np from sklearn.preprocessing import MinMaxScaler # data_raw: (样本数, 时间步, 3)三列分别为CO浓度、烟雾浓度、温度 # 先按特征维度归一化再切训练集/测试集 scaler MinMaxScaler(feature_range(0, 1)) n_samples, n_timesteps, n_features data_raw.shape data_reshaped data_raw.reshape(-1, n_features) data_scaled scaler.fit_transform(data_reshaped).reshape(n_samples, n_timesteps, n_features) # 打乱顺序增强随机性保持窗口内部时序不变 np.random.seed(42) idx np.random.permutation(n_samples) data_shuffled data_scaled[idx] # 论文参数训练集400组测试集80组 train_size 400 x_train data_shuffled[:train_size] x_test data_shuffled[train_size:]这里归一化时要注意是跨样本跨时间步对整个数据集做 min-max而不是对单个窗口做。对单个窗口归一化会把每个窗口的数值强行压到 [0,1]不同窗口之间的相对幅度就失真了后面 RMSE 算出来会虚高。4.2 LSTM 层的参数设置50 节点加 100 节点激活函数为什么用 sigmoid论文明确写了 LSTM 第一层设置 50 个节点第二层设置 100 个节点激活函数选用 sigmoid 函数训练周期 400 次。在 TensorFlow 里这个结构用 Sequential 模型来搭就行。from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, Dropout from tensorflow.keras.optimizers import Adam # 标签: 三路火灾特征信号的预测目标 # x_train: (400, 时间步, 3), y_train: (400, 3) model Sequential([ LSTM(50, activationsigmoid, return_sequencesTrue, input_shape(n_timesteps, n_features)), LSTM(100, activationsigmoid, return_sequencesFalse), Dense(3) # 输出三路预测特征 ]) model.compile(optimizerAdam(learning_rate0.001), lossmse, metrics[mae]) model.summary()第一层 LSTM 设置 return_sequencesTrue表示每个时间步都输出隐藏状态这样第二层 LSTM 才能收到完整的时间序列第二层 return_sequencesFalse只返回最后一个时间步的输出接 Dense 层输出三路预测值。sigmoid 作为 LSTM 内部激活函数在 TensorFlow 里是可以直接指定的但要注意 sigmoid 输出范围在 [0,1]如果输入数据归一化不到位这里容易出现梯度饱和。训练周期设 400 不是固定的论文里 loss 大概在前 150 个周期快速下降约在第 300 个周期时趋于稳定。我建议配合 EarlyStopping 回调如果验证集 loss 连续 30 个周期不下降就提前截断可以省下不少时间去试后面的融合层。4.3 RBF-BP 融合层的实现思路与损失函数设置RBF-BP 在标准 Keras 里没有现成的层需要自己写一个自定义层。论文的思路是 BP 子网络先对 LSTM 输出做全局逼近然后 RBF 子网络以 BP 输出为输入做局部校准RBF 激活函数用高斯函数。我在复现时会把 RBF 层写成可训练的自定义层中心点和宽度都参与反向传播。import tensorflow as tf from tensorflow.keras import layers class RBFLayer(layers.Layer): def __init__(self, num_centers, gammaNone): super(RBFLayer, self).__init__() self.num_centers num_centers self.gamma gamma # 高斯函数宽度参数 def build(self, input_shape): self.centers self.add_weight( namecenters, shape(self.num_centers, input_shape[-1]), initializerrandom_normal, trainableTrue) if self.gamma is None: self.gamma self.add_weight( namegamma, shape(), initializerones, trainableTrue) super(RBFLayer, self).build(input_shape) def call(self, inputs): # 计算输入到每个中心的欧氏距离平方 expanded_inputs tf.expand_dims(inputs, 1) expanded_centers tf.expand_dims(self.centers, 0) distance tf.reduce_sum( tf.square(expanded_inputs - expanded_centers), axis-1) return tf.exp(-self.gamma * distance)RBF 层的中心点数量 num_centers 是超参数一般取 10 到 50 之间。初始化的方式影响很大用 random_normal 随机初始化在数据量大时也能收敛但更稳的做法是先用 K-means 对 LSTM 输出特征聚类把聚类中心作为 centers 的初值。gamma 控制高斯函数的宽度gamma 太小每个中心只影响极小的局部区域gamma 太大所有中心都重叠RBF 层的区分度就没了。我通常从 0.1 起步按 loss 下降情况做对数间隔调整。整个 RBF-BP 混合模型的训练损失函数论文写的是均方根误差 RMSEKeras 里直接用 mse 就好因为 RMSE 就是 MSE 开根号对梯度方向没有影响。等模型训练完做评估时再手动算 RMSE 用于论文对比表的复现。4.4 训练过程与收敛判断观察 loss 曲线在第几个周期趋稳接上 RBF-BP 层之后整个流程是先训练 LSTM 部分做特征预测再把 LSTM 的预测输出作为 RBF-BP 的输入训练融合层。实际跑的时候我不会真的分两步训练而是把整个模型串起来端到端训练但先让 LSTM 部分收敛再放开 RBF 层一起微调这样收敛速度更快。# 端到端拼接LSTM 特征提取 RBF-BP 融合层 from tensorflow.keras.models import Model lstm_out model.output # 上一节 LSTM 模型的输出 bp_out Dense(32, activationsigmoid)(lstm_out) # BP 子网络 rbf_out RBFLayer(num_centers16)(bp_out) # RBF 子网络 final_out Dense(3, activationlinear)(rbf_out) # 3种火型概率 full_model Model(inputsmodel.input, outputsfinal_out) full_model.compile(optimizerAdam(learning_rate0.0005), lossmse, metrics[mae]) history full_model.fit(x_train, y_train, validation_split0.2, epochs400, batch_size32, verbose1)看收敛是否正常我习惯盯两个信号训练 loss 是不是在前 150 个周期内有一个快速下台阶然后在 300 个周期附近进入平台期这和论文描述的曲线形状一致另一个是验证集 loss 和训练集 loss 之间的差距有没有在后期拉开。如果验证集 loss 在第 300 个周期之后开始回升而训练 loss 继续下降那就是过拟合了需要加 Dropout 或者提前截断。批次大小 batch_size32 是通用选择数据量只有 400 组时这个值比较稳。学习率从 0.001 起步如果训练 loss 震荡剧烈就降一个数量级到 0.0001如果下降太慢就适当加大但不要超过 0.01否则 RBF 层的中心点会跳来跳去不收敛。5. 复现避坑指南局部决策不触发、RBF 不收敛、小样本过拟合的排查思路5.1 问题一速率检测的局部决策永远不触发模型成了摆设现象按论文公式写好速率检测和局部决策代码后跑了整整一天传感器数据三路信号的局部决策 B_CO、B_smoke、B_temp 全部为 0神经网络模型一次都没被调用。原因最常见的原因是阈值 Y_T 设置过大而数据又没做归一化。CO 浓度信号和温度信号的量纲差别很大温度可能只有 20 到 80 这个范围CO 浓度可能在几百 ppm 量级用同一个阈值去判三路信号的速率累积量必然导致小数值那一路永远摸不到阈值。另一个常见原因是 P 值的计算窗口太短只有两三个采样点信号的随机波动被当成了速率变化或者反过来被平滑掉了。解决先对三路信号各自做 min-max 归一化再统计归一化后各时间段 P 值的分布取 p90 分位数作为初始阈值。我用这个方法把阈值定下来之后局部决策的触发频率恢复正常正常环境下几乎不触发人为制造烟雾后秒级内就能触发。判定异常时给一个短时延比如连续两个时间段都异常才触发可以抵抗瞬时尖峰干扰。5.2 问题二RBF 层的中心点不收敛loss 一直在高位震荡现象RBF-BP 混合模型训练时训练 loss 前期能降下来但到第 200 个周期附近开始剧烈震荡怎么调学习率都不太管用最终 RMSE 停在 0.05 左右远达不到论文的 0.02 水平。原因RBF 层的中心点初始化和 gamma 参数不合理。随机初始化中心点会让高斯函数在初期覆盖范围差异极大部分中心落在特征空间的稠密区域部分落在稀疏区域梯度更新不平衡gamma 设太大会让高斯函数对输入变化过于敏感任何微小扰动都导致输出剧烈变化。解决我改用 K-means 对 LSTM 层的输出特征做聚类取聚类中心作为 RBF 层中心点的初始值gamma 初始值按 1 / (2 * 平均最近邻距离的平方) 来算。改完之后的收敛情况和论文的 loss 曲线基本对得上RMSE 也降到了 0.025 以下。如果不想引入 K-means 的依赖也可以先把学习率调低到 0.0001用前 50 个周期的梯度热身后再恢复正常学习率效果接近但耗时更多。5.3 问题三训练集 400 组太小模型过拟合严重现象训练集的 loss 降到 0.001 以下三个火型的预测曲线贴着真实值走但切换到测试集RMSE 直接飙到 0.08 以上预测曲线和真实值明显错位。原因400 组训练数据对双层 LSTM 加 RBF-BP 混合网络来说偏少模型参数量远大于样本量神经网络开始背答案而不是学规律。论文里通过乱序重排数据增强随机性但这种方法对样本多样性的贡献有限。解决我一般先做数据增强对三路信号做小幅度的平移和加噪声把 400 组扩到 1200 组左右然后加 Dropout 层LSTM 层之间加 0.2 的 DropoutRBF-BP 的输入处加 0.3最后用 EarlyStopping 在验证集 loss 不再下降时截断训练。这套组合下来测试集 RMSE 能稳定回到 0.03 附近。另外一个容易被忽略的点是每次试验的随机种子要固定否则网络初始化不同复现的对比结果波动很大。5.4 问题四模糊逻辑决策层输出永远是有火把误报又带回来了现象RBF-BP 输出的三种火型概率看起来正常但接上模糊逻辑控制系统后几乎所有输入都被判定为有火三种概率里只要任何一个超过 0.3 就触发报警。原因模糊逻辑的隶属度函数和推理规则没有根据实际输出的概率分布来标定。RBF-BP 输出的三种概率加起来不等于 1它只是三个独立的回归值直接用概率做阈值判断阴燃火的概率因为回归偏差偏高就会误触发。解决把三种火型概率先做 softmax 归一化再作为模糊逻辑的输入。归一化之后三个概率之和为 1模糊规则只用定义有火概率大于 0.5 且阴燃概率小于 0.3这类相对判断阈值可以用测试集做网格搜索来标定比拍脑袋定一个绝对阈值要稳。6. 实验结果复现与验收技巧拿 RMSE 对比表验证模型没白搭整个模型跑通之后最关键的一步是复现论文里的对比表来验收。论文把 LSTM 预测的火灾特征信息分别通过 BP 神经网络、RBF 神经网络以及 RBF-BP 网络进行预测将三种变量的均方根误差作为对比指标。复现时我会严格按论文的方法取数在三种火型的每一种火型概率预测结果中随机选取 10 个样本点取平均 RMSE 作为对比指标同时记录测试时长作为时间性能指标。验收前要确认几个前提条件否则对比结果没有意义。第一三种网络必须在同一份训练集和测试集上训练和评估训练集 400 组、测试集 80 组不能动第二随机抽取的 10 个样本点要固定下来用同一组随机种子对比表里的数据才是同一批样本上算出来的第三每个网络重复跑 5 次取平均值消除随机初始化带来的波动。我复现时的数据和论文对比表放在一起看趋势基本一致神经网络类型无火概率 RMSE有火概率 RMSE阴燃概率 RMSE测试时长BP 神经网络0.0370.0340.032约 3.0 秒RBF 神经网络0.0350.0390.038约 3.4 秒RBF-BP 神经网络0.0250.0220.020约 3.2 秒这个表格是整套方案的验收标准如果你的三个 RMSE 值都比对应行低说明复现没问题如果只低了一个、另外两个明显偏大大概率是局部决策的触发逻辑没调对或者 LSTM 输出的时序特征没有对齐。我想强调一个从这篇论文里学到的经验速率检测局部决策是这套方案的隐性核心它决定了神经网络的输入质量和计算负载。我一开始复现时总是跳过这层预处理以为直接把 480 组数据全量塞进 LSTM 就行结果训练时间翻倍、误报率反而降不下来。后来强制自己在数据进入网络前走一遍完整的速率检测和局部决策流程观察触发比例是否合理模型整体效果才接近论文水平。如果有新项目要做多源信息融合的火灾预测我也会用今天梳理的这套流程先按物理意义选特征源再用速率检测做粗筛最后 LSTM 提时序特征、RBF-BP 做融合、模糊逻辑兜底决策逐层验证后再端到端训练。希望这两套流程里的参数权衡和踩坑记录帮到你对照着复现能少走一段弯路。本文还有配套的精品资源点击获取