基于Python遗传算法的人工神经网络优化

人工神经网络(ANN)是一种简单的全连接神经网络,其通过前向传播来进行参数计算,使用后向传播进行参数权重更新。一般我们会采用随机梯度下降来更新权重,但今天我们换一个新的方法,通过遗传算法来进行参数寻优,遗传算法是一种经典的优化算法,其算法思想借鉴生物种群间“优胜劣汰”的机制。在本例程中我们通过使用遗传算法优化人工神经网络权重进行图像分类实验。

项目地址:

https://github.com/ahmedfgad/NeuralGenetic

确定待优化参数

本例中,我们将要通过遗传算法优化神经网络各层的网络参数,因此我们首先定义人工神经网络的网络结构,这里我们使用的是4层网络,即一个输入、2个隐藏、1个输出。那么我们就得到要优化参数个数为102x150 + 150x60 + 60x4 = 24540个,如果我们设定遗传算法有8个群体,即整个参数数量将有24540x8 = 196320个。

 

 

由于网络的参数是矩阵形式,而在GA中是矢量形式,所以我们在优化的过程中需要转换以方便计算。下图是整个案例的流程图:

 

 

代码部分函数介绍

mat_to_vector函数和vector_to_mat函数:因为GA中参数为一维向量,而在ANN中是3个权重矩阵,所以通过这两个函数进行相互转换。

mat_to_vector函数代码如下

def mat_to_vector(mat_pop_weights):
     pop_weights_vector = []
     for sol_idx in range(mat_pop_weights.shape[0]):
         curr_vector = []
         for layer_idx in range(mat_pop_weights.shape[1]):
             vector_weights = numpy.reshape(mat_pop_weights[sol_idx, layer_idx], newshape=(mat_pop_weights[sol_idx, layer_idx].size))
             curr_vector.extend(vector_weights)
         pop_weights_vector.append(curr_vector)
     return numpy.array(pop_weights_vector)

vector_to_mat函数代码如下

  • 19
    点赞
  • 264
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值