日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

在浏览器中进行深度学习:TensorFlow.js (一)基本概念

發(fā)布時(shí)間:2025/3/20 HTML 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在浏览器中进行深度学习:TensorFlow.js (一)基本概念 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

作為deeplearn.js的繼任者,tensoflow.js?支持在瀏覽器或者nodejs中利用JavaScript來運(yùn)行深度學(xué)習(xí)。并且能夠支持GPU和現(xiàn)有的Tensorflow的模型。該項(xiàng)目的首頁上有幾個(gè)很酷炫的演示。作為熱愛機(jī)器學(xué)習(xí)和前端數(shù)據(jù)可視化的我怎能不心動(dòng)呢??靵砗臀乙黄饋砜纯慈绾卫胻ensorflow.js來進(jìn)行深度學(xué)習(xí)之旅吧。

線性代數(shù)(Linear algebra)是深度學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)。張量(Tensor)是線性代數(shù)的基本數(shù)學(xué)概念和運(yùn)算單元。我們來了解一下tensorflow.js中有關(guān)張量的基本概念和運(yùn)算。

張量的概念

標(biāo)量 Scalar

標(biāo)量就是一個(gè)簡單的數(shù)字,概念就是只有大小,沒有方向。

const scalar = tf.scalar(5); print_tensor([scalar]);

注意:print_tensor()是我實(shí)現(xiàn)的一個(gè)JS方法,在瀏覽器中以表格的形式顯示張量的內(nèi)容,最高兩個(gè)維度。輸入是一個(gè)張量的數(shù)組。如果不想在瀏覽器中看到結(jié)果,也可以調(diào)用tensor.print()方法,在console中查看張量的內(nèi)容。

以上的代碼,創(chuàng)建了一個(gè)數(shù)值為5,維度(Rank)0 的標(biāo)量。

向量/矢量 Vector

向量就是一個(gè)一維數(shù)組,概念就是有大小和方向。

const vector = tf.tensor1d([0, 1, 2, 3, 4]); print_tensor([vector]);

以上的代碼,創(chuàng)建了一個(gè)數(shù)值為[0,1,2,3,4],維度?1?的向量。形狀(Shape)描述了各個(gè)維度的容量或者說大小,這里是5.

張量 Tensor

矩陣(Matrix)擁有兩個(gè)維度,在更高的維度,就是張量。其實(shí)所有的標(biāo)量,矢量,矩陣都可以用張量表示,只是維度不同。

在Tensoflow中Rank表示了維度的等級(jí),對(duì)應(yīng)如下

  • 標(biāo)量 0? tf.scalar
  • 矢量 1? ?tf.tensor1d
  • 矩陣 2? tf.tensor2d
  • 張量 2+ tf.tensor3d, tf.tensor4d
const matrix = tf.tensor2d([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]); print_tensor([matrix]);

以上的代碼,創(chuàng)建了一個(gè)數(shù)值為[[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]],維度 2?的矩陣。形狀是2X3,兩行,三列。

一張圖來直觀說明:

tensorflow.js提供了對(duì)張量的創(chuàng)建和生成,變形,切片和合并等方法,用于對(duì)數(shù)據(jù)的準(zhǔn)備。

張量的運(yùn)算

張量-標(biāo)量運(yùn)算

張量和標(biāo)量之間的數(shù)學(xué)運(yùn)算(加減乘除冪)比較簡單,只要直接把張量的每一個(gè)元素和標(biāo)量進(jìn)行對(duì)應(yīng)的數(shù)學(xué)運(yùn)算就好了。

const t = tf.tensor([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]); const s = tf.scalar(3); print_tensor([t,s,t.add(s),t.mul(s)])

張量和標(biāo)量的數(shù)學(xué)運(yùn)算不會(huì)改變張量的形狀,并且滿足算術(shù)運(yùn)算的基本定律,例如加法交換律,乘法結(jié)合律等等。

張量-張量加減乘

具有相同形狀的張量可以進(jìn)行加減操作。只要把對(duì)應(yīng)的元素做加減就好了。

const a = tf.tensor1d([1, 2, 3, 4]); const b = tf.tensor1d([10, 20, 30, 40]); print_tensor([a,b,a.add(b),a.sub(b),a.mul(b)])

張量-張量 點(diǎn)積

張量的積 tensor.matMul() 在深度學(xué)習(xí)中被大量的應(yīng)用,下圖給出了一個(gè)矩陣點(diǎn)積的例子:

簡單說一個(gè)m*n的矩陣和一個(gè)n*k的矩陣的點(diǎn)積得到一個(gè)m*k的矩陣。

const a = tf.tensor2d([[1, 2], [3, 4]]); const b = tf.tensor2d([[5, 6, 7], [7, 8, 9]]); print_tensor([a, b, a.matMul(b)]);

注意,矩陣的點(diǎn)積不滿足乘法交換律,AB != BA

const a = tf.tensor2d([[1, 2], [3, 4]]); const b = tf.tensor2d([[5, 6], [7, 8]]); print_tensor([a, b, a.matMul(b), b.matMul(a)]);

矩陣轉(zhuǎn)置? (Transpose)

矩陣的轉(zhuǎn)置就是將矩陣的所有元素繞著一條從第1行第1列元素出發(fā)的右下方45度的射線作鏡面反轉(zhuǎn),即得到矩陣的轉(zhuǎn)置。

const a = tf.tensor2d([[1, 2], [3, 4],[5,6]]); print_tensor([a, a.transpose()]);

單位矩陣(Identity Matrix)

就像數(shù)學(xué)中的1,任何數(shù)字和1相乘都是這個(gè)數(shù)本身。單位矩陣的特性就是任何矩陣和單位矩陣的點(diǎn)積的結(jié)果都是原矩陣本身。單位矩陣就是一個(gè)n*n的矩陣對(duì)角線上的元素都是1,其它為0。

利用tf.oneHot() 可以生成一個(gè)單位矩陣。

const identity = tf.oneHot(tf.tensor1d([0, 1, 2]), 3); print_tensor([identity]);

我們以后再去研究利用tf.initializers.identity來初始化單位矩陣。

矩陣的逆? (Inverse)

如果一個(gè)矩陣和另一矩陣相乘得到單位矩陣,那么這個(gè)矩陣就是該矩陣的逆。

tensorflow 提供了矩陣的逆操作,tf.matrix_inverse

然而tensorflow.js中并沒有對(duì)應(yīng)的操作。(考慮到當(dāng)前的版本是0.6.1,我們就忍了。另外據(jù)說深度學(xué)習(xí)并沒有用到任何矩陣的逆操作。)

注意,并不是所有的矩陣都是可逆的,有些矩陣找不到逆矩陣。

進(jìn)一步了解矩陣的逆可以參考這篇文章

兩個(gè)矩陣的除法可以理解為一個(gè)矩陣和另一個(gè)矩陣的逆的點(diǎn)積。

Reduction

深度學(xué)習(xí)中常常需要對(duì)張量各個(gè)維度進(jìn)行統(tǒng)計(jì)。例如求均值,總和等等。tensorflow.js提供了相應(yīng)的操作。

const x = tf.tensor2d([[1, 2, 3],[4,5,6]]); print_tensor([x, x.mean(),x.max(),x.min(), x.sum()]);

這里給出了一個(gè)矩陣的所有元素的均值,最大值,最小值和總和,也可以針對(duì)行和列做相應(yīng)的操作。

下面的代碼對(duì)于每一列做相應(yīng)的統(tǒng)計(jì)。

const x = tf.tensor2d([[1, 2, 3],[4,5,6]]); print_tensor([x, x.mean(0),x.max(0),x.min(0), x.sum(0)]);

除了上面提到的操作,tensorflow.js還提供了:

  • 基本的數(shù)學(xué)運(yùn)算諸如三角函數(shù),對(duì)數(shù),開方等
  • 邏輯操作
  • ... ...

總結(jié)

本文描述了張量的基本概念和操作,并給出了tensorflow.js中的代碼例子。線性代數(shù)作為機(jī)器學(xué)習(xí),尤其是深度學(xué)習(xí)的數(shù)學(xué)基礎(chǔ),值得大家去了解和掌握。

本文中所有的代碼示例大家都可以在我的codepen中運(yùn)行。

參考

  • Tensor PlayGround
  • 可汗學(xué)院線性代數(shù)
  • Beginner Tensorflowjs Examples in Javascript?
  • Tensorflow.js官網(wǎng)
  • Tensorflow.js代碼
  • 11 Javascript Machine Learning Libraries To Use In Your?App

轉(zhuǎn)載于:https://my.oschina.net/taogang/blog/1790365

總結(jié)

以上是生活随笔為你收集整理的在浏览器中进行深度学习:TensorFlow.js (一)基本概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。