JavaScript 深度學(xué)習(xí) - 2.基礎(chǔ)概念

為了更好的閱讀體驗,歡迎語雀搜索 【JavaScript 深度學(xué)習(xí)】 關(guān)注
NO.1
Tensor - 張量
從名字也可以看出,Tensor 是 TensorFlow 中最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),Tensor 和 一維或多維數(shù)組非常相似,在 TensorFlow.js 中,我們也可以直接將數(shù)組轉(zhuǎn)換為Tensor。一個 Tensor 包含三個部分
values: 具體的值 數(shù)字或者數(shù)組
shape: 數(shù)值的維度,如果不配置,會基于 values 初始化
dtype: 數(shù)值的數(shù)據(jù)類型,如 'float32'|'int32'|'bool' 等類型
Scalar - 標(biāo)量 ( 0D 張量)
僅包含一個數(shù)字的張量叫做標(biāo)量(Scalar)
scalar = tf.tensor(3.14);
// scalar 推薦使用更有語義化的 tf.scalar 來定義
tf.scalar(3.14).print() //
Vector - 向量 ( 1D 張量)
一維數(shù)組的數(shù)值成為向量(Vector)
vector = tf.tensor(<a href="https://www.kaggle.com/c/titanic">1, 2, 3], [3])
// vector 推薦使用更有語義化的 tf.tensor1d 來定義
vector = tf.tensor1d([1, 2, 3]).print();
Tensor 的常用操作
類似的,TensorFlow.js 還提供了 tf.tensor2d、tf.tensor3d、tf.tensor4d、tf.tensor5d、tf.tensor6d 等語義化的方法,也推薦大家直接使用。
const a = tf.tensor([[1, 2], [3, 4]], [2, 2], 'int32');
// 獲取 shape
console.log('shape:', a.shape); // shape: 2,2
// 獲取 dtype
console.log('dtype', a.dtype); // dtype int32
// 修改 shape
a.reshape([4]).print() // Tensor [1, 2, 3, 4]
NO.2
現(xiàn)實數(shù)據(jù)的Tensor 轉(zhuǎn)換 - 數(shù)據(jù)預(yù)處理
Tensor 2d的示例
我們以 Kaggle 經(jīng)典入門數(shù)據(jù) - [泰坦尼克號生存預(yù)測(https://www.kaggle.com/c/titanic)?為例來介紹一下常見數(shù)據(jù)表達方式,數(shù)據(jù)示例

| Variable | Definition | Key |
|---|---|---|
| survival | 是否存活 | 0 = No, 1 = Yes |
| pclass | 船票等級 | 1 = 1st, 2 = 2nd, 3 = 3rd |
| sex | 性別 | male / female? |
| Age | 年齡 | |
| sibsp | 船上兄弟姐妹/配偶的個數(shù) | |
| parch | 船上父母/孩子的個數(shù) | |
| ticket | 船票號碼 | |
| fare | 船票加個 | |
| cabin | 艙位號碼 | |
| embarked | 啟航港的編號 | C= Cherbourg, Q = Queenstown, S = Southampton |
特征二元化
比如上面的性別,原始數(shù)據(jù)使用 male 或者 female 來表示,我們可以將其轉(zhuǎn)換成 0 和 1 來表示。
整數(shù)編碼
比如啟航港的編號,我們可以使用1、2、3 分別表示 C、Q、S。
數(shù)據(jù)補齊
如上圖數(shù)據(jù),我們可以看到 Age 字段是存在缺失的,常見有以下幾種方式來補齊數(shù)據(jù)
平均值:這個很好理解,如果數(shù)值分布沒有明顯規(guī)律,可以使用平均值來補齊數(shù)據(jù)
分類平均值:如果數(shù)據(jù)不同分類下的平均值有較大差異,可以使用同類的平均值來進行補齊,比如上述數(shù)據(jù) 通過 parch、slibsp 可以做一些分類,來進行補齊
模型預(yù)測: 可以基于已有數(shù)據(jù),通過模型求出更準(zhǔn)確的補齊
特征離散化
將連續(xù)性的值,比如年齡進行離散,更有利于計算和特征的提取,比如我們可以將年齡通過 5 來進行劃分,0-5 使用 1 來表達,依次類推表達其他數(shù)值。
其他 Tensor 的數(shù)據(jù)示例
Tensor 3D 常見于時間序列的數(shù)據(jù),比如某個時間段的股票價格數(shù)據(jù),需要展示 時間間隔、價格、樣本
Tensor 4D 常見于圖片數(shù)據(jù),需要展示 圖片寬度、高度、顏色通道(RGB)、樣本
Tensor 5D 常見于視頻數(shù)據(jù),需要展示 視頻寬度、高度、顏色通道、時間幀、樣本
NO.3
神經(jīng)網(wǎng)絡(luò)模型
一個數(shù)據(jù)模型可以分為 Input(輸入數(shù)據(jù))、Layer(模型層)、loss(損失函數(shù))、optimizer(優(yōu)化器)、Output(預(yù)測輸出值)組成。
Layer - 模型層
你可以通過?TensorFlow Playground(https://playground.tensorflow.org/)?可視化的搭建自己的神經(jīng)網(wǎng)絡(luò)以及訓(xùn)練過程?
大多數(shù)的數(shù)據(jù),我們可以使用全連接層來進行處理,對應(yīng) TensorFlow 中的 Dense Layer
上一章我們使用的圖片數(shù)據(jù),可以使用卷積層來優(yōu)化處理,對應(yīng) TensorFlow 中的 Convolution Layer
有順序的數(shù)據(jù),比如文本類,可以使用循環(huán)層,對應(yīng) TensorFlow 中的 LSTM Layer
損失函數(shù)
損失函數(shù)用來計算預(yù)測值與真實值的差異,模型訓(xùn)練的目的也就是將 loss(損失)最小化的過程。不同的數(shù)據(jù)類型,需要選擇恰當(dāng)?shù)膿p失函數(shù),比如對應(yīng)回歸問題,我們可以選擇使用均方誤差(mean-squared error),對于二分類問題,可以使用二元交叉熵(binary crossentropy)來計算
優(yōu)化器
優(yōu)化器主要基于損失函數(shù)的計算對神經(jīng)網(wǎng)絡(luò)進行調(diào)整,常見的有梯度下降法
實例
const model = tf.sequential();
model.add(tf.layers.dense({units: 250, inputShape: [8]}));
model.add(tf.layers.dense({units: 175}));
model.add(tf.layers.dense({units: 150}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
model.compile({
optimizer: tf.train.adam(),
loss: 'sparseCategoricalCrossentropy',
metrics: ['accuracy']
});
關(guān)注數(shù):10億+?文章數(shù):10億+
粉絲量:10億+?點擊量:10億+
?懸賞博主專區(qū)請掃描這里
喜愛數(shù):?1億+?發(fā)帖數(shù):?1億+
回帖數(shù):?1億+?結(jié)貼率:?99.9%
—————END—————
喜歡本文的朋友,歡迎關(guān)注公眾號?程序員哆啦A夢,收看更多精彩內(nèi)容
點個[在看],是對小達最大的支持!
如果覺得這篇文章還不錯,來個【分享、點贊、在看】三連吧,讓更多的人也看到~



