(1)随机失活
随机失活 指的是在每轮训练时忽略一定随机数量的神经元,dropout 可能会提高 DNN 性能。随机省略一部分隐藏的神经元的过程称之为 随机失活 。如图
阐释一下这种方法:对于每次训练的实例,每个隐藏层的神经元以 p 的概率从网络中随机被忽略。由于神经元是随机选择的,因此每个训练实例选择的都是不同的神经元组合。
随机失活并不能保证提高性能,但通常值得一试。牢记以下三点:
(1)通过在 DNN 中创建多条通往正确分类的路径,随机失活能降低噪声样本中共适性的可能性。
(2)随机失活的比例越大,训练中引入的噪声就越多,这会降低学习速度。
(3)随机失活在非常大的 DNN 模型上的效果最佳。
重建模型如下:
''' 其他的参数不再解释 '''
fit2 = Classifier(
''' 采用 双曲正切 激活函数 '''
layers = [Layer("Tanh",units = 45),Layer("Tanh",units = 18),Layer("Tanh",units = 18),
Layer("Softmax")],
learning_rate = 0.80,
random_state = 2018,
valid_size = 0.25,
dropout_rate = 0.20 , ''' 随机失活率 '''
learning_momentum = 0.30,
batch_size = 35, ''' batch_size 设置 '''
n_iter = 100)
(2)过采样
在实际数据中,往往面对样本不平衡的问题,比如在金融交易数据集中,绝大多数的交易是“正常”的,只有一小部分是“可疑”交易。这种严重的类别失衡样本可能导致深度学习模型表现不佳。重新采样数据可疑解决这个问题。在该方法中,对权重过低的类别进行 过采样,以此改变训练集中的相对类别频率。
# 取 x_train 中第 0 列的值
w_train = x_train[:,0]
''' 指定每个样本的采样率,对于较小类别进行过采样,权重为 1.10 '''
''' 注意 x_train 是numpy 二维数组 , y_train 必须是 numpy 的一维数组而不能是 list '''
w_train[y_train == 0] = 1
w_train[y_train == 1] = 1.10
# 此处省略
fit3 = Classifier( ... )
# 在训练时根据指定采样权重采样
fit3.fit(x_train, y_train, w_train)
如下代码示例: