ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Synaptic 神经网络库 Trainer 训练器完全指南:train/trainAsync/test 方法、全部选项与 XOR/DSR/ERG/timingTask 内置任务

Synaptic 神经网络库 Trainer 训练器完全指南:train/trainAsync/test 方法、全部选项与 XOR/DSR/ERG/timingTask 内置任务 机器学习深度学习【免费下载链接】synapticarchitecture-free neural network library for node.js and the browser项目地址https://gitcode.com/gh_mirrors/sy/synaptic点击查看免费下载本指南以仓库 wiki/Ja-JP/trainer.md与 wiki/Zh-CN/trainer.md 内容对应为核心系统讲解 Synaptic 中Trainer训练器的完整用法如何用任意架构的网络训练任意数据集train/trainAsync/test三个核心方法及其全部选项学习率、迭代次数、误差、shuffle、cost、log、schedule以及 XOR、DSR、ERG、timingTask 四个内置基准任务。读完本指南你将能够在 Node.js 与浏览器中独立完成网络的训练、评估与架构性能对比并能结合 src/Trainer.js 的源码理解每一步的底层机制。一、Trainer 是什么架构无关的通用训练器Synaptic 是一个面向node.js 与浏览器的架构无关architecture-free神经网络库其核心卖点之一就是Trainer无论你的网络是前馈的 Perceptron、带上下文的 LSTM还是其他任意架构都可以用同一个 Trainer 来训练。你只需要提供一个待训练的Network实例var trainer new Trainer(myNetwork);Trainer同时内置了多个用于测试网络性能的基准任务benchmark tasks方便你横向比较不同架构的表现。从 src/Trainer.js 的源码可以看到Trainer的构造函数还接受一个可选的options对象用于设置默认训练参数constructor(network, options) { options options || {}; this.network network; this.rate options.rate || .2; // 默认学习率 0.2 this.iterations options.iterations || 100000; // 默认最大迭代 10 万次 this.error options.error || .005; // 默认最小误差 0.005 this.cost options.cost || null; // 默认成本函数train 时回退到 MSE this.crossValidate options.crossValidate || null; // 交叉验证配置 }也就是说你既可以在构造时预设参数也可以在每次train调用时用 options 覆盖后者优先级更高。二、train训练任意数据集到网络train方法把任意训练集训练到网络上。训练集是一个由包含input与output属性的对象组成的数组。以下是用 Trainer 训练 XOR 的经典示例var myNetwork new Architect.Perceptron(2, 2, 1) var trainer new Trainer(myNetwork) var trainingSet [ { input: [0,0], output: [0] }, { input: [0,1], output: [1] }, { input: [1,0], output: [1] }, { input: [1,1], output: [0] }, ] trainer.train(trainingSet);训练集也可以像 test/synaptic.js 中那样通过new Layer(...)project()手工搭建网络后喂给 Trainer二者等价。你还可以通过第二个参数传入一个 options 对象精细控制训练过程trainer.train(trainingSet,{ rate: .1, // 学习率 iterations: 20000, // 最大迭代次数 error: .005, // 最小误差 shuffle: true, // 每轮迭代后是否打乱训练集 log: 1000, // 每 1000 次迭代打印一次日志 cost: Trainer.cost.CROSS_ENTROPY // 成本函数 });选项详解Options选项含义取值与说明rate学习率可以是静态数字也可以是数组按迭代次数分段切换如[0.01, 0.005]还可以是回调函数(iterations, error) rateiterations最大迭代次数数字训练循环的硬上限error最小误差数字当平均误差低于该值即提前停止训练shuffle是否打乱训练集true时每次迭代后打乱数据集适合训练顺序无意义的数据序列尤其对 LSTM 这类带上下文记忆的网络有用cost成本函数内置Trainer.cost.CROSS_ENTROPY、Trainer.cost.MSE、Trainer.cost.BINARY三种也可自定义(targetValues, outputValues) errorlog日志频率每 N 次迭代在 console 输出一次 error、iterations 与 rateschedule自定义计划任务每 N 次迭代执行一次回调返回true可中止训练学习率rate的三种形态静态数字整个训练过程学习率恒定默认0.2。数组动态切换从 src/Trainer.js 看Trainer 将总迭代数this.iterations按数组长度分桶bucketSize Math.floor(this.iterations / this.rate.length)每经过一个桶就切换到数组中的下一个学习率。测试 test/synaptic.js 验证了rate: [0.01, 0.005]在 1000 次迭代后确实从 0.01 切到 0.005。回调函数(iterations, error) rate每次迭代由 Trainer 传入当前迭代次数与上一轮误差来动态计算学习率src/Trainer.js适合实现学习率衰减/调度策略。test/synaptic.js 有对应的回调切换测试。成本函数cost三种内置成本函数定义在 src/Trainer.js训练中默认未指定时回退为MSETrainer.cost.MSETrainer.cost.MSE均方误差Σ(target - output)² / output.length最常见的回归误差。Trainer.cost.CROSS_ENTROPY交叉熵对每个输出维度累加-(target·log(output) (1-target)·log(1-output))源码中给对数加上了1e-15的小偏移量以避免Math.log(0)导致无穷大src/Trainer.js。Trainer.cost.BINARY二分类命中计数统计Math.round(target*2) ! Math.round(output*2)的失配个数适合离散分类场景。你还可以传入自己的成本函数签名是(targetValues, outputValues) error。自定义计划任务scheduleschedule让你在每个固定间隔执行自定义逻辑——可以写自定义日志也可以基于传入的data做分析。data对象包含error、iterations和当前rate回调返回true时训练立即中止。典型用法是在误差开始上升等特殊条件下提前停止训练schedule: { every: 500, // 每 500 次迭代执行一次 do: function(data) { // 自定义日志 console.log(error, data.error, iterations, data.iterations, rate, data.rate); if (someCondition) return true; // 中止训练 } }对应测试 test/synaptic.js 验证了 schedule 能分别在 3000、2000 次迭代处精确中止训练且do不返回值时训练正常跑完。返回值训练完成后train返回一个包含三项统计的对象{ error: error, // 最终平均误差 iterations: iterations, // 实际执行的迭代次数 time: Date.now() - start // 训练耗时毫秒 }底层训练循环源码视角从 src/Trainer.js 可以看到核心循环逻辑while ((!abort iterations this.iterations error this.error)) { ... error this._trainSet(set, currentRate, cost); // 一次完整遍历训练集 error / currentSetSize; // 平均误差 ... }单轮epoch的核心由_trainSet完成src/Trainer.js对每个样本执行network.activate(input)前向传播再network.propagate(currentRate, target)反向传播累加成本函数误差。这正是 Synaptic 通用训练算法的落点——任何实现了activate/propagate的网络都能被 Trainer 训练。三、trainAsync用 WebWorker 异步训练仅浏览器trainAsync与train功能完全相同但它把训练放到WebWorker中执行因此不会阻塞浏览器 UI。用train跑超长训练时浏览器界面可能冻结而trainAsync不会。注意两点限制在 node.js 中不可用且浏览器必须支持Blob与WebWorker。var trainer new Trainer(myNetwork); trainer.trainAsync(set, options) .then(results console.log(done!, results)它与train拥有相同的签名并支持相同的选项区别仅在于不直接返回训练结果而是返回一个 resolve 到训练结果的Promise。用trainAsync训练 XOR 的完整示例var myNetwork new Architect.Perceptron(2, 2, 1) var trainer new Trainer(myNetwork) var trainingSet [ { input: [0,0], output: [0] }, { input: [0,1], output: [1] }, { input: [1,0], output: [1] }, { input: [1,1], output: [0] }, ] trainer.trainAsync(trainingSet) .then(results console.log(done!, results))底层机制trainAsync在 src/Trainer.js 中通过workerTrain实现先对网络执行network.optimize()把整个网络行为硬编码编译进单个优化函数见 src/Network.js再调用network.worker(...)生成 Worker通过postMessage启动训练从onmessage中接收done/log/schedule三种消息src/Trainer.js。源码中还提示旧接口workerTrain已弃用应改用trainAsync。四、test评估数据集上的网络表现test接受与train(dataSet, options)相同的参数遍历数据集激活网络只做前向传播不更新权重返回耗时与误差。默认使用 MSE但也可以在 options 里像train()一样指定成本函数。var results trainer.test(testSet, { cost: Trainer.cost.CROSS_ENTROPY }); // results: { error: ..., time: ... }从 src/Trainer.js 可以看到实现对每个样本network.activate(input)后累加成本误差并求平均。test也常被timingTask等内置任务内部复用。五、内置基准任务Trainer附带四个内置任务用于快速测试与横向比较不同架构的网络性能。5.1 XOR把 XOR 训练到网络上特别适合测试不同架构并比较它们的性能var trainer new Trainer(myNetwork); trainer.XOR(); // {error: 0.004999821588193305, iterations: 21333, time: 111}源码 src/Trainer.js 显示XOR()要求网络2 个输入、1 个输出否则抛出Incompatible network (2 inputs, 1 output)内部默认iterations: 100000、shuffle: true、cost: MSE返回与train相同的{error, iterations, time}对象。仓库测试 test/synaptic.js 用new Perceptron(2, 3, 1)训练后断言四个输入组合的输出分别在 0.49/0.51 阈值两侧。5.2 DSRDistracted Sequence Recall干扰序列回忆DSR训练网络完成Discrete Sequence Recall任务——用于检验神经网络中的上下文记忆能力trainer.DSR({ targets: [2,4], distractors: [3,5], prompts: [0,1], length: 10 });源码 src/Trainer.js 给出了更完整的默认参数与返回结构默认值targets: [2,4,7,8]、distractors: [3,5,6,9]、prompts: [0,1]、length: 24、success(判定标准): 0.95、iterations: 100000、rate: .1、cost: CROSS_ENTROPY。任务逻辑生成由干扰符distractor与随机位置目标符target构成的序列末尾追加提示符prompt网络需在看过完整序列后正确回忆目标。返回值{iterations, success, error, time}。仓库测试 test/synaptic.js 用new LSTM(5, 3, 2)配合rate: .17、iterations: 250000完成 DSR随后逐一校验序列每一步的预测。由于 DSR 需要记忆上下文LSTM 这类循环架构是它的典型应用对象。5.3 ERGEmbedded Reber Grammar嵌入式 Reber 文法ERG训练网络通过Embedded Reber Grammar测试——一种经典的递归文法识别任务考验网络对序列结构的建模能力trainer.ERG();源码 src/Trainer.js 显示其默认参数为iterations: 150000、error(判定标准): .05、rate: .1、log: 500、cost: CROSS_ENTROPY内部用Node类构建 Reber 文法与嵌入式 Reber 文法的状态图随机生成合法序列符号表B/P/T/X/S/E映射为 6 维 one-hot 向量训练网络做逐符号的下一步预测。返回值除了{iterations, error, time}还额外附带两个有用工具{ iterations, error, time, test: test, // 测试一个字符串是否符合文法 generate: generate // 生成一条合法的 ERG 序列 }5.4 timingTask计时任务timingTask挑战网络完成一个timing task模拟信号持续时长类的时间序列感知任务用于考察网络对时序信息的编码能力。它要求网络2 个输入、1 个输出否则抛出Invalid Network: must have 2 inputs and one output见 src/Trainer.js。源码 src/Trainer.js 展示了其内部机制与参数内部用getSamples生成训练/测试样本第一个输入在随机时长窗口内置 1第二个输入编码持续时长比例n/20输出在窗口内为0.5以此模拟计时感知。默认参数iterations: 200、error: .005、rate: [.03, .02]动态学习率数组、log: 10、trainSamples: 7000、testSamples: 1000。返回值{train: {error, iterations, time}, test: {error, time}}其中train是内部调用this.train(...)的结果test是this.test(...)在独立测试集上的结果。仓库测试 test/synaptic.js 用new LSTM(2, 7, 1)验证训练应在 200 次迭代内完成且测试集误差小于 0.05。六、进阶交叉验证crossValidate虽然关联文档未展开但源码与测试都支持crossValidate选项是train的实用扩展。在 src/Trainer.js 中传入crossValidate: {testSize, testError}后Trainer 会把数据集按testSize比例切分为训练集与测试集每轮迭代在测试集上评估误差当测试误差低于testError时提前停止src/Trainer.js。trainer.train(trainingSet, { iterations: 2000, error: 1e-6, cost: Trainer.cost.MSE, crossValidate: { testSize: .3, // 30% 数据用于验证 testError: 1e-6 // 测试误差阈值 } });对应测试见 test/synaptic.jsSIN 函数回归 交叉验证。七、实践小结最小可用流程创建网络 →new Trainer(network)→ 准备{input, output}数组 →trainer.train(set, options)用trainer.test(set)评估。浏览器长训练用trainAsync返回 Promise基于 WebWorker 与 Blob避免 UI 冻结node.js 环境请用train。动态学习率rate支持数组按迭代分桶切换与回调(iterations, error) rate详见 src/Trainer.js。提前停止用schedule.everydo返回true实现条件中止或设置error阈值自然收敛。架构对比用XOR()、DSR()、ERG()、timingTask()四个内置任务快速量化不同网络如 Perceptron 与 LSTM在同一任务上的迭代次数、误差与耗时仓库测试 test/synaptic.js 是可直接运行的参考范例。赞分享机器学习深度学习【免费下载链接】synapticarchitecture-free neural network library for node.js and the browser项目地址https://gitcode.com/gh_mirrors/sy/synaptic点击查看免费下载相关推荐Synaptic.js Trainer 训练器完全指南从零训练任意神经网络与内置基准任务Synaptic.js Trainer 训练器完全指南从零训练任意神经网络与内置基准任务 导读 Trainer训练器 是 Synaptic https:/机器学习深度学习Synaptic 中文入门指南无架构 JavaScript 神经网络库的构建、训练与内置架构全解析Synaptic 中文入门指南无架构 JavaScript 神经网络库的构建、训练与内置架构全解析 导读 本文以 wiki/Zh CN/home.md ht机器学习深度学习Synaptic.js训练器完全指南如何高效训练神经网络模型Synaptic.js训练器完全指南如何高效训练神经网络模型 想要构建强大的神经网络应用却不知从何开始Synaptic.js训练器正是您需要的解决方案作为机器学习深度学习上一篇如何完整导出QQ空间历史说说GetQzonehistory 快速上手指南下一篇pytest 实战三步跑通第一个 Python 测试用例让每次失败都有据可查创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表