bp神经网络分类案例python_BP神经网络对鸢尾花进行分类

本文介绍了使用Python实现BP神经网络对鸢尾花数据集进行分类的过程,包括初始化参数、前向传播、计算代价函数、反向传播、参数更新以及模型评估。代码详细展示了神经网络的构建和训练,最终对测试集进行预测并计算准确率。
摘要由CSDN通过智能技术生成

import numpy as np

import pandas as pd

'''

构建一个具有1个隐藏层的神经网络,隐层的大小为5

输入层为2个特征,输出层为2个分类

0为第一类,1为第二类

'''

# 1.初始化参数

def initialize_parameters(n_x, n_h, n_y):

np.random.seed(2)

# 权重和偏置矩阵

w1 = np.random.randn(n_h, n_x) * 0.01

b1 = np.zeros(shape=(n_h, 1))

w2 = np.random.randn(n_y, n_h) * 0.01

b2 = np.zeros(shape=(n_y, 1))

print('输入层与隐含层之间的初始权值:')

print(w1)

print('输入层与隐含层之间的初始偏置:')

print(b1)

print('隐含层与输出层之间的初始权值:')

print(w2)

print('隐含层与输出层之间的初始偏置:')

print(b2)

# 通过字典存储参数

parameters = {'w1': w1, 'b1': b1, 'w2': w2, 'b2': b2}

return parameters

# 2.前向传播

def forward_propagation(X, parameters):

w1 = parameters['w1']

b1 = parameters['b1']

w2 = parameters['w2']

b2 = parameters['b2']

# 通过前向传播来计算a2

z1 = np.dot(w1, X) + b1 # 这个地方需注意矩阵加法:虽然(w1*X)和b1的维度不同,但可以相加

a1 = np.tanh(z1) # 使用tanh作为第一层的激活函数

z2 = np.dot(w2, a1) + b2

a2 = 1 / (1 + np.exp(-z2)) # 使用sigmoid作为第二层的激活函数

# 通过字典存储参数

cache = {'z1': z1, 'a1': a1, 'z2': z2, 'a2': a2}

return a2, cache

# 3.计算代价函数

def compute_cost(a2, Y, parameters):

m = Y.shape[1] # Y的列数即为总的样本数

# 采用交叉熵(cross-entropy)作为代价函数

logprobs = np.multiply(np.log(a2), Y) + np.multiply((1 - Y), np.log(1 - a2))

cost = - np.sum(logprobs) / m

return cost

# 4.反向传播(计算代价函数的导数)

def backward_propagation(parameters, cache, X, Y):

m = Y.shape[1]

w2 = parameters['w2']

a1 = cache['a1']

a2 = cache['a2']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>