• 理论只是:机器学习、神经网络、Tensorflowjs
  • 基础案例:线性回归、罗辑回归、XOR、IRIS
  • 实战案例:手写数字识别、商标识别、语音识别
  • 神经网络模型:从单个神经元到深度神经网络
  • 神经网络模型算法:
    • MSE
    • Log
    • Cross Entropy
    • Sigmoid
    • Relu
    • Softmax
    • SGD
    • Adam
  • 炼丹最佳实践:归一化、欠(过)拟合、可视化、度量
  • 模型的迁移学习、保存、加载、转换

1. 机器学习与神经网络简介

机器学习简介

  • 机器学习是对能通过经验自动改进的计算机算法的研究。
  • 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。

为什么要用机器学习?

  • 有些棘手问题只能用机器学习来解决
  • 获取数据比编写规则更加容易
  • GPU等计算能力显著提升

神经网络

通常指人工神经网络,人工神经网络是一种运算模型(就是输入输出的映射),由大量的节点(或神经元)之间相互联接构成。

  • 每个神经元里存储着若干权重(weight)偏置(bias)和一个激活函数(activation)
  • 输入乘上权重加上偏置,经过激活函数得到输出
  • 激活函数用于添加一些非线性变换
  • 神经网络通常包括一个输入层、若干隐藏层、一个输出层
  • 输入层通常不用于计算神经网络的层数

神经网络的训练

  • 给大量输入和输出,算出神经网络里所有神经元的权重、偏置,然后给定新的输入,可以算出新的输出
  • 在机器学习里输入输出被称为特征标签,大量输入输出被称为训练集

如何训练神经网络

  • 初始化:随机生成一些权重和偏置
  • 计算损失:给定特征,计算出标签,得到它与真实标签差得多远
  • 优化:微调权重和偏置,使损失变小

前向传播与反向传播

  • 前向传播:将训练数据的特征送入网络,得到标签
  • 反向传播:计算损失并优化(如果要调整倒数第二层,前提是要知道倒数第一层的优化方向)

如何计算损失?

使用损失函数,常用的损失函数有:

  1. 均方误差
  2. 对数损失
  3. 交叉熵损失

如何优化?

使用优化器,常用的优化器有:

  1. 随机梯度下降(SGD)
  2. Adam

2. TensorflowJS简介

一个用javascript实现的机器学习库,可以直接在浏览器和Nodejs中使用机器学习技术。

功能

  1. 运行现有模型
  2. 重新训练现有模型
  3. 使用javascript开发机器学习模型

安装

浏览器中安装

  • 使用Script标签
  • 使用NPM包安装,并使用Parcel或Webpack构建(推荐)
  1. <!-- 1. 使用Script标签 -->
  2. <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script>
  3. <script>
  4. const a = tf.tensor([1, 2]);
  5. a.print()
  6. </script>
  7. <!-- 2. 使用Parcel -->
  8. <!-- HTML -->
  9. <script type="module" src="script.js"></script>
  10. <!-- script.js -->
  11. <script>
  12. import * as tf from '@tensorflow/tfjs';
  13. const a = tf.tensor([1, 2]);
  14. a.print();
  15. </script>

Nodejs中安装

  • 安装带有原生C++绑定的Tensorflowjs(推荐)
  • 安装纯JavaScript版本,这是性能方面最慢的选项

Tnesor

中文名叫张量,张量是向量和矩阵向更高维度的推广,相当于多维数组。

import * as tf from '@tensorflow/tfjs';

const t0 = tf.tensor(1)
t0.print(); // Tensor 1
console.log(t0); // object {shape: [], size: 1, rankType: "0"}

const t1 = tf.tensor([1, 2]);
t1.print(); // Tensor [1, 2]
console.log(t1); // // object {shape: [2], size: 2, rankType: "1"}

const t2 = tf.tensor([[1, 2], [3, 4]]);
t1.print(); // Tensor [1, 2]
console.log(t1); // // object {shape: [2, 2], size: 4, rankType: "2"}

// size 表示张量中有多少个数字
// shape 表示维度尺寸
// rankType 维度数

神经网络数据结构设计

  • 神经网络的每一层要存储N维数据
  • N层的For循环运算
  • Tensor作为高维数据结构完美解决了循环和存储问题

3. 线性回归

4. 归一化

5. 逻辑回归

6. 多层神经网络

7. 多分类

8. 欠拟合与过拟合

9. 使用卷积神经网络(CNN)

10. 使用预训练模型进行图片分类

11. 基于迁移学习的图像分类器:商标识别

12. 使用预训练模型进行语音识别

13. 基于迁移学习的语音识别器:声控轮播图

14. Python与JavaScript模型互转