机器学习人工智能【免费下载链接】nupic-legacyNumenta Platform for Intelligent Computing is an implementation of Hierarchical Temporal Memory (HTM), a theory of intelligence based strictly on the neuroscience of the neocortex.项目地址https://gitcode.com/gh_mirrors/nu/nupic-legacy点击查看免费下载导读在 NuPICNumenta Platform for Intelligent Computing的 HTM 应用开发中modelParams是一份总控配置文件它一次性声明了数据如何被编码encoders、空间池化与时间记忆网络的规模与学习参数SP/TM、以及分类器如何输出多步预测SDRClassifier。本篇文章以仓库 Quick Start 中实际使用的 docs/examples/params/model.yaml 为蓝本逐字段拆解这份参数文件的含义、默认值与底层实现并给出基于ModelFactory的完整建模、喂数据与结果解析流程帮助你从零搭建一个可运行的标量多步预测模型。1. 这份参数文件的角色一切模型构建的入口docs/source/quick-start/example-model-params.rst这份文档本身很短它的核心价值在于它锚定了整个 Quick Start 的模型配置。文档明确指出这份raw model params文件被 Quick Start 教程docs/source/quick-start/index.rst 下的 OPF 入门直接引用其作用是用这些参数创建一个HTMPredictionModel实例。从实现上看参数文件最终会被ModelFactory.create()消费。在 model_factory.py 中工厂根据顶层model字段分派模型类model: HTMPrediction→HTMPredictionModel本文件使用的类型model: TwoGram→TwoGramModelmodel: PreviousValue→PreviousValueModel随后modelClass(**modelConfig[modelParams])会把modelParams整个字典作为关键字参数传给模型构造函数。因此参数文件本质上是模型类型 模型参数两个层面的描述字典。由该模型创建的 HTM 网络结构见原文档描述为按sensorParams.encoders声明的一组编码器一个SpatialPooler空间池化器由spParams配置一个BacktrackingTM或BacktrackingTMCPP时间记忆由tmParams配置当modelParams.tmParams.temporalImp cpp时使用 C 实现一个 SDR 分类器由clParams配置负责输出多步预测。文档还建议想要了解每个算法的更细粒度参数直接查阅SpatialPooler、BacktrackingTM、SDRClassifier的 API 文档对应实现分别位于 src/nupic/algorithms/spatial_pooler.py、src/nupic/algorithms/backtracking_tm.py 与 src/nupic/algorithms/sdr_classifier.py。2. 顶层字段model、version 与 aggregationInfo# Type of model that the rest of these parameters apply to. model: HTMPrediction # Version that specifies the format of the config. version: 1model声明模型类型对应ModelFactory的分派逻辑见上文此处为HTMPredictionversion配置格式版本号当前为1。2.1 aggregationInfo时间聚合配置aggregationInfo指定哪个字段用哪种聚合方法以及聚合周期。仓库内的示例配置如下aggregationInfo: fields: - [consumption, mean] microseconds: 0 milliseconds: 0 minutes: 0 months: 0 seconds: 0 hours: 1 days: 0 weeks: 0 years: 0字段说明也见原文档中的注释示例fields一组[字段名, 聚合函数]对。例如[consumption, mean]表示对consumption字段按平均值聚合另一个典型用法是[gym, first]取首个值或[consumption, sum]求和microseconds / milliseconds / minutes / months / seconds / hours / days / weeks / years聚合周期各时间单位未列出/为 0 的单位默认值为 0。此处hours: 1表示以 1 小时为聚合窗口。原文档指出更完整的聚合方法说明见nupic.data.aggregator对应实现位于 src/nupic/data/aggregator.py。predictAheadTime: nullpredictAheadTime用于声明预测提前的时间跨度此处为null表示不启用基于时间的提前预测多步预测的步数由后文clParams.steps控制。3. modelParams.inferenceType模型执行的推理类型modelParams: inferenceType: TemporalMultiStep原文档列出了全部合法取值这与 opf_utils.py 中InferenceType枚举完全一致TemporalNextStep时序单步预测TemporalClassification时序分类NontemporalClassification非时序分类TemporalAnomaly时序异常检测NontemporalAnomaly非时序异常检测TemporalMultiStep时序多步预测本示例使用NontemporalMultiStep非时序多步预测。从源码看InferenceType维护了时序型推理类型的集合__temporalInferenceTypes并可通过isTemporal()查询opf_utils.py。本示例选择TemporalMultiStep因此分类器会同时输出未来 1 步与 5 步的预测。4. sensorParams输入传感器与编码器配置sensorParams: verbosity: 0 encoders: consumption: fieldname: consumption name: consumption resolution: 0.88 seed: 1 type: RandomDistributedScalarEncoder timestamp_timeOfDay: fieldname: timestamp name: timestamp_timeOfDay timeOfDay: [21, 1] type: DateEncoder timestamp_weekend: fieldname: timestamp name: timestamp_weekend type: DateEncoder weekend: 21verbosity传感器诊断输出级别0表示静默[1..6]递增输出详细程度。4.1 consumption随机分布式标量编码器consumption字段热瑜伽馆的耗电量使用RandomDistributedScalarEncoder。它把浮点标量映射为随机分布的 SDR 比特数组是ScalarEncoder的替代方案——不需要预设 min/max 范围范围可以动态扩展详见 random_distributed_scalar.py。resolution: 0.88输出分辨率。落在[offset-resolution/2, offsetresolution/2]内的数值进入同一个 bucket相邻 bucket 相差 1 个比特seed: 1随机数种子保证多次运行编码结果可复现。该编码器还支持w输出置位比特数通常为 21、n表示总比特数须n 6*w、offset等可选参数本例只给出resolution与seed其余取默认值。4.2 timestamp日期编码器时间与星期timestamp字段被两个DateEncoder编码器分别消费timestamp_timeOfDay编码一天内的时间timeOfDay: [21, 1]即把一天分为 21 个周期、宽度为 1timestamp_weekend编码周末/工作日差异weekend: 21周末特征占 21 个比特。Quick Start 的 OPF 教程docs/source/quick-start/opf.rst特别指出这三个语义值会通过MultiEncoder组合为统一输入空间——标量consumption被编码成 SDR两个时间维度分别编码一天中的时刻与是否周末。4.3 sensorAutoReset自动重置sensorAutoReset: null值为null或任何求值为 0 的值时禁用RecordSensor自动生成的重置若要启用使用时间单位键组合例如每 1.5 天重置一次sensorAutoReset: days: 1 hours: 12合法键为days / hours / minutes / seconds / milliseconds / microseconds / weeks。重置信号对 TM 学习序列边界至关重要——当数据本身没有显式 reset 字段时可依赖该机制周期性重置时间记忆。5. spEnable 与 spParams空间池化器spEnable: true spParams: inputWidth: 946 columnCount: 2048 spVerbosity: 0 spatialImp: cpp globalInhibition: 1 localAreaDensity: -1.0 numActiveColumnsPerInhArea: 40 seed: 1956 potentialPct: 0.85 synPermConnected: 0.1 synPermActiveInc: 0.04 synPermInactiveDec: 0.005 boostStrength: 3.0spEnable是否创建 SP 区域true启用。inputWidth: 946SP 输入宽度由上游编码器输出的总比特数决定三个编码器输出的拼接长度。columnCount: 2048SP 列数。原文档提醒OPF 只会创建一维输入与一维空间池化结构因此在 SP 创建时columnCount被转译为columnDimensions(columnCount,)inputDimensions(inputWidth,)。spatialImp: cppSP 实现为 Cnupic.bindings。globalInhibition: 1启用全局抑制1 全局0 局部。localAreaDensity: -1.0与numActiveColumnsPerInhArea: 40抑制区域激活列数控制。localAreaDensity-1.0表示不使用密度方式而是直接指定每抑制区域激活numActiveColumnsPerInhArea40列。potentialPct: 0.85每列潜在连接占输入的比例。synPermConnected: 0.1突触被视为已连接的持久化阈值。synPermActiveInc: 0.04突触因活跃输入而增加的持久化量。synPermInactiveDec: 0.005突触因非活跃输入而衰减的持久化量。boostStrength: 3.0列提升强度用于维持各列激活频率均衡。6. tmEnable 与 tmParams时间记忆TMtmEnable: true tmParams: verbosity: 0 columnCount: 2048 cellsPerColumn: 32 inputWidth: 2048 seed: 1960 temporalImp: cpp newSynapseCount: 20 initialPerm: 0.21 permanenceInc: 0.1 permanenceDec: 0.1 maxAge: 0 globalDecay: 0.0 maxSynapsesPerSegment: 32 maxSegmentsPerCell: 128 minThreshold: 12 activationThreshold: 16 outputType: normal pamLength: 1tmEnable是否创建 TM 区域。columnCount: 2048列数与 SP 列数一致SP 输出即 TM 输入。cellsPerColumn: 32每列细胞数决定 TM 的序列记忆容量。inputWidth: 2048输入宽度即 SP 输出的激活列数上限。temporalImp: cppTM 实现为 C。这正是原文档提到的切换点——当temporalImp cpp时使用BacktrackingTMCPP否则使用纯 Python 的BacktrackingTM分别见 src/nupic/algorithms/backtracking_tm_cpp.py 与 src/nupic/algorithms/backtracking_tm.py。newSynapseCount: 20学习新序列时每 segment 新增的突触数。initialPerm: 0.21新突触的初始持久化值。permanenceInc / permanenceDec: 0.1突触活跃/不活跃时的持久化增减量。maxAge: 0segment 最大年龄0 表示不限制配合globalDecay使用。globalDecay: 0.0全局持久化衰减系数。maxSynapsesPerSegment: 32每个 segment 最大突触数。maxSegmentsPerCell: 128每个细胞最大 segment 数。minThreshold: 12segment 被认为匹配所需的最小活跃突触数学习触发阈值。activationThreshold: 16segment 产生细胞激活所需的活跃突触数。outputType: normalTM 输出类型normal为标准预测输出。pamLength: 1预测关联记忆predicted active memory长度。这些参数的详细语义可对照 src/nupic/algorithms/backtracking_tm.py 的构造函数文档。7. clParamsSDR 分类器与多步预测clParams: verbosity: 0 regionName: SDRClassifierRegion alpha: 0.1 steps: 1,5 maxCategoryCount: 1000 implementation: cppregionName: SDRClassifierRegion分类器以 region 形式挂载到网络中对应 src/nupic/regions/sdr_classifier_region.py。alpha: 0.1分类器权重衰减/学习率参数控制历史预测对当前权重的影响。steps: 1,5预测未来步数集合。这里表示同时预测 1 步与 5 步之后的数值。原文档Quick Start OPF 教程说明该值决定results对象中以1和5为键分别存放预测信息。maxCategoryCount: 1000最大类别数防止类别数量无限增长。implementation: cpp使用 C 实现对应 src/nupic/algorithms/sdr_classifier.py 描述的算法由 C 绑定加速。7.1 trainSPNetOnlyIfRequestedtrainSPNetOnlyIfRequested: false若设为true则除非用户显式请求 SP 指标否则不创建 SP 网络适用于只关心 TM 预测结果的场景默认false表示始终构建完整网络。8. 端到端使用从参数文件到运行结果8.1 加载参数并创建模型OPF 入门教程docs/source/quick-start/opf.rst给出的标准流程是把上面的参数写入 YAML 文件例如params.yaml然后用ModelFactory创建模型参考 docs/examples/opf/create-model-example.pyimport yaml from nupic.frameworks.opf.model_factory import ModelFactory with open(params.yaml, r) as f: modelParams yaml.safe_load(f) model ModelFactory.create(modelParams) # 指定要预测的字段 model.enableInference({predictedField: consumption})ModelFactory.create()返回HTMPredictionModel实例enableInference()必须调用用于声明predictedField。从 htm_prediction_model.py 的实现可见predictedField会被下发到 Sensor region 的setParameter(predictedField, ...)。8.2 喂数据并解析结果完整示例见 docs/examples/opf/complete-opf-example.py。它从docs/examples/data/gymdata.csv读取数据对每条记录调用model.run(modelInput)然后从result.inferences中取两类结果multiStepBestPredictions最后一行数据的最佳预测值键为步数如1、5multiStepPredictions最后一行数据的所有预测及其置信度。关键代码逻辑bestPredictions result.inferences[multiStepBestPredictions] allPredictions result.inferences[multiStepPredictions] oneStep bestPredictions[1] oneStepConf allPredictions[1][oneStep] fiveStep bestPredictions[5] fiveStepConf allPredictions[5][fiveStep]运行后控制台输出类似来自原文档1-step: 35.7 (65.53%) 5-step: 35.7 (99.82%) 1-step: 38.9 (65.73%) 5-step: 23.5 (99.82%) 1-step: 36.6 (99.11%) 5-step: 35.7 (99.81%)8.3 输入数据格式约定为了让 Sensor 正确解析输入 CSV 必须遵守 docs/source/quick-start/example-data.rst 规定的三行头结构gymdata.csv即此格式见 docs/examples/data/gymdata.csvtimestamp,consumption datetime,float T, 7/2/10 0:00,21.2第 1 行字段名必须与encoders中定义的fieldname对应第 2 行字段类型datetime、int、float、bool、stringdatetime支持多种格式字符串如%m/%d/%y %H:%M第 3 行特殊标志——Rreset字段为真时插入重置、Ssequence字段变化时插入重置、Ttimestamp作为时间戳用于聚合等、Ccategory使用类别编码器第 4 行起为数据行。9. 快速调参建议改变预测步数修改clParams.steps如1,3,5结果字典会同步增加对应键。切换算法实现spParams.spatialImp与tmParams.temporalImp在cpp与py之间切换可在性能与纯 Python 可读性之间取舍。调整序列记忆容量增大cellsPerColumn、maxSegmentsPerCell可记忆更长序列但会提高内存与计算开销。平衡 SP 稀疏度numActiveColumnsPerInhArea与synPermConnected共同决定激活列数量与稳定性是影响预测质量最敏感的旋钮之一。重置策略若数据自带 reset/sequence 标志列在 CSV 头第 3 行标注R或S否则可配置sensorAutoReset周期性重置。需要验证各参数行为时可直接修改 docs/examples/params/model.yaml 后运行 docs/examples/opf/complete-opf-example.py该脚本默认读取 3000 条 gym 数据并打印 1 步/5 步预测再观察预测与置信度变化。结语example-model-params虽只是一份参数文件却是理解 NuPIC OPF 架构的最佳入口model决定模型家族sensorParams.encoders决定输入语义如何变成 SDRspParams/tmParams分别控制空间池化与时间记忆的行为clParams决定多步预测的输出形式。结合 model_factory.py 的分派逻辑与 htm_prediction_model.py 的推理流程读者可以据此举一反三把同样的参数骨架迁移到异常检测TemporalAnomaly、分类TemporalClassification等其他推理类型上。赞分享机器学习人工智能【免费下载链接】nupic-legacyNumenta Platform for Intelligent Computing is an implementation of Hierarchical Temporal Memory (HTM), a theory of intelligence based strictly on the neuroscience of the neocortex.项目地址https://gitcode.com/gh_mirrors/nu/nupic-legacy点击查看免费下载相关推荐如何快速搭建黑苹果的 OpenCore EFIOpCore-Simplify 完整上手指南如何快速搭建黑苹果的 OpenCore EFIOpCore Simplify 完整上手指南 OpCore Simplify 是一个 Python 命令行工具开发工具CLIKaggle CLI 模型元数据完全指南读懂 model-metadata.json 与 model-instance-metadata.jsonKaggle CLI 模型元数据完全指南读懂 model metadata.json 与 model instance metadata.json 本文基于CLI开发工具数据科学如何按 MODEL_SPEC 构建本地模型目录并用 --model 参数加载到 Tabby如何按 MODEL_SPEC 构建本地模型目录并用 model 参数加载到 Tabby 你手里有一个 GGUF 格式的大模型文件想让它跑在自己的 Tabby人工智能大模型本地部署模型推理服务后端RAG交互助手上一篇RPG Maker MV 加密资源解密30 秒免费一键还原 .rpgmvp 图片与音频下一篇Visual C 运行库安装失败怎么办一条命令走完诊断、清理与重装创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?