首頁 >科技週邊 >人工智慧 >JS 的 AI 時代來了!

JS 的 AI 時代來了!

WBOY
WBOY轉載
2024-04-08 09:10:111231瀏覽

JS-Torch 簡介

JS-Torch是一種深度學習JavaScript函式庫,其語法與PyTorch非常相似。它包含一個功能齊全的張量物件(可與追蹤梯度),深度學習層和函數,以及一個自動微分引擎。 JS-Torch適用於在JavaScript中進行深度學習研究,並提供了許多方便的工具和函數來加速深度學習開發。

JS 的 AI 时代来了!圖片

PyTorch是一個開源的深度學習框架,由Meta的研究團隊開發和維護。它提供了豐富的工具和函式庫,用於建立和訓練神經網路模型。 PyTorch的設計理念是簡單和靈活,易於使用,它的動態計算圖特性使得模型構建更加直觀和靈活,同時也提高了模型構建和調試的效率。 PyTorch的動態計算圖特性也使得其模型建構更加直觀,便於調試和最佳化。此外,PyTorch還具有良好的可擴展性和運作效率,使得其在深度學習領域中廣受歡迎和應用。

你可以透過npm 或pnpm 來安裝 js-pytorch:

npm install js-pytorchpnpm add js-pytorch

或線上體驗 js-pytorch 提供的 Demo[3]:

JS 的 AI 时代来了!圖片

https://eduardoleao052.github.io/js-torch/assets/demo/demo.html

#JS-Torch 已支援的功能

目前 JS-Torch 已經支援Add、Subtract、Multiply、Divide 等張量操作,同時也支援Linear、MultiHeadSelfAttention、ReLU 和LayerNorm 等常用的深度學習層。

Tensor Operations

  • Add
  • Subtract
  • Multiply
  • Divide
  • Matrix Multiply
  • Power
  • Square Root
  • Exponentiate
  • Log
  • Sum
  • Mean
  • Variance
  • Transpose
  • At
  • MaskedFill
  • Reshape

Deep Learning Layers

  • nn.Linear
  • nn.MultiHeadSelfAttention
  • nn.FullyConnected
  • nn.Block
  • nn.Embedding
  • #nn.PositionalEmbedding
  • # nn.ReLU
  • nn.Softmax
  • nn.Dropout
  • #nn.LayerNorm
  • nn.CrossEntropyLoss

#JS- Torch 使用範例

Simple Autograd

import { torch } from "js-pytorch";// Instantiate Tensors: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));// Make calculations:let out = torch.matmul(x, w);out = torch.add(out, b);// Compute gradients on whole graph:out.backward();// Get gradients from specific Tensors:console.log(w.grad);console.log(b.grad);

Complex Autograd (Transformer)

import { torch } from "js-pytorch";const nn = torch.nn;class Transformer extends nn.Module {constructor(vocab_size, hidden_size, n_timesteps, n_heads, p) {super();// Instantiate Transformer's Layers: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;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;}}// Instantiate your custom nn.Module:const model = new Transformer(vocab_size,hidden_size,n_timesteps,n_heads,dropout_p);// Define loss function and optimizer:const loss_func = new nn.CrossEntropyLoss();const optimizer = new optim.Adam(model.parameters(), (lr = 5e-3), (reg = 0));// Instantiate sample input and output: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;// Training Loop:for (let i = 0; i < 40; i++) {// Forward pass through the Transformer:let z = model.forward(x);// Get loss:loss = loss_func.forward(z, y);// Backpropagate the loss using torch.tensor's backward() method:loss.backward();// Update the weights:optimizer.step();// Reset the gradients to zero after each training step:optimizer.zero_grad();}

有了 JS-Torch 之後,在Node.js、Deno 等JS Runtime 上跑AI 應用的日子越來越近了。當然,JS-Torch 要推廣起來,它還需要解決一個很重要的問題,就是 GPU 加速。目前已有相關的討論,如果你有興趣的話,可以進一步閱讀相關內容:GPU Support[4] 。

參考資料

[1]JS-Torch: https://github.com/eduardoleao052/js-torch

[2]PyTorch: https://pytorch .org/

[3]Demo: https://eduardoleao052.github.io/js-torch/assets/demo/demo.html

[4]GPU Support: https:/ /github.com/eduardoleao052/js-torch/issues/1

#

以上是JS 的 AI 時代來了!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除