首页 > 编程语言 >JavaScript 迈入 AI 新纪元

JavaScript 迈入 AI 新纪元

时间:2024-04-11 21:00:25浏览次数:31  
标签:torch nn AI JavaScript 新纪元 let new hidden size

随着人工智能技术的不断进步,JavaScript 也迎来了自己的 AI 时代。

JS-Torch 是一个全新的深度学习库,专为 JavaScript 设计,其语法习惯与广受欢迎的 PyTorch 框架高度相似。这个库提供了一整套深度学习工具,包括可追踪梯度的张量对象、多层网络结构以及自动微分功能。

PyTorch,作为 JS-Torch 的灵感来源,是一个由 Meta AI 团队开发的开源深度学习框架。它以简洁、灵活和易用著称,其动态计算图让神经网络的构建变得更加直观。

JS-Torch 可以通过 npm 或 pnpm 进行安装,也可以在线体验其提供的 Demo。

npm install js-pytorch
pnpm add js-pytorch

在线体验地址:https://eduardoleao052.github.io/js-torch/assets/demo/demo.html

目前,JS-Torch 已经支持了基本的张量操作,如加法、减法、乘法和除法等,以及一些常用的深度学习层,例如nn.Linear、nn.MultiHeadSelfAttention、nn.FullyConnected、nn.Block等。

以下是一个简单的 JS-Torch 使用示例,展示了如何进行自动梯度计算:

// 导入 torch 模块
import { torch } from "js-pytorch";

// 创建张量
let x = torch.randn([8, 4, 5]);
let w = torch.randn([8, 5, 4], { requires_grad: true });
let b = torch.tensor([0.2, 0.5, 0.1, 0.0], { requires_grad: true });

// 执行计算
let out = torch.matmul(x, w);
out = torch.add(out, b);

// 计算梯度
out.backward();

// 输出梯度
console.log(w.grad);
console.log(b.grad);

更复杂的使用示例,如 Transformer 模型的实现,也包含在 JS-Torch 中:

// 导入 torch 模块和 nn 模块
import { torch, nn } from "js-pytorch";

class Transformer extends nn.Module {
  constructor(vocab_size, hidden_size, n_timesteps, n_heads, p) {
    super();
    this.embed = new nn.Embedding(vocab_size, hidden_size);
    this.pos_embed = new nn.PositionalEmbedding(n_timesteps, hidden_size);
    this.b1 = new nn.Block(hidden_size, hidden_size, n_heads, n_timesteps, { dropout_p: p });
    this.b2 = new nn.Block(hidden_size, hidden_size, n_heads, n_timesteps, { dropout_p: p });
    this.ln = new nn.LayerNorm(hidden_size);
    this.linear = new nn.Linear(hidden_size, vocab_size);
  }

  forward(x) {
    let z = torch.add(this.embed.forward(x), this.pos_embed.forward(x));
    z = this.b1.forward(z);
    z = this.b2.forward(z);
    z = this.ln.forward(z);
    z = this.linear.forward(z);
    return z;
  }
}

// 创建模型实例
const model = new Transformer(vocab_size, hidden_size, n_timesteps, n_heads, dropout_p);

// 定义损失函数和优化器
const loss_func = new nn.CrossEntropyLoss();
const optimizer = new optim.Adam(model.parameters(), { lr: 5e-3, reg: 0 });

// 创建样本输入和输出
let x = torch.randint(0, vocab_size, [batch_size, n_timesteps, 1]);
let y = torch.randint(0, vocab_size, [batch_size, n_timesteps]);

let loss;
// 训练循环
for (let i = 0; i < 40; i++) {
  // 通过 Transformer 模型进行前向传播
  let z = model.forward(x);
  // 计算损失
  loss = loss_func.forward(z, y);
  // 使用 torch.tensor 的 backward 方法反向传播损失
  loss.backward();
  // 更新权重
  optimizer.step();
  // 每个训练步骤后将梯度重置为零
  optimizer.zero_grad();
}

JS-Torch 为在 Node.js、Deno 等 JavaScript 运行时环境中运行 AI 应用铺平了道路。

标签:torch,nn,AI,JavaScript,新纪元,let,new,hidden,size
From: https://www.cnblogs.com/yygmind/p/18130020

相关文章

  • 为什么要使用工业仿真软件? —— CAE(Computer Aided Engineering)工程设计中的计算机
    CAE技术:引自:https://baike.baidu.com/item/CAE技术/18884456?fr=ge_ala引自:https://www.mscsoftware.com.cn/cases/173.html当前制造业市场的竞争愈演愈烈,消费者在选择产品时不仅限于一个合适的价格,而且更加注重产品的质量和品质。钣金冲压成形工艺在汽车、航空航......
  • ESP01S固件烧录出现2-syncfail报错
    起因整理手上开发板的时候突然发现有几片ESP01S和ESP12F买来一直没有使用,所以打算拿出来使用MQTT服务进行透传,但是在测试ESP01S的时候发现MQTT的指令一直在报错,之后一查固件版本号居然显示2015年构建的,所以从安信可处下载了新固件进行烧录.故障现象一直显示等待上电同步或显示......
  • 阿里云域名使用ssl域名证书自动续期工具acme.sh报错Error add txt for domain:_acme-c
    现象:说明·acmesh-official/acme.shWiki·GitHub根据中文说明,第二步,第二种dns方法,执行生成证书时报此错,根据报错信息可知,是添加txtdns解析记录时出错原因:权限不足,阿里云为了提高安全性不建议直接使用主账号创建 AccessKey(因为默认权限过大),建议使用RAM用户(可以理......
  • 在 NestJS 中使用 Nodemailer 发送电子邮件的方法
    在学习Nestjs的过程中,我希望能够使用Nodemailer发送测试邮件,但在NestJS应用程序的上下文中我遇到了困难。我在互联网上搜索了解决方案,在经过大量研究后,我找到了一个解决方法。结果证明,这真的很简单。在本文中,我将分享我的解决方案,以便您可以在您的NestJS项目中使用它。(......
  • C++ 类型特征(Type Traits)
     分类类型特征描述C++标准_v写法基本类型特性检查     std::is_same<T1,T2>::value检查两个类型是否相同C++11std::is_same_v<T1,T2>std::is_integral<T>::value检查T是否为整数类型C++11std::is_integral_v<T>std::is_floating_point<T>::value检查......
  • ZOMI的AI编译原理4
    为什么需要AI编译器面临的问题挑战类别描述算子挑战越来越多新算子被提出,导致算子库的开发、维护、优化和测试工作量指数上升。1.硬件不仅需要实现新算子,还需要结合硬件进行特性优化和测试,以充分发挥硬件性能。例如,对于Convolution运算,需要将其转换为GEMM矩阵乘......
  • 使用 NANOEDGE.AI 工具完成人体姿态识别应用
    1.简介NanoEdge™AI库是Cartesiam推出的人工智能静态库,它可以帮助客户直接生成可以运行在嵌入式ArmCortex处理器上的.a静态库文件。2021年ST收购Cartesiam,完善了ST在AI领域的生态,大大降低了客户使用STM32开发AI应用的难度。通过使用NanoEdgeAISt......
  • AI数字人直播优势凸显,那么该如何打造AI数字人直播间?
    近年来,我们听到了很多无人直播间,数字人直播间这些名词,很多人会好奇这到底是什么意思,没人还可以直播吗?那什么是AI数字人直播?AI数字人是用真人拍摄五分钟高清视频上传到青否数字人克隆端,生成的数字人使用青否数字人的直播SaaS系统就可以进行数字人直播,数字人直播还可以实时与观众互......
  • JavaScript Array方法汇总
    函数名定义返回值是否改变原数组是否生成新数组push向数组的末尾添加一个或多个元素返回新的数组长度是否pop删除并返回数组的最后一个元素返回数组的最后一个元素是否unshift向数组的开头添加一个或多个元素返回新的数组长度是否shift删除数组的第一项返回第一个元素的值。若......
  • JavaScript String方法汇总
    方法名定义返回值是否改变原字符串是否生成新字符串charAt()查找指定位置的元素返回元素否否concat()连接两个或多个字符串返回连接后的字符串否是indexOf()indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置。如果没有找到匹配的字符串则返回-1。返回查找到的......