文章目录

  • 前言
  • 1 粒子群优化 PSO
  • 2 神经网络
  • 3 将两者结合
  • 最后 - 技术解答 - 毕设帮助

毕设帮助,开题指导,资料分享,疑问解答(见文末)

前言

PSO-for-Neural-Nets

大家知道,使用反向传播对神经网络进行训练是非常有效的。但如果网络参数的初始值设得不好时,各位可能也有过训练十分缓慢的经历。

这里提供一种加快反向传播的算法,目的是在训练神经网络时不使用反向传播以及梯度下降算法,而是先使用粒子群优化算法(Particle Swarm Optimization,PSO)对网络参数进行初始化,之后可以再次使用反向传播对网络进行正式训练。

1 粒子群优化 PSO

粒子群优化是一种元启发式算法(meta-heuristics algorithm),它属于基于种群的元启发式方法的一个子类。这意味着将多个粒子放置在 n 维解空间中,让其不断移动以获得最优解。对于不熟悉粒子群优化的童鞋,可以网络上找资料快速了解一下。比如这篇,很容易理解。

2 神经网络

前馈神经网络: 前馈神经网络是两个操作(一个线性操作,然后是一个非线性操作)的堆栈,这些操作被多次应用以找出映射 。

3 将两者结合


import numpy as np
from swarm_intelligence.particle import Particle
from swarm_intelligence.pso import ParticleSwarmOptimizer
from matplotlib import pyplot as plt
mean_01 = np.array([1.0, 2.0])
mean_02 = np.array([-1.0, 4.0])cov_01 = np.array([[1.0, 0.9], [0.9, 2.0]])
cov_02 = np.array([[2.0, 0.5], [0.5, 1.0]])ds_01 = np.random.multivariate_normal(mean_01, cov_01, 250)
ds_02 = np.random.multivariate_normal(mean_02, cov_02, 250)all_data = np.zeros((500, 3))
all_data[:250, :2] = ds_01
all_data[250:, :2] = ds_02
all_data[250:, -1] = 1np.random.shuffle(all_data)split = int(0.8 * all_data.shape[0])
x_train = all_data[:split, :2]
x_test = all_data[split:, :2]
y_train = all_data[:split, -1]
y_test = all_data[split:, -1]
def sigmoid(logit):return 1 / (1 + np.exp(-logit))def fitness(w, X=x_train, y=y_train):logit  = w[0] <em> X[:, 0] + w[1] </em> X[:, 1] + w[2]preds = sigmoid(logit)return binary_cross_entropy(y, preds)def binary_cross_entropy(y, y_hat):left = y * np.log(y_hat + 1e-7)right = (1 - y) * np.log((1 - y_hat) + 1e-7)return -np.mean(left + right)pso = ParticleSwarmOptimizer(Particle, 0.1, 0.3, 30, fitness, lambda x, y: x<y, n_iter=100,dims=3, random=True,position_range=(0, 1), velocity_range=(0, 1))
pso.optimize()print(pso.gbest, fitness(pso.gbest, x_test, y_test))
26%|██▌ | 26/100 [00:00<00:00, 125.34it/s]1.1801928375606305
1.4209814927365876
1.6079804335787051
1.4045063665887232
1.6061883358646398
1.216230952537311
1.092492742843725
1.425740352398705
1.2316560685535152
0.9883386170699404
0.7872754467763685
1.2949776923674654
1.5335307808402896
1.4402299491203296
1.707301581201865
1.3663291698028996
0.810679674134304
0.902645267001228
...0.6887999501032107
0.6888687686160592
0.688937050625055
0.6890767713425439
0.6892273324647994
0.6890875560305971
0.689124619992127
0.6898172338259064
0.6887098887333781
0.6887212601101861
0.688826316853767
0.6892384007287018
0.6844381943050638
0.689115638510458
0.6891453159612045
0.6901587770829556
0.6895998527186173
0.6890967086445332
0.689073485303836
0.6883588252450673
[0.00451265 0.21376644 0.22467216] 0.6875450245414241

粒子群优化算法属于元启发算法的一种,寻优往往需要额外的计算时间。并且,元启发算法对问题的维数相对敏感,运算复杂度会随着问题维数的规模增加很快,不利于像大型复杂神经网络复杂的寻优。

但是对比梯度下降方法,元启发也有很多优势,比如梯度下降也有一些问题,比如对初始条件敏感,如果初始条件好则收敛快,初始条件不好可能就不收敛。所以对于不是十分复杂的网络架构,或许元启发算法可以得到一个比较不错的初始化。

最后 - 技术解答 - 毕设帮助

粒子群优神经网络优化相关推荐

  1. 基于粒子群优化二维Otsu的肺CT图像分割算法

    1.内容简介 略 488-可以交流.咨询.答疑 2.内容说明 随着大气污染的加剧和环境的破坏,肺癌患者急剧增加,肺癌成为危害人 类健康最大的恶性肿瘤,因此肺癌治疗迫在眉睫.当前,肺肿瘤检查的主要方 式 ...

  2. trainlm算法c语言,粒子群优化的BP神经网络模型对C、Mn两种元素收得率的预测

    粒子群优化的BP神经网络模型对C.Mn两种元素收得率的预测 来源:用户上传 作者: 摘 要:本文首先对数据进行处理,利用收得率公式求出历史收得率:并利用已知的影响元素收得率的主要影响因素结合BP神经网 ...

  3. 【机器学习】基于自适应变异粒子群算法的非线性函数寻优

    本微信图文详细介绍了自适应变异粒子群算法的基本原理以及在非线性函数寻优中的应用. ---------–华丽分割线---------- 我们免费提供本文介绍方法的源码,你可以私信我们领取,如果你在领取源 ...

  4. 【机器学习】基于粒子群算法的非线性函数寻优

    本微信图文介绍了基于粒子群算法的非线性函数寻优过程,并利用Matlab实现.

  5. 【超参数寻优】量子粒子群算法(QPSO) 超参数寻优的python实现

    [超参数寻优]量子粒子群算法(QPSO) 超参数寻优的python实现 一.粒子群算法的缺点     二.量子粒子群算法     三.QPSO算法的python实现     参考资料 一.粒子群算法的 ...

  6. 【超参数寻优】粒子群算法(PSO) 超参数寻优的python实现

    [超参数寻优]粒子群算法(PSO) 超参数寻优的python实现 一.算法原理 1.粒子群算法的名词解释 2.粒子更新 二.PSO算法参数寻优的python实现 参考资料 粒子群优化算法(Partic ...

  7. 粒子群优化算法的寻优算法——非线性函数极值寻优Matlab

    粒子群算法的起源 1995年,受到鸟群觅食行为的规律性启发,James Kennedy和Russell Eberhart建立了一个简化算法模型,经过多年改进最终形成了粒子群优化算法(Particle ...

  8. Matlab基于动态粒子群算法的动态环境寻优算法 基本粒子群算法首先是在解空间中随机初始化所有粒子

    Matlab基于动态粒子群算法的动态环境寻优算法 基本粒子群算法首先是在解空间中随机初始化所有粒子,每个粒子位置即代表问题的一个潜在解,在搜索过程中,采用适应度函数对每个粒子位置进行评价,适应度值好的 ...

  9. MATLAB代码:基于粒子群算法的电动汽车充电站最优选址和定容

    MATLAB代码:基于粒子群算法的电动汽车充电站最优选址和定容 关键词:选址定容 电动汽车 充电站位置 仿真平台:MATLAB 主要内容:代码主要做的是一个电动汽车充电站的选址定容问题,提出了能够计及 ...

最新文章

  1. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)...
  2. 【C语言】switch…case无break情况(2)
  3. 文件锁操作《精通Unix下C语言编程与项目实践》之三
  4. ubuntu18.10的header文件搜索路径
  5. 这个国家太奇怪了!全球最落后的国家之一,却又是世界上最幸福的国家!
  6. python的字符串内建函数
  7. c语言 amp a 1,c语言那些细节之a+1和a+1的区别
  8. nodejs学习笔记-用http模块开启服务器端口
  9. Sharepoint创建List
  10. 【滤波跟踪】捷联惯导纯惯导解算matlab实现
  11. Spring ClassPathResource详解
  12. 以实例说明,网吧组网方案详解!(转)
  13. java 自定义控件_自定义控件的开发
  14. 第九章 姜小白大难不死登君位 公子纠迟来一步梦成空
  15. Java对PDF进行电子签章CA签名认证
  16. 单片机编程简易计算机的设计,简易计算器设计
  17. linux代码之spin lock
  18. Django 实现搜索结果分页(筛选结果分页),以及优雅添加多个筛选条件
  19. PHP 获取浏览器以及版本号
  20. Linux中for循环的几种写法

热门文章

  1. 华夫饼为什么不松软_只需半个小时,教你轻松制作松软“华夫饼”,健康美味无添加...
  2. 转载 顺藤摸瓜:让盗号者得不偿失
  3. 太爽啦,GitHub网站1S变VS Code
  4. HDU 1427 速算24点 (深搜)
  5. 国内终端安全防护市场报告发布 360网神排行第一
  6. 据说看懂这些故事的人 最后都成了亿万富翁
  7. 【每日一题】day1(星际密码->斐波那契)
  8. 23届计算机保研经验帖(北邮)
  9. linux sudo yum命令详解,Linux apt-get
  10. Webview加载本地图片的方案对比