news 2026/10/25 19:02:33

基于遗传算法优化BP神经网络(GA-BP)的数据回归 基于GA优化BP神经网络的数据回归

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于遗传算法优化BP神经网络(GA-BP)的数据回归 基于GA优化BP神经网络的数据回归

基于遗传算法优化BP神经网络(GA-BP)的数据回归 基于GA优化BP神经网络的数据回归 代码可以随意修改输入和输出代码可以选择模型的训练集个数 数据存储用的是 excel (方便修改数据),代码注释详细,完全适合新手学习。

调神经网络参数有多折磨人?试过遗传算法优化BP吗?今天咱们直接上代码,手把手教你怎么用遗传算法给BP神经网络找最佳初始参数,数据存在Excel里随便改,训练集个数自己定,小白也能秒上手。

先看数据怎么处理。咱们用pandas直接读Excel表格,第一列到倒数第二列是特征,最后一列是输出值。这里我故意留了数据缩放的接口,万一遇到量纲差异大的数据记得开箱即用:

import pandas as pd from sklearn.preprocessing import MinMaxScaler data = pd.read_excel('dataset.xlsx').values input_data = data[:, :-1] # 倒数第二列之前都是输入 output_data = data[:, -1].reshape(-1,1) # 最后一列是输出 # 数据归一化,新手注意这个scaler要复用 scaler_x = MinMaxScaler() scaler_y = MinMaxScaler() X = scaler_x.fit_transform(input_data) Y = scaler_y.fit_transform(output_data)

接下来是重头戏遗传算法。咱们把神经网络的初始权重和阈值编码成染色体,种群规模设20,迭代10次(实际项目可以调大)。适应度直接用神经网络预测的均方误差,误差越小适应度越高:

# 遗传算法核心参数 DNA_SIZE = 10 # 每个染色体包含10个参数(根据网络结构调整) POP_SIZE = 20 CROSS_RATE = 0.8 MUTATION_RATE = 0.003 N_GENERATIONS = 10 def get_fitness(pop): # 把种群中的每个DNA解码成网络参数 fitness = [] for dna in pop: # 这里用随机数模拟实际训练过程,真实代码需替换为神经网络训练 # model = build_model(dna) # pred = model.predict(X_train) # loss = mean_squared_error(y_train, pred) loss = np.random.rand() # 占位符,实际要用真实loss fitness.append(1/(loss + 1e-5)) # 防止除零 return np.array(fitness)

交叉变异怎么实现?这里有个小技巧——用numpy的向量操作代替循环,速度直接快十倍。注意变异要控制幅度,别让参数飞了:

def crossover(parent, pop): if np.random.rand() < CROSS_RATE: i = np.random.randint(0, POP_SIZE, size=1) cross_points = np.random.randint(0, 2, size=DNA_SIZE).astype(np.bool) parent[cross_points] = pop[i, cross_points] return parent def mutate(child): for point in range(DNA_SIZE): if np.random.rand() < MUTATION_RATE: child[point] += np.random.normal() return child

最后整合成完整的训练流程。把遗传算法找到的最佳参数灌给BP网络,你会发现训练收敛快多了。这里用Keras搭建网络,注意输入输出层节点数要改的话直接改第一层和最后一层的units数就行:

from keras.models import Sequential from keras.layers import Dense def build_bp(dna=None): model = Sequential() model.add(Dense(units=6, activation='relu', input_dim=3)) # input_dim改成你的特征数 model.add(Dense(units=1)) if dna is not None: # 如果传入了遗传算法优化的参数 model.set_weights(dna_to_weights(dna)) # 需要实现DNA解码函数 model.compile(optimizer='adam', loss='mse') return model # 训练示例 best_dna = ga_optimize() # 执行遗传算法优化 model = build_bp(best_dna) history = model.fit(X_train, y_train, epochs=500, verbose=0)

跑完代码别忘反归一化输出结果,要不看到0-1之间的数值该懵了。画个预测值和真实值的对比图,效果一目了然:

# 结果反归一化 y_pred = scaler_y.inverse_transform(model.predict(X_test)) y_true = scaler_y.inverse_transform(y_test) # 画个酷炫的对比图 plt.plot(y_true, 'r', label='True') plt.plot(y_pred, 'b--', label='Predict') plt.legend() plt.show()

遇到显存不足怎么办?把batch_size调小到16或32。训练时间太长?适当减少隐层神经元数量。代码里所有关键参数都做成了变量,改起来就像调空调温度一样简单。

最后说个实战经验:遗传算法迭代次数别超过50,种群规模控制在20-50之间效果最佳。有时候单纯用遗传算法优化的模型可能还不如随机搜索,这时候试试把遗传算法的变异率调高,说不定有奇效。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 17:51:20

HarmonyOS 6 API 22 新特性NDK支持多线程创建组件能力介绍

HarmonyOS 6 API22新特性NDK支持多线程创建组件能力介绍 在HarmonyOS应用开发中&#xff0c;UI组件的创建与渲染性能直接影响用户体验。随着应用功能日益复杂&#xff0c;动态创建大量UI组件的场景愈发普遍&#xff0c;而传统单线程创建模式的性能瓶颈逐渐凸显。HarmonyOS 6 AP…

作者头像 李华
网站建设 2026/10/11 23:37:40

三菱FX3U-485ADP-MB与欧姆龙E5CC温控器的MODBUS通讯实践

三菱fx3u485ADP MB与4台欧姆龙E5CC温控器通讯案例程序 功能&#xff1a;通过三菱fx3u 485ADP-MB板对4台欧姆龙E5cc温控器进行modbus通讯&#xff0c;实现温度设定&#xff0c;实际温度读取 配件&#xff1a;三菱fx3u 485ADP-mb&#xff0c;三菱fx3u 485BD板&#xff0c;昆仑通态…

作者头像 李华
网站建设 2026/10/23 9:19:55

Java SpringBoot多商户电商完整代码实战:部署简易,适合初创产品,专业指导运行与部...

java springboot多商户电商完整代码&#xff0c;亲测能运行。这个框架的优点就是依赖中间件比较少&#xff0c;部署简单&#xff0c;阿里云腾讯云部署简单。 客户端用uniapp写的也比源生的部署简单很多。 实际使用下来比我另外一个更适合初创产品。 简单问题我咸鱼看到了就免费…

作者头像 李华
网站建设 2026/10/22 18:02:53

用VM17快速构建开发测试环境原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个VM17环境快速部署工具&#xff0c;能够&#xff1a;1.根据开发语言/框架自动配置环境 2.预装常用开发工具 3.设置基础网络配置 4.生成环境说明文档。支持Python、Java、No…

作者头像 李华
网站建设 2026/10/19 12:13:57

UNOCSS vs 传统CSS:开发效率对比实测报告

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比测试项目&#xff0c;分别用UNOCSS和传统CSS实现相同的UI界面。要求&#xff1a;1.实现3个典型页面(登录页、列表页、详情页) 2.统计两种方式的代码行数 3.测量构建时…

作者头像 李华
网站建设 2026/10/23 18:48:10

vue的php明星周边销售管理系统的设计与实现

目录摘要项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 该系统基于Vue.js前端框架与PHP后端技术&#xff0c;设计并实现了一个明星周边销售管理系统&#xff0c;旨在满足粉丝群体对明星周边商品的在线购买需求&#xff0c;同时为管理员提供…

作者头像 李华