You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PHP wrapper for FANN,如何为神经网络特定输出忽略指定输入?

解决FANN神经网络指定输出仅使用部分输入的问题

针对你想用PHP FANN库实现“特定输出仅依赖部分输入”的需求,有三种实用方案:

方案1:拆分独立神经网络(最推荐)

直接搭建多个独立的神经网络,每个网络对应一组输出任务,输入仅保留该任务需要的传感器数据:

  • 针对“房间是否有人”的输出,搭建一个输入层为9个节点(去掉温度传感器数据)、输出层为1个节点的网络
  • 针对剩下的4种状态(如是否过热等),搭建一个输入层为10个节点、输出层为4个节点的网络

对应修改训练数据

原训练数据格式:

1 10 5
57 740.02 25.9 95 0.09 747 21.1 5.4 0 42.17
1 0 1 1 0

拆分后,第一个网络的训练数据(判断是否有人):

1 9 1
57 740.02 95 0.09 747 21.1 5.4 0 42.17  # 去掉了温度值25.9
1  # 对应原输出的第一个值

第二个网络的训练数据(处理剩余4种状态):

1 10 4
57 740.02 25.9 95 0.09 747 21.1 5.4 0 42.17
0 1 1 0  # 对应原输出的后4个值

这种方式逻辑清晰,训练和推理时互不干扰,后期维护也简单。

方案2:固定特定连接权重为0

通过手动设置并固定温度输入节点与“房间是否有人”输出节点(含隐藏层对应连接)的权重为0,让该输入无法影响目标输出:

  1. 创建好10输入5输出的网络后,找到温度输入节点到目标输出节点、以及到所有隐藏层节点的连接
  2. 使用fann_set_weight()将这些连接的权重设为0
  3. 训练时通过FANN的参数设置,禁止这些权重被更新(比如自定义权重更新函数,跳过这些权重的修改)

这种方法适合不想拆分网络的场景,但需要熟悉FANN的权重操作细节,处理隐藏层连接时比较繁琐。

方案3:预处理输入数据

在喂入网络前,针对不同输出任务动态修改输入:

  • 当计算“房间是否有人”的概率时,将温度输入固定为一个常数(比如所有训练样本的温度均值),让该输入不再提供有效信息
  • 训练阶段也要同步处理:训练“是否有人”的输出时,所有样本的温度值都替换为这个常数

这种方法不用修改网络结构,但本质是让网络学习时忽略该输入,效果略逊于拆分网络,适合快速验证需求的场景。

内容的提问来源于stack exchange,提问作者BArtWell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:22:24