神经网络调参--BayesianOptimization

该文介绍了如何利用BayesianOptimization库对神经网络的超参数进行调优,包括划分数据集、构建模型、定义模型结构和训练过程,并使用EarlyStopping策略防止过拟合。在多层感知机模型中调整了隐藏层单元数、学习率和dropout率,以验证集的F1分数作为优化目标。
摘要由CSDN通过智能技术生成

记录如何使用BayesianOptimization对神经网络进行调参。

# 划分数据集
from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(seq_train, train_label, test_size=0.2, stratify=train_label, random_state=1234)




from tensorflow.keras import layers, models
from tensorflow.keras import metrics
from tensorflow.keras.callbacks import EarlyStopping

input_dim=min(len(word_indexs)+1, TOP_K)
output_dim=128
maxlen=seq_train.shape[1]
## 搭建模型
def get_model(units, learning_rate, drop_rate):
    inputs = layers.Input(shape=(maxlen, ))
    x = layers.Embedding(input_dim=input_dim, output_dim=output_dim, input_length=maxlen)(inputs)
    x = layers.Dropout(drop_rate)(x)
    x = layers.Flatten()(x)
    x = layers.Dense(units, activation='relu')(x)
    x = layers.Dropout(drop_rate)(x)
    outputs = layers.Dense(1, activation='sigmoid')(x)

    model = models.Model(inputs=inputs, outputs=outputs, name='MLP_opt')
    
    optimizer = tf.keras.optimizers.Adam(learning_rate)
    #编译compile
    model.compile(optimizer = optimizer, #优化函数
                loss = "binary_crossentropy",  #损失函数
                metrics=["accuracy", metrics.Precision(), metrics.Recall()])
    return model 

# 训练模型   
def train_model(units, learning_rate, drop_rate):
        
        model = get_model(units, learning_rate, drop_rate)
        # 提前停止                
        EarlyStop=EarlyStopping(monitor='val_loss',
                        patience=2,
                        verbose=1, 
                        mode='auto')
        # 模型拟合                    
        model.fit(x_train, 
            y_train,
            epochs=5, 
            verbose=0,
            batch_size=32,
            validation_data=(x_val, y_val), 
            callbacks = [EarlyStop],
            )
        # 验证集结果 使用验证集F1作为优化指标       
        scores = model.evaluate(x_val, y_val)
        f1 = 2*(scores[2]*scores[3]) / (scores[2]+scores[3]+1e-10) ## 加小尾巴防止除0
        print('验证集Accuracy:', scores[1], '验证集Precision:', scores[2], '验证集Recall:', scores[3])
        print('验证集f1:', f1)
        return f1 ## 优化指标
   
from bayes_opt import BayesianOptimization 

# 定义参数搜索空间
pbounds = {"units": (32, 64),  ## 两个参数  上下边界值
        "learning_rate": (0.0001, 0.001), 
        "drop_rate": (0.2, 0.5)
        # "batch_size": (32, 64) ## 无法调
        }
        
# 贝叶斯优化器
optimizer = BayesianOptimization(f=train_model,
                                pbounds=pbounds,
                                verbose=2,  
                                random_state=1,)
 
# 开始优化                               
optimizer.maximize()
    
## 打印优化后的参数
print(optimizer.max)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灯下夜无眠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值