JavaScript 深度學習 - 2.基礎概念

為了更好的閱讀體驗,歡迎語雀搜索 【JavaScript 深度學習】 關注
NO.1
Tensor - 張量
從名字也可以看出,Tensor 是 TensorFlow 中最基礎的數據結構,Tensor 和 一維或多維數組非常相似,在 TensorFlow.js 中,我們也可以直接將數組轉換為Tensor。一個 Tensor 包含三個部分
values: 具體的值 數字或者數組
shape: 數值的維度,如果不配置,會基于 values 初始化
dtype: 數值的數據類型,如 'float32'|'int32'|'bool' 等類型
Scalar - 標量 ( 0D 張量)
僅包含一個數字的張量叫做標量(Scalar)
scalar = tf.tensor(3.14);
// scalar 推薦使用更有語義化的 tf.scalar 來定義
tf.scalar(3.14).print() //
Vector - 向量 ( 1D 張量)
一維數組的數值成為向量(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
現實數據的Tensor 轉換 - 數據預處理
Tensor 2d的示例
我們以 Kaggle 經典入門數據 - [泰坦尼克號生存預測(https://www.kaggle.com/c/titanic)?為例來介紹一下常見數據表達方式,數據示例

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



