集成学习

在我调试代码时,在后期可能是因为文本处理太多,总是导致过拟合现象,经过查阅资料,发现有很多种处理过拟合的方法

防止过拟合的方法:

     (1) 正则化

     (2) 数据增强,(这个方法我是根据CNN处理图片的方式,将每一行文本的内容打乱,这样我们的数据集就会增大将近1倍,这里需要注意的是,测试集放的数据在数据集中只有一个,该方法对数据的准确率作用不明显,大约提高1%)

    (3)dropout

    (4)Early stopping  (为避免过拟合提前终止,一般是准确率不在提高了就终止)

    (5)集成学习 : 将单个学习器集成在一起,共同完成学习任务。它分为同质学习器和异质学习器

集成学习

同质集成器: 是使用同种类型的学习器,例如“决策树集成”就是他的个体学习器全是决策树

异质集成器 : 就是不同类型的学习器

在这里我把keras中的三个模型融合起来,分别计算不同模型结合起来的错误率,选取结合起来错误率最小的模型。

集成学习结合的策略有3种:(1)平均法  对于若干个弱学习器的输出进行平均得到最终的预测输出。

(2)投票法

(3) 学习法,将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。

由于时间原因,这个代码训练后的准确率并没有输出,因此具体这个方法对增加准确率和避免过拟合是否有用还不确定

def compile_and_train(model, num_epochs):
    model.compile(loss="mse", optimizer="adam", metrics=['acc','mae'])
    filepath = 'C:/Users\huhu\Desktop\huhu\ceshi/a/' + model.name + '.{epoch:02d}-{loss:.2f}.hdf5'
    checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=0, save_weights_only=True,
                                 save_best_only=True, mode='auto', period=1)
    tensor_board = TensorBoard(log_dir='C:/Users\huhu\Desktop\huhu\ceshi/a', histogram_freq=0, batch_size=64)
    history = model.fit(x=X_train, y=train_y, batch_size=64,
                        epochs=num_epochs, verbose=1, callbacks=[checkpoint, tensor_board], validation_split=0.2)
    return history
def evaluate_error(model):
    pred = model.predict(X_test, batch_size = 64)
    pred = np.argmax(pred, axis=1)
    pred = np.expand_dims(pred, axis=1) # make same shape as y_test
    error = np.sum(np.not_equal(pred, test_y)) / test_y.shape[0]
    return error


print("evaluate_error(cnn)",evaluate_error(cnn_model))
print("evaluate_error(rnn)",evaluate_error(rnn_model))
print("evaluate_error(cnn_rnn)",evaluate_error(cnnrnn_model))

cnn_model.load_weights('C:/Users\huhu\Desktop\huhu\ceshi/a/cnn.04-0.03.hdf5')
rnn_model.load_weights('C:/Users\huhu\Desktop\huhu\ceshi/a/rnn.06-0.11.hdf5')
cnnrnn_model.load_weights('C:/Users\huhu\Desktop\huhu\ceshi/a/cnn_rnn.05-0.02.hdf5')

models = [cnn_model, rnn_model, cnnrnn_model]


def ensemble(models, model_input):
    outputs = [model.outputs[0] for model in models]
    y = Average()(outputs)

    model = Model(model_input, y, name='ensemble')

    return model
ensemble_model = ensemble(models, model_input)
print("evaluate_error(ensemble_model)",evaluate_error(ensemble_model))


# pair_A = [conv_pool_cnn_model, all_cnn_model]
# pair_B = [conv_pool_cnn_model, nin_cnn_model]
# pair_C = [all_cnn_model, nin_cnn_model]
#
# pair_A_ensemble_model = ensemble(pair_A, model_input)
# evaluate_error(pair_A_ensemble_model)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值