一文彻底弄懂BP算法:原理推导+数据演示+项目实战(下篇)

小微 科技一文彻底弄懂BP算法:原理推导+数据演示+项目实战(下篇)已关闭评论97字数 1653阅读模式
摘要在\"一文彻底搞懂BP算法:原理推导+数据演示+项目实战 :param inputs: 上一层神经元的输出 :return: 当前层神经元的输入 \"\"\" bias_term ...

在\"一文彻底弄懂BP算法:原理推导+数据演示+项目实战 :param inputs: 上一层神经元的输出 :return: 当前层神经元的输入 \"\"\" bias_term = weights[-1] z = 0 for i in range(len(weights)-1): z += weights[i] * inputs[i] z += bias_term return zdef sigmoid(z): \"\"\"激活函数(Sigmoid):f(z) = Sigmoid(z) :param z: 神经元的输入 :return: 神经元的输出 \"\"\" return 1.0 / (1.0 + math.exp(-z))def sigmoid_derivative(output): \"\"\"Sigmoid激活函数求导 :param output: 激活函数的输出值 :return: 求导计算结果 \"\"\" return output * (1.0 - output)

函数\"fun_z\"实现了公式\"z = weight * inputs + b\",其中inputs是上一层网络的输出,weight是当前层的权重矩阵,b是当前层的偏置项,计算得到的z是当前层的输入。文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

函数\"sigmoid\"是Sigmoid激活函数的实现,将z作为激活函数的输入,计算得到当前层的输出,并传递到下一层。文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

函数\"sigmoid_derivative\"是Sigmoid函数求导的实现,在误差反向传布的时候需要用到。文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

接下来咱们实现BP网络的前向传布:文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

def forward_propagate(network, inputs): \"\"\"前向传布计算 :param network: 神经网络 :param inputs: 一个样本数据 :return: 前向传布计算的结果 \"\"\" for layer in network: 文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

def backward_propagate_error(network, actual_label): \"\"\"误差进行反向传布 :param network: 神经网络 :param actual_label: 真正的标签值 :return: \"\"\" for i in reversed(range(len(network))): 文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

在计算得到每一一层的误差项以后,咱们依据上篇中介绍的权重矩阵以及偏置项的更新公式来更新参数:文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

def update_parameters(network, row, l_rate): \"\"\"应用误差更新神经网络的参数 :param n_inputs: 特征列数 :param n_hidden: 暗藏层神经元个数 :param n_outputs: 输出层神经元个数,即分类的总种别数 :return: 初始化后的神经网络 \"\"\" network = list() 文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

接下来咱们实现模型的训练部份:文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

def train(train_data, l_rate, epochs, n_hidden, val_data): \"\"\"训练神经网络 \"\"\" correct_count = 0 for i in range(len(actual_label)): if actual_label[i] == predicted_label[i]: correct_count += 1 return correct_count / float(len(actual_label)) * 100.0def predict(network, row): \"\"\"使用模型对当前输入的数据进行预测 :param network: 神经网络 :param row: 一个数据样本 :return: 预测结果 \"\"\" outputs = forward_propagate(network, row) return outputs.index(max(outputs))文章源自微观生活(93wg.com)微观生活-https://93wg.com/23228.html

最后咱们运行代码:

if __name__ == \"__main__\": file_path = \'./iris.csv\'

以上就是微观生活(93wg.com)关于“一文彻底弄懂BP算法:原理推导+数据演示+项目实战(下篇)”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/23228.html