- 理论只是:机器学习、神经网络、Tensorflowjs
- 基础案例:线性回归、罗辑回归、XOR、IRIS
- 实战案例:手写数字识别、商标识别、语音识别
- 神经网络模型:从单个神经元到深度神经网络
- 神经网络模型算法:
- MSE
- Log
- Cross Entropy
- Sigmoid
- Relu
- Softmax
- SGD
- Adam
- 炼丹最佳实践:归一化、欠(过)拟合、可视化、度量
- 模型的迁移学习、保存、加载、转换
1. 机器学习与神经网络简介
机器学习简介
- 机器学习是对能通过经验自动改进的计算机算法的研究。
- 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
为什么要用机器学习?
- 有些棘手问题只能用机器学习来解决
- 获取数据比编写规则更加容易
- GPU等计算能力显著提升
神经网络
通常指人工神经网络,人工神经网络是一种运算模型(就是输入输出的映射),由大量的节点(或神经元)之间相互联接构成。
- 每个神经元里存储着若干权重(weight)、偏置(bias)和一个激活函数(activation)
- 输入乘上权重加上偏置,经过激活函数得到输出
- 激活函数用于添加一些非线性变换
- 神经网络通常包括一个输入层、若干隐藏层、一个输出层
- 输入层通常不用于计算神经网络的层数
神经网络的训练
- 给大量输入和输出,算出神经网络里所有神经元的权重、偏置,然后给定新的输入,可以算出新的输出
- 在机器学习里输入输出被称为特征和标签,大量输入输出被称为训练集
如何训练神经网络
- 初始化:随机生成一些权重和偏置
- 计算损失:给定特征,计算出标签,得到它与真实标签差得多远
- 优化:微调权重和偏置,使损失变小
前向传播与反向传播
- 前向传播:将训练数据的特征送入网络,得到标签
- 反向传播:计算损失并优化(如果要调整倒数第二层,前提是要知道倒数第一层的优化方向)
如何计算损失?
使用损失函数,常用的损失函数有:
- 均方误差
- 对数损失
- 交叉熵损失
- …
如何优化?
使用优化器,常用的优化器有:
- 随机梯度下降(SGD)
- Adam
- …
2. TensorflowJS简介
一个用javascript实现的机器学习库,可以直接在浏览器和Nodejs中使用机器学习技术。
功能
- 运行现有模型
- 重新训练现有模型
- 使用javascript开发机器学习模型
安装
浏览器中安装
- 使用Script标签
- 使用NPM包安装,并使用Parcel或Webpack构建(推荐)
<!-- 1. 使用Script标签 --><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script><script>const a = tf.tensor([1, 2]);a.print()</script><!-- 2. 使用Parcel --><!-- HTML --><script type="module" src="script.js"></script><!-- script.js --><script>import * as tf from '@tensorflow/tfjs';const a = tf.tensor([1, 2]);a.print();</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作为高维数据结构完美解决了循环和存储问题
