TensorFlow.js學(xué)習(xí)

一犹褒、關(guān)于TensorFlow.js

作為深度學(xué)習(xí)界的當(dāng)紅炸子雞——TensorFlow 開源組織終于在 2018 年 3 月推出了首個(gè) JavaScript 版本猜极。TensorFlow.js 可以在瀏覽器端完成模型訓(xùn)練消别、執(zhí)行和再訓(xùn)練等基本任務(wù)擂红,并且借助 WebGL 技術(shù)土砂,可以和 Python乏悄、C++ 版本一樣能夠通過 GPU 硬件加速完成計(jì)算過程龙亲。

二陕凹、基本概念

1.算法模型

y = f(x)
上述公式中,x是輸入項(xiàng)鳄炉,y是輸出項(xiàng)杜耙,而f(x)就是模型的核心函數(shù)。需要注意的是這里的輸入和輸出通常都是張量而不是標(biāo)量拂盯。
例如:
y = w1 * obstacleX + w2 * obstacleWidth + b
其中obstacleX和obstacleWidth是輸入項(xiàng)佑女, w1、w2為輸入項(xiàng)的權(quán)重谈竿,b是偏移量

2.訓(xùn)練

通過已知輸入項(xiàng) obstacleX 团驱、obstacleWidth和輸出項(xiàng) y 來調(diào)節(jié)模型中 w1、w2 和 b 參數(shù)直到“最佳效果”的過程空凸,被稱為訓(xùn)練(train)過程嚎花,而 y 因?yàn)槭且阎妮敵鲰?xiàng),又被稱為標(biāo)簽(label)劫恒,多組輸入項(xiàng)(obstacleX 贩幻、obstacleWidth)和 輸出項(xiàng)(y) 在一起被稱為訓(xùn)練數(shù)據(jù)集(training data set)轿腺。訓(xùn)練通常需要反復(fù)執(zhí)行很多次,才能達(dá)到“最佳效果”丛楚。

3.預(yù)測(cè)

機(jī)器學(xué)習(xí)中族壳,已知輸入項(xiàng) x 和模型求 y 時(shí),被稱為預(yù)測(cè)(predict)過程趣些。

4.評(píng)價(jià)

在訓(xùn)練過程中仿荆,將訓(xùn)練數(shù)據(jù)集中的 x 作為輸入項(xiàng),執(zhí)行預(yù)測(cè)過程坏平,將預(yù)測(cè)結(jié)果與標(biāo)簽 y 的實(shí)際結(jié)果進(jìn)行對(duì)比拢操,并通過一個(gè)函數(shù)得到一個(gè)分值用以表示當(dāng)前模型的擬合能力,被稱為評(píng)價(jià)(evaluatie)過程,這個(gè)函數(shù)被稱為評(píng)價(jià)函數(shù)或損失函數(shù)(loss function)舶替。

機(jī)器學(xué)習(xí)就是一個(gè)不斷訓(xùn)練令境、評(píng)價(jià)迭代的模型訓(xùn)練過程,訓(xùn)練得越好顾瞪,則未來預(yù)測(cè)得越準(zhǔn)確舔庶。

5.張量

張量是TensorFlow.js中的最重要的數(shù)據(jù)單元,它是一個(gè)形狀為一維或多維數(shù)組組成的數(shù)值的集合陈醒。tf.Tensor和多維數(shù)組其實(shí)非常的相似惕橙。

標(biāo)量 : 有些物理量,只有數(shù)值大小钉跷,沒有方向弥鹦,這種即稱為標(biāo)量,也可稱做零階張量爷辙。
向量(矢量 vector): 具有大小和方向的量彬坏,也可稱做一階張量
張量(tensor):我們的目的是要用數(shù)學(xué)量來表示物理量,可是標(biāo)量加上向量犬钢,都不足以表達(dá)所有的物理量苍鲜,所以就需要擴(kuò)大數(shù)學(xué)量的概念,張量就出現(xiàn)了玷犹。

張量包含如下屬性:

  • rank: 張量的維度(張量的維數(shù)被描述為階或者秩),例如純量就是0階洒疚,向量為1階歹颓,矩陣為2階。
  • shape: 每個(gè)維度的數(shù)據(jù)大小
const a = tf.tensor([[1, 2], [3, 4]]);
console.log('a shape:', a.shape);
a.print();

const b = a.reshape([4, 1]);
console.log('b shape:', b.shape);
b.print();

//a shape: 2,2
//Tensor
//   [[1, 2],
//     [3, 4]]
//b shape: 4,1
//Tensor
//    [[1],
//     [2],
//     [3],
//     [4]]
  • dtype: 張量中的數(shù)據(jù)類型油湖,在默認(rèn)的情況下巍扛,tf.Tensor的數(shù)據(jù)類型也就是 dtype為32位浮點(diǎn)型(float32)。當(dāng)然tf.Tensor也可以被創(chuàng)建為以下數(shù)據(jù)類型:布爾(bool), 32位整型(int32), 64位復(fù)數(shù)(complex64), 和字符串(string)

三乏德、TensorFlow.js API

1.初始化創(chuàng)建一個(gè)張量

tf.tensor(values,shape?,dtype?)

tf.tensor([1, 2, 3, 4]).print();
//Tensor [1, 2, 3, 4]
tf.tensor([[1, 2], [3, 4]]).print();
//Tensor [[1, 2], [3, 4]]
tf.tensor([1, 2, 3, 4], [2, 2]).print();
//Tensor[[1, 2],[3, 4]]
//其中dtype 為('float32'|'int32'|'bool'|'complex64'|'string') 

tf.scalar(value, dtype?)創(chuàng)建零階張量

tf.scalar(3.14).print();
//Tensor 3.140000104904175

tf.buffer(shape,dtype?,values?)

const buffer = tf.buffer([2, 2]);
buffer.set(3, 0, 0);
buffer.set(5, 1, 0);
buffer.toTensor().print();
//張量[[3撤奸,0]吠昭,[5,0]]

tf.clone(x)

//創(chuàng)建一個(gè)具有與指定張量相同的值和形狀的新張量胧瓜。
const x = tf.tensor([1, 2]);
x.clone().print();
//張量[1矢棚,2]

tf.complex(real,imag)

//給定一個(gè)real表示復(fù)數(shù)的實(shí)部的張量和一個(gè)imag表示復(fù)數(shù)的虛部的張量,此操作將以[r0府喳,i0蒲肋,r1,i1]的形式逐元素返回復(fù)數(shù)钝满,其中r表示實(shí)部兜粘,i代表imag的一部分。
const real = tf.tensor1d([2.25, 3.25]);
const imag = tf.tensor1d([4.75, 5.75]);
const complex = tf.complex(real, imag);
complex.print();
//張量[2.25 + 4.75j弯蚜,3.25 + 5.75j]

tf.fill(shape,values,dtype?)

//創(chuàng)建一個(gè)用標(biāo)量值填充的張量
tf.fill([2, 2], 4).print();
//張量[[4孔轴,4],[4碎捺,4]]

tf.imag(x)

//返回復(fù)數(shù)(或?qū)崝?shù))張量的虛部路鹰。
const x = tf.complex([-2.25, 3.25], [4.75, 5.75]);
tf.imag(x).print();
Tensor  [4.75, 5.75]

tf.linspace(start,stop,num)

//在給定的間隔內(nèi)返回均勻間隔的數(shù)字序列。
// start (數(shù)字) 序列的起始值牵寺。
// stop (數(shù)字) 序列的結(jié)束值悍引。
// num (數(shù)字) 要生成的值的數(shù)目。
tf.linspace(0, 9, 10).print();
//張量[0帽氓、1趣斤、2、3黎休、4浓领、5、6势腮、7联贩、8、9]

tf.real(x)

//返回復(fù)數(shù)(或?qū)崝?shù))張量的實(shí)部捎拯。
const x = tf.complex([-2.25, 3.25], [4.75, 5.75]);
tf.real(x).print();
//張量[-2.25泪幌,3.25]

tf.variable(initialValue,trainable?,name?,dtype?)

//用提供的初始值創(chuàng)建一個(gè)新變量。
// initialValue:張量的初始值
// trainable: 如果為true署照,則允許優(yōu)化器對(duì)其進(jìn)行更新祸泪。
// name:變量的名稱
const x = tf.variable(tf.tensor([1, 2, 3]));
x.assign(tf.tensor([4, 5, 6]));
x.print();
//張量[4,5建芙,6]

2.修改張量的形狀

張量中的元素?cái)?shù)量是這個(gè)張量的形狀的乘積(例如一個(gè)形狀為[2,3]的張量所含有的元素個(gè)數(shù)為2*3=6個(gè))

tf.reshape(x,shape)

//給定輸入張量没隘,返回一個(gè)新的張量
const x = tf.tensor1d([1, 2, 3, 4]);
x.reshape([2, 2]).print();
//張量[[1,2]禁荸,[3右蒲,4]]

3. 操作張量

tf.square()

const x = tf.tensor([1, 2, 3, 4]);
const y = x.square();  // 相當(dāng)于 tf.square(x)
y.print();

tf,add()

const a = tf.tensor([1, 2, 3, 4]);
const b = tf.tensor([10, 20, 30, 40]);
const y = a.add(b);  // 相當(dāng)于 tf.add(a, b)
y.print();

因?yàn)閺埩渴遣豢勺兊姆赃@些運(yùn)算并不會(huì)更改他們的值。相應(yīng)的這些操作總會(huì)返回一個(gè)新的張量瑰妄。

tf.slice(x,begin,size?)

//x:要切片的輸入張量
//begin:起始切片的坐標(biāo)
//size:切片的大小

4.內(nèi)存操作

tf.dispose()

const a = tf.tensor([[1, 2], [3, 4]]);
a.dispose(); // 相當(dāng)于 tf.dispose(a)

參考資料

怎么通俗地理解張量陷嘴?
tensorflow.js實(shí)戰(zhàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市翰撑,隨后出現(xiàn)的幾起案子罩旋,更是在濱河造成了極大的恐慌,老刑警劉巖眶诈,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涨醋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡逝撬,警方通過查閱死者的電腦和手機(jī)浴骂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宪潮,“玉大人溯警,你說我怎么就攤上這事〗葡啵” “怎么了梯轻?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尽棕。 經(jīng)常有香客問我喳挑,道長(zhǎng),這世上最難降的妖魔是什么滔悉? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任伊诵,我火速辦了婚禮,結(jié)果婚禮上回官,老公的妹妹穿的比我還像新娘曹宴。我一直安慰自己,他們只是感情好歉提,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布笛坦。 她就那樣靜靜地躺著,像睡著了一般苔巨。 火紅的嫁衣襯著肌膚如雪弯屈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天恋拷,我揣著相機(jī)與錄音,去河邊找鬼厅缺。 笑死蔬顾,一個(gè)胖子當(dāng)著我的面吹牛宴偿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诀豁,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼窄刘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了舷胜?” 一聲冷哼從身側(cè)響起娩践,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烹骨,沒想到半個(gè)月后翻伺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沮焕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年吨岭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峦树。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辣辫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出魁巩,到底是詐尸還是另有隱情急灭,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布谷遂,位于F島的核電站葬馋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏埋凯。R本人自食惡果不足惜点楼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望白对。 院中可真熱鬧掠廓,春花似錦、人聲如沸甩恼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽条摸。三九已至悦污,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钉蒲,已是汗流浹背切端。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顷啼,地道東北人踏枣。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓昌屉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親茵瀑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子间驮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345