6

我有一个通过粒子群优化 (PSO) 训练的 4 输入和 3 输出神经网络,使用 MATLAB 提供的 IRIS 数据库以均方误差 (MSE) 作为适应度函数。适应度函数被评估 50 次。实验是对特征进行分类。我有几个疑问

(1) PSO 迭代次数/代数是否 = 评估适应度函数的次数?

(2) 在许多论文训练曲线中,我看到 MSE 与世代的训练曲线正在绘制。图中,左边的图(a)是一个类似于NN的模型。它是一个 4 输入 0 隐藏层 3 输出认知图。图 (b) 是由同一 PSO 训练的 NN。本文的目的是展示新模型在 (a) 中对 NN 的有效性。

但他们提到该实验是说 Cycles = 100 次,Generations = 300。在这种情况下,(a)和(b)的训练曲线应该是 MSE vs Cycles 而不是 MSE vs PSO 代?例如,Cycle1 : PSO 迭代 1-50 --> Result(Weights_1,Bias_1, MSE_1, Classification Rate_1)。Cycle2:PSO 迭代 1- 50 -->Result(Weights_2,Bias_2, MSE_2, Classification Rate_2) 等等 100 个周期。(a),(b) 中的 X 轴为何不同,它们是什么意思?

(3) 最后,对于程序的每次独立运行(通过控制台独立运行 m 文件多次),我从来没有得到相同的分类率 (CR) 或相同的权重集。具体来说,当我第一次运行程序时,我得到 W(权重)值和 CR = 100%。当我再次运行 Matlab 代码程序时,我可能会得到 CR = 50% 和另一组权重!如下图所示,

%Run1 (PSO generaions 1-50) 
>>PSO_NN.m

Correlation =

     0

Classification rate = 25



FinalWeightsBias =

   -0.1156    0.2487    2.2868    0.4460    0.3013    2.5761

%Run2 (PSO generaions 1-50) 
>>PSO_NN.m
Correlation =

     1

Classification rate = 100

%Run3 (PSO generaions 1-50) 
>>PSO_NN.m
Correlation =

   -0.1260

Classification rate = 37.5

    FinalWeightsBias =

   -0.1726    0.3468    0.6298   -0.0373    0.2954   -0.3254

正确的方法应该是什么?那么,我最终应该采用哪个权重集,如何说网络已经训练好?我知道进化算法由于它们的随机性永远不会给出相同的答案,但是我如何确保网络已经过训练?有义务澄清。

4

1 回答 1

4
  1. 与大多数机器学习方法一样,PSO 中的迭代次数是解决方案更新的次数。在 PSO 的情况下,这是所有粒子的更新轮数。这里的成本函数是在每个粒子更新后评估的,因此超过了迭代次数。大约,(# 成本函数调用) = (# 迭代) * (# 粒子)。
  2. 这里的图比较了不同的分类器,图 (a) 的模糊认知图和图 (b) 的神经网络。因此 X 轴显示了每个学习迭代的相关度量。
  3. 每次运行 NN 时,都会使用不同的随机值对其进行初始化,因此结果永远不会相同。结果从一次运行到下一次变化很大的事实意味着您遇到了收敛问题。在这种情况下要做的第一件事是尝试运行更多的迭代。一般来说,收敛是一个相当复杂的问题,解决方案因应用程序而异(仔细阅读 Isaac 就您的其他问题给您的答案和评论)。如果您的问题在增加迭代次数后仍然存在,您可以将其作为一个新问题发布,提供您的数据样本以及用于构建和训练网络的实际代码。
于 2014-04-13T11:27:21.027 回答