观看main函数能够看出框架框架要简单比如训练不给它细分数据流向关注转为哪个数据而不是关注维度维度在调试的时候才关注1、表示数据流向2、# #包围的表示框架3、# 表示普通的框架内的注释4、# -----补充-----表示补充的注释5、总体框架以及流向以及说明写在文件最开头 基于PSO的BP神经网络预测 - PyTorch版本 框架 数据准备设备设置|数据加载→数据转换→参数设置→训练→结果展示以及预测 数据流向 # 加载数据P、T、P_test、T_test、cur_season数据转换P_tensor、T_tensor、P_test_tensor、T_test_tensor、cur_season_tensor # particle粒子particle粒子、cost、GlobalBest、BestCost预测的结果值prob importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.specialimportsoftmaximporttimeimporttorchimporttorch.nnasnnimporttorch.optimasoptimfrombp_functionimportBpFunction np.random.seed(42)torch.manual_seed(42)# -----补充粒子类定义-----classParticle:def__init__(self,position,velocity,cost,best_position,best_cost):self.Positionposition# 粒子位置self.Velocityvelocity# 粒子速度self.Costcost# 粒子当前适应度self.Best{Position:best_position,Cost:best_cost}# 粒子个体最优defmain():start_timetime.time()# ## 设备设置——最终数据都需要经过这个设备来进行计算# #devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)print(f使用设备:{device})# 加载数据P、T、P_test、T_test、cur_season# 数据加载print(加载数据...)Pnp.loadtxt(P_train.txt)Tnp.loadtxt(T_train.txt).reshape(-1,1)P_testnp.loadtxt(P_test.txt)T_testnp.loadtxt(T_test.txt).reshape(-1,1)cur_seasonnp.loadtxt(2022.txt)# 加载数据P、T、P_test、T_test、cur_season数据转换P_tensor、T_tensor、P_test_tensor、T_test_tensor、cur_season_tensor# ## # 数据转换——转换到PyTorch张量并移动到设备上# #P_tensortorch.FloatTensor(P).to(device)T_tensortorch.FloatTensor(T).to(device)P_test_tensortorch.FloatTensor(P_test).to(device)T_test_tensortorch.FloatTensor(T_test).to(device)cur_season_tensortorch.FloatTensor(cur_season).to(device)# ## # 参数设置——训练参数设置1-BP参数# #inputnumP.shape[1]# 输入层神经元个数hiddennum2*inputnum1# 初始隐层神经元个数outputnumT.shape[1]# 输出层神经元个数w1numinputnum*hiddennum# 输入层到隐层的权值个数w2numoutputnum*hiddennum# 隐层到输出层的权值个数Nw1numhiddennumw2numoutputnum# 待优化的变量个数print(f网络结构:{inputnum}-{hiddennum}-{outputnum})print(f待优化变量个数:{N})# ## # 参数设置——训练参数设置2-PSO参数设置# #nVarN VarMin-0.5VarMax0.5MaxIt200nPop40w1.0wdamp0.99c11.5c22.0VelMax0.1*(VarMax-VarMin)VelMin-VelMax# -----补充粒子变量保存以及最佳解保存-----particles[]GlobalBest{Position:None,Cost:np.inf}# 加载数据P、T、P_test、T_test、cur_season数据转换P_tensor、T_tensor、P_test_tensor、T_test_tensor、cur_season_tensor# particle粒子获得第一次BP网络训练之后的结果得到当前的最佳# ## 训练# #print(初始化粒子群...)foriinrange(nPop):positionnp.random.uniform(VarMin,VarMax,nVar)velocitynp.zeros(nVar)cost,_BpFunction(position,P_tensor,T_tensor,hiddennum,P_test_tensor,T_test_tensor,device)best_positionposition.copy()best_costcost particleParticle(position,velocity,cost,best_position,best_cost)particles.append(particle)ifbest_costGlobalBest[Cost]:GlobalBest[Position]best_position.copy()GlobalBest[Cost]best_cost# 初始化变量之后用来记录最优成本BestCostnp.zeros(MaxIt)# 加载数据P、T、P_test、T_test、cur_season数据转换P_tensor、T_tensor、P_test_tensor、T_test_tensor、cur_season_tensor# particle粒子particle粒子、cost、GlobalBest、BestCostPSO训练print(开始PSO优化...)foritinrange(MaxIt):foriinrange(nPop):# 更新速度r1np.random.rand(nVar)r2np.random.rand(nVar)particles[i].Velocity(w*particles[i].Velocityc1*r1*(particles[i].Best[Position]-particles[i].Position)c2*r2*(GlobalBest[Position]-particles[i].Position))# 速度限制particles[i].Velocitynp.clip(particles[i].Velocity,VelMin,VelMax)# 更新位置particles[i].Positionparticles[i].Positionparticles[i].Velocity# 位置边界处理反弹IsOutside(particles[i].PositionVarMin)|(particles[i].PositionVarMax)particles[i].Velocity[IsOutside]-particles[i].Velocity[IsOutside]particles[i].Positionnp.clip(particles[i].Position,VarMin,VarMax)# 评估适应度cost,_BpFunction(particles[i].Position,P_tensor,T_tensor,hiddennum,P_test_tensor,T_test_tensor,device)particles[i].Costcost# 更新个体最优ifcostparticles[i].Best[Cost]:particles[i].Best[Position]particles[i].Position.copy()particles[i].Best[Cost]cost# 更新全局最优ifcostGlobalBest[Cost]:GlobalBest[Position]particles[i].Position.copy()GlobalBest[Cost]cost BestCost[it]GlobalBest[Cost]print(fIteration{it1}: Best Cost {BestCost[it]:.6f})ww*wdamp# ## # 结果展示# #plt.figure(figsize(10,6))plt.semilogy(BestCost,linewidth2)plt.xlabel(迭代次数,fontsize12)plt.ylabel(误差的变化,fontsize12)plt.title(进化过程,fontsize14)plt.grid(True)plt.savefig(evolution_pso.png,dpi300,bbox_inchestight)plt.show()# 加载数据P、T、P_test、T_test、cur_season数据转换P_tensor、T_tensor、P_test_tensor、T_test_tensor、cur_season_tensor# particle粒子particle粒子、cost、GlobalBest、BestCost预测的结果值prob# ## # 预测# #print(f\n最优初始权值和阈值数量:{len(GlobalBest[Position])})print(f最小误差:{GlobalBest[Cost]:.6f})print(\n预测今年总冠军概率...)_,bestCur_simBpFunction(GlobalBest[Position],P_tensor,T_tensor,hiddennum,cur_season_tensor,None,device)probsoftmax(bestCur_sim.flatten())#将预测结果映射为和为1的概率print(f勇士队获得2022年NBA总冠军概率为:{prob[0]:.4f})print(f凯尔特人队获得2022年NBA总冠军概率为:{prob[1]:.4f})elapsed_timetime.time()-start_timeprint(f\n总耗时:{elapsed_time:.2f}秒)if__name____main__:main()