🖼 人工智能学习总目录

🖼 视频资料都在这里—北京大学TensorFlow2.0公开课,建议看课,这里只是我写的可参考的在线笔记

🖼 主要学会用TensorFlow2搭建神经网络方法、离散数据的分类、连续数据的预测

本讲目标:学会神经网络优化过程,使用正则化减少过拟合,使用优化器更新网络参数。

1、神经网络复杂度

1.1 时间复杂度

即模型的运算次数,可用浮点运算次数(FPLOPs, FLoating-point OPerations)或者乘加运算次数衡量

1.2 空间复杂度

空间复杂度(访存量),严格来讲包括两部分:总参数量 + 各层输出特征图。

  • 参数量:模型所有带参数的层的权重参数总量;

  • 特征图:模型在实时运行过程中每层所计算出的输出特征图大小。

2 学习率策略

2.1 指数衰减

学习率跟着学习的层数,指数衰减

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import tensorflow as tf

w = tf.Variable(tf.constant(5, dtype=tf.float32))

epoch = 40
LR_BASE = 0.2 # 最初学习率
LR_DECAY = 0.99 # 学习率衰减率
LR_STEP = 1 # 喂入多少轮BATCH_SIZE后,更新一次学习率

for epoch in range(epoch): # for epoch 定义顶层循环,表示对数据集循环epoch次,此例数据集数据仅有1个w,初始化时候constant赋值为5,循环100次迭代。
lr = LR_BASE * LR_DECAY ** (epoch / LR_STEP)
with tf.GradientTape() as tape: # with结构到grads框起了梯度的计算过程。
loss = tf.square(w + 1)
grads = tape.gradient(loss, w) # .gradient函数告知谁对谁求导

w.assign_sub(lr * grads) # .assign_sub 对变量做自减 即 w = w - lr*grads
print("After %s epoch,w is %f,loss is %f,lr is %f" % (epoch, w.numpy(), loss, lr))

2.2 分段常数衰减

3 激活函数

3.1 sigmoid

3.2 tanh

3.3 ReLU

3.4 Leaky ReLU

3.5 softmax

3.6 建议

4 损失函数

4.1 均方误差损失函数

4.2 交叉熵损失函数

4.3 自定义损失函数

5 欠拟合与过拟合

6 优化器

6.1 SGD

6.1.1 vanilla SGD

6.1.2 SGD with Momentum

6.1.3 SGD with Nesterov Acceleration 6.2 AdaGrad

6.3 RMSProp

6.4 AdaDelta

6.5 Adam

6.5 优化器选择

6.6 优化算法的常用tricks

7、常用TensorFlow API及代码实现

7.1学习率策略

tf.keras.optimizers.schedules.ExponentialDecay

tf.keras.optimizers.schedules.PiecewiseConstantDecay

7.2激活函数

tf.math.sigmoid

tf.math.tanh

tf.nn.relu

tf.nn.leaky_relu

tf.nn.softmax

7.3损失函数

tf.keras.losses.MSE

tf.keras.losses.categorical_crossentropy

tf.nn.softmax_cross_entropy_with_logits

tf.nn.sparse_softmax_cross_entropy_with_logits

7.4 其它

tf.cast

tf.random.normal

tf.where