资讯详情

资讯详情

TensorFlow.js Layers 高阶模型 API 完全指南:构建、训练与加载 Keras 模型

TensorFlow.js Layers 高阶模型 API 完全指南构建、训练与加载 Keras 模型【免费下载链接】tfjsA WebGL accelerated JavaScript library for training and deploying ML models.项目地址: https://gitcode.com/gh_mirrors/tf/tfjsTensorFlow.js Layers 是 TensorFlow.js 生态中基于tfjs-core构建的高阶模型 API允许开发者在浏览器中直接构建、训练和部署深度学习模型。本指南以 tfjs-layers/README.md 为主体结合仓库源码深入讲解三种导入方式、Sequential 模型构建、模型编译训练、预训练 Keras 模型加载与模型序列化格式帮助读者完整掌握这套 API 的实战用法与底层原理。一、TensorFlow.js Layers 是什么TensorFlow.js Layers 是整个 TensorFlow.js 生态中的高层次 API层它建立在 tfjs-core张量运算与自动微分内核之上向用户提供一套面向机器学习建模的抽象接口让开发者无需直接操作底层张量即可完成模型的构建、训练与推理。从设计上看TensorFlow.js Layers 参照了 Keras 与tf.keras的 API 风格因此具备两个直接收益API 心智模型一致熟悉 Keras 的开发者可以零门槛迁移到 JavaScript 环境sequential、model、compile、fit、predict等概念一一对应模型互通可以直接加载由 Python 端 Keras /tf.keras训练并保存的模型文件在浏览器中继续做推理、评估或迁移学习。从源码结构看Layers 包的公开入口集中在 tfjs-layers/src/index.ts它统一导出constraints、initializers、layers、metrics、models、regularizers六大命名空间以及LayersModel、Sequential、RNN、LayerVariable、Callback等核心类型构建了一个完整的模型开发工具链。二、三种导入方式及取舍官方 README 给出了三种导入 TensorFlow.js Layers 的方式本小节结合 tfjs-layers/package.json 给出具体说明。方式一通过 union 包tensorflow/tfjs导入最便捷tensorflow/tfjs是 Core 与 Layers 的合并包一次安装即可同时获得张量运算与高层次建模能力import * as tf from tensorflow/tfjs; // 直接使用 tf.sequential / tf.layers / tf.loadLayersModel 等优点无需关心包之间的依赖关系开箱即用。代价bundle 体积较大——README 明确指出我们未来还会向该包中加入更多子包因此追求极致包体时不应选择此方式。方式二独立安装tensorflow/tfjs-layers按需控制体积npm install tensorflow/tfjs-layers此时需要同时安装tensorflow/tfjs-core因为根据 tfjs-layers/package.json 中的声明tfjs-layers以tensorflow/tfjs-core为peerDependencies对等依赖必须由使用者显式提供npm install tensorflow/tfjs-layers tensorflow/tfjs-coreimport * as tf from tensorflow/tfjs-layers; import tensorflow/tfjs-core;事实上tfjs-layers/src/index.ts 在模块顶层就执行了import tensorflow/tfjs-core以及import tensorflow/tfjs-core/dist/register_all_gradients这意味着 Layers 包本身强依赖 Core 的注册环境——这也解释了为何 peer dependency 是强制性的。方式三通过 CDN 以 standalone 方式引用可以直接在 HTML 中以script标签方式引入构建产物。根据 tfjs-layers/package.json 的unpkg/jsdelivr字段standalone 构建产物为dist/tf-layers.min.js例如script srchttps://unpkg.com/tensorflow/tfjs-layers/dist/tf-layers.min.js/script选择建议日常开发与演示用方式一对包体敏感的生产项目用方式二无需模块打包器如纯静态页面演示时用方式三。三、构建、训练并执行一个模型README 提供了一个玩具级线性回归示例仅用一层dense拟合y 2x - 1。这是理解 Layers API 完整生命周期的经典入门路径完整代码与逐步拆解如下import * as tf from tensorflow/tfjs; // 1. 创建 Sequential 容器它可以不断向其中添加层 const model tf.sequential(); // 2. 添加一个 1 个输出单元的 Dense 层 model.add(tf.layers.dense({units: 1, inputShape: [1]})); // 3. 指定损失函数与优化器 model.compile({loss: meanSquaredError, optimizer: SGD}); // 4. 生成合成训练数据xs - ys 满足 ys 2*xs - 1 const xs tf.tensor2d([[1], [2], [3], [4]], [4, 1]); const ys tf.tensor2d([[1], [3], [5], [7]], [4, 1]); // 5. 训练 500 个 epoch await model.fit(xs, ys, {epochs: 500}); // 6. 推理对新的输入做预测 const output model.predict(tf.tensor2d([[5]], [1, 1])); output.print();各步骤背后的关键参数tf.layers.dense的inputShape首个层必须显式给出输入形状不含 batch 维。本例inputShape: [1]表示每个样本是 1 维向量。从 tfjs-layers/src/exports.ts 的文档注释可知首层除inputShape外也可以使用batchInputShape如[null, 1]null表示 batch 维未定或对部分层类型使用inputDim首层之后各层由框架自动做形状推断。compile的loss与optimizermeanSquaredError是回归任务的常用损失optimizer: SGD是字符串形式的优化器标识符。在 tfjs-layers/src/optimizers.ts 的getOptimizer中维护了标识符到优化器实例的映射可直接使用的内置优化器及其默认超参数如下标识符底层实现默认学习率来自源码SGDtrain.sgd(0.01)0.01Adagradtrain.adagrad(0.01)0.01Adadeltatrain.adadelta(1, 0.95, epsilon())1lr 参数Adamtrain.adam(0.001, 0.9, 0.999, epsilon())0.001Adamaxtrain.adamax(0.002, 0.9, 0.999, epsilon(), 0)0.002RMSProptrain.rmsprop(0.001, 0.9, 0, epsilon())0.001映射表同时注册了小写形式如sgd、adam传入未知名时会抛出ValueError。fit的epochsawait model.fit(xs, ys, {epochs: 500})返回一个PromiseHistory可用await等待训练完成。训练过程中的回调机制如EarlyStopping、CallbackList由 tfjs-layers/src/base_callbacks.ts 与 tfjs-layers/src/callbacks.ts 提供支持按 batch / epoch 粒度介入训练流程。predict的输入形状推理输入[5]需与训练数据形状一致[batch, 1]本例传入tf.tensor2d([[5]], [1, 1])。训练 500 个 epoch 后输出应接近9即2×5-1output.print()会在控制台打印张量值。四、从 Sequential 到任意计算图tf.sequential与tf.modelREADME 只演示了tf.sequential但 tfjs-layers/src/exports.ts 的源码注释系统性地说明了两种模型的区别tf.sequential()只支持线性堆叠——每一层的输出是下一层的输入没有分支与跳跃连接是最简单的拓扑形式tf.model()更通用支持任意无环计算图DAG需要显式指定输入与输出层与层之间通过apply()连接符号张量。典型的多层Sequential写法首层给出输入形状后续层自动推断const model tf.sequential(); model.add(tf.layers.dense({units: 32, inputShape: [50]})); model.add(tf.layers.dense({units: 4})); console.log(JSON.stringify(model.outputs[0].shape)); // [null, 4]等价地也可以用batchInputShape指定含 batch 维的输入形状或直接传入层数组const model tf.sequential({ layers: [ tf.layers.dense({units: 32, inputShape: [50]}), tf.layers.dense({units: 4}), ] });而tf.model的典型用法是先通过tf.input({shape: [...]})创建输入符号张量再逐层apply最后以{inputs, outputs}组装模型const input tf.input({shape: [5]}); const dense1 tf.layers.dense({units: 10, activation: relu}); const dense2 tf.layers.dense({units: 4, activation: softmax}); const output dense2.apply(dense1.apply(input)); const model tf.model({inputs: input, outputs: output}); model.predict(tf.ones([2, 5])).print();注意tf.input仅在tf.model场景下必须使用使用sequential时通过首层的inputShape或inputLayer指定即可tfjs-layers/src/exports_layers.ts 中导出inputLayer。五、加载预训练 Keras 模型并部署到浏览器这是 Layers 包最具实用价值的场景之一把 Python 生态中训练好的 Keras 模型搬到浏览器端做推理或迁移学习。第一步Python 端保存为 TensorFlow.js 格式在 Python 中安装转换工具tensorflowjspip install tensorflowjs随后用其转换 API 将 Keras 模型保存为 TensorFlow.js 格式import tensorflowjs as tfjs # ... 创建并训练你的 Keras 模型 ... # 将 Keras 模型保存为 TensorFlow.js 格式 tfjs.converters.save_keras_model(model, /path/to/tfjs_artifacts/)保存目录下会生成model.json拓扑 权重清单与分片的权重二进制文件之后用任意 Web 服务器托管该目录例如通过 URLhttp://foo.bar/tfjs_artifacts/model.json对外提供访问。第二步浏览器端加载import * as tf from tensorflow/tfjs; const model await tf.loadLayersModel(http://foo.bar/tfjs_artifacts/model.json); // 模型立即可用于推理、评估或重新训练迁移学习loadLayersModel的完整实现位于 tfjs-layers/src/models.ts。从源码可以确认它支持字符串路径与 IOHandler 对象两种入参加载逻辑要点包括字符串路径会先通过io.getLoadHandlers()匹配内置 handler若找不到匹配则回退为相对 HTTP 路径的io.browserHTTPRequest请求model.json中的modelTopology既可以是keras.Model.to_json()风格的纯拓扑也可以是keras.models.save_model()风格的完整模型 JSON若存在model_config字段加载器会优先取该字段作为拓扑加载完成后得到的同样是LayersModel实例可直接执行predict、evaluate、fit。更多模型来源本地存储、IndexedDB 与文件上传loadLayersModel的源码文档还展示了多种加载途径与model.save()成对使用// 保存到浏览器 localStorage 后再加载 await model.save(localstorage://my-model-1); const loadedModel await tf.loadLayersModel(localstorage://my-model-1); // 保存到 IndexedDB 后再加载 await model.save(indexeddb://my-model-1); const loadedModel2 await tf.loadLayersModel(indexeddb://my-model-1); // 从 HTML file input 选择 model.json 与权重文件后加载 const model3 await tf.loadLayersModel( tf.io.browserFiles([jsonUpload.files[0], weightsUpload.files[0]]));这套统一的 IO 抽象tf.io让模型的保存与加载不绑定于具体存储介质极大方便了离线应用与隐私敏感场景。六、模型文件格式Keras JSON 序列化约定要真正理解从 Python Keras 到浏览器的互通机制需要了解 Layers 包对 Keras JSON 格式的实现约定。tfjs-layers/src/keras_format/README.md 对该格式做了精确定义其核心设计如下格式镜像 Python API每个 Python 模型中的类实例都被序列化为一个 JSON 对象包含class_name与其构造参数config*Serialization类型仓库用 TypeScript 接口描述每种类的磁盘 JSON 表示config中的值可以是原始类型、原始类型数组或键值字典如果某个构造参数本身是对象则递归地表示为嵌套的*SerializationFooSerialization { class_name: Foo; config: { bar: string; baz: number[]; qux: QuxSerialization; } }反序列化是纯树状过程解包时需要递归反序列化嵌套对象参数再以还原后的参数调用顶层构造函数。唯一的例外是LayersModel的反序列化——因为它允许层之间互相引用以描述 DAG 计算图配套*Args类型每个*Serialization都对应一个*Args类型表示嵌套对象反序列化完成后真正传给构造函数的参数形态从而保证类型安全。仓库中keras_format/layers/目录下按类别细分了这些序列化类型core_serialization.ts、convolutional_serialization.ts、recurrent_serialization.ts、pooling_serialization.ts、normalization_serialization.ts、embeddings_serialization.ts等任何合法 Keras JSON 都可以借助这些类型以类型安全的方式被解析这也是loadLayersModel与tf.models.modelFromJSON()tfjs-layers/src/exports_models.ts能够还原完整模型结构的底层基础。七、运行时环境配置Layers 包在加载时会通过 tfjs-layers/src/flags_layers.ts 向tfjs-core环境注册一个自有 flagTOPOLOGICAL_SORT_CACHE_MAX_ENTRIES默认值为100用于控制层拓扑排序缓存的条目上限。该 flag 影响计算图执行器tfjs-layers/src/engine/executor.ts在执行模型时的拓扑排序缓存规模在复杂模型与高性能场景下可以通过调整该值进行内存与速度的权衡。八、总结TensorFlow.js Layers 为 JavaScript 开发者提供了完整的 Keras 风格建模体验通过tensorflow/tfjs合并包或tensorflow/tfjs-layerstensorflow/tfjs-core组合导入使用tf.sequential()/tf.model()定义模型经compile与fit完成训练再以predict推理同时凭借对 Keras JSON 序列化格式的完整类型化实现tfjs-layers/src/keras_format/能够无缝加载 Python Keras 训练产出的模型将训练好的深度学习能力直接带到浏览器端。读者可以继续深入 tfjs-layers/src/ 目录下的engine/模型执行引擎、layers/各内置层实现含卷积、循环、NLP 与预处理层与callbacks.ts训练回调等模块进一步掌握每一层与训练机制的实现细节。【免费下载链接】tfjsA WebGL accelerated JavaScript library for training and deploying ML models.项目地址: https://gitcode.com/gh_mirrors/tf/tfjs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →