当神经网络变得很深的时候,数值很容易变得不稳定
- 数据稳定性常见的两个问题:梯度爆炸、梯度消失
- 当数值过大或者过小的时候都会导致数值问题
- 常发生在深度模型中,因为其会对n个数累乘
梯度爆炸问题:
梯度消失问题:
让训练更稳定:
检查常见的激活函数:
scaled sigmoid函数: 4 * sigmoid(x) - 2
torch函数(不会的):
1、outputs = torch.cat(inputs, dim=?) → Tensor
函数目的: 在给定维度上对输入的张量序列seq 进行连接操作。
X_train = torch.cat([X_train, X_part], 0)
y_train = torch.cat([y_train, y_part], 0)
2、torch.clamp(input, min, max, out=None)
作用:限幅。将input的值限制在[min, max]之间,并返回结果。out (Tensor, optional) – 输出张量,一般用不到该参数。
- 对out参数的理解:很多torch函数有out参数,这主要是因为torch没有tf.cast()这类的类型转换函数,也少有dtype参数指定输出类型,所以需要事先建立一个输出Tensor为LongTensor、IntTensor等等,再由out导入。
import torch
"""
| min, if x_i < min
y_i = | x_i, if min <= x_i <= max
| max, if x_i > max
"""
a = torch.arange(9).reshape(3, 3) # 创建3*3的tensor
b = torch.clamp(a, 3, 6) # 对a的值进行限幅,限制在[3, 6]
print('a:', a)
print('shape of a:', a.shape)
print('b:', b)
print('shape of b:', b.shape)