ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

pso(粒子群算法)算法优化神经网络算法

2021-12-01 14:31:00  阅读:194  来源: 互联网

标签:count loss pso list 神经网络 算法 test model acc


本文主要涉及工程实现,若要关注原理,网上比较多啦~

一、pso(粒子群)算法简要介绍

粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
  PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。


二、代码关键实现

首先需要安装pywarm这个训练包,使用 

pip install pywarm

from pyswarm import pso

#fine_tuning,nnunits,dropout,learning_rate
lb=[0.2,0.0008]
ub=[0.5,0.003]
#上面是要调节的超参数的两个阈值。
xopt, fopt = pso(best_model, lb, ub)

其中best_model为我们神经网络返回的值,作为粒子群算法的目标值。本程序中设置的适应度函数的目标值为accuracy。下面是神经网络的部分代码。使用的是renet

def best_model(x,count=1):
    model = model_design(x)
    history = model.fit(X_train,
        Y_train,
        batch_size=1000,
        epochs=50,
        verbose=2,
        validation_data=(X_test, Y_test),
        #validation_split = 0.3,
        callbacks = [
            keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=True, mode='auto'),
            keras.callbacks.EarlyStopping(monitor='val_loss', patience=10, verbose=0, mode='auto')
        ])
    train_loss, train_acc = model.evaluate(X_train, Y_train, verbose=0)
    print(f"Train Accuracy:{train_acc} Train Loss: {train_loss}")

    test_loss, test_acc = model.evaluate(X_test, Y_test, verbose=0)
    print(f"Test Accuracy:{test_acc} Test Loss: {test_loss}")

    model.save(f"./model/model-{count}-{round(test_acc, 3)}-{round(test_loss, 3)}--Units-{x[0]}--Learning_rate-{x[1]}")
    np.savetxt(f"data-{count}.csv", x, delimiter=',')

    count = count
    test_acc_list = []
    test_loss_list = []
    count_no = []
    test_units = []
    test_learning_rate = []
    if test_acc > 0.99 and count < 0:
        # Plot the graph
        count = count - 1
        count_no.append(count)
        test_acc_list.append(test_acc)
        test_loss_list.append(test_loss)
        test_units.append(x[0])
        test_learning_rate.append(x[1])
    global result
    result = pd.DataFrame()
    result["count_no"] = count_no
    result["Test_Acc"] = test_acc_list
    result["Test_Loss"] = test_loss_list
    result["Units"] = test_units
    result["Learning_rate"] = test_learning_rate
    #描述训练集的loss

    val_loss_list = history.history['val_loss']
    loss_list = history.history['loss']
    plt.plot(range(len(loss_list)), val_loss_list)
    plt.plot(range(len(loss_list)), loss_list)
    plt.show()

    return test_acc

以上是使用pso算法进行神经网络优化的实现代码。具体全部代码的内容可以去我的github获取

https://github.com/cyjack/pso-deeplearning.git

三、相关信息

如果有关于pso进行模型参数优化的问题,可以来咨询我~微信:Paper_pass_a

标签:count,loss,pso,list,神经网络,算法,test,model,acc
来源: https://blog.csdn.net/cccyjack/article/details/121651857

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有