神经网络和BP算法C及python代码

这是一个关于神经网络的博客,详细介绍了BP反向传播算法,并提供了C和Python两种语言的实现代码。博客内容包含了神经网络的前向传播计算,以及具体的输入输出格式。提供的样例数据用于展示神经网络的运算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以上仅给出了代码。具体BP实现原理及神经网络相关知识请见:神经网络和反向传播算法推导

首先是前向传播的计算:

输入:
首先为正整数 n、m、p、t,分别代表特征个数、训练样本个数、隐藏层神经元个数、输出
层神经元个数。其中(1<n<=100,1<m<=1000, 1<p<=100, 1<t<=10)。
随后为 m 行,每行有 n+1 个整数。每行代表一个样本中的 n 个特征值 (x 1 , x 2 ,..., x n ) 与样本的
实际观测结果 y。特征值的取值范围是实数范围,实际观测结果为(1-t 的正整数)。
最后为 2 组特征权值矩阵初始化值。
第一组为输入层与隐藏层特征权值矩阵,矩阵大小为 p*(n+1)。
第二组为隐藏层与输出层特征权值矩阵,矩阵大小为 t*(p+1)。
输出:
包括三部分:
第一行为 1 个浮点数,是神经网络使用初始特征权值矩阵计算出的代价值 J。
然后是 m 行,每行为 p 个浮点数,神经网络隐藏层的输出(不算偏移 bias)。
最后是 m 行,每行为 t 个浮点数,神经网络输出层的输出(不算偏移 bias)。
Sample Input1:
3 3 5 3
0.084147 0.090930 0.014112 3
0.090930 0.065699 -0.053657 2
2 3 4 1
0.084147 -0.027942 -0.099999 -0.028790
0.090930 0.065699 -0.053657 -0.096140
0.014112 0.098936 0.042017 -0.075099
-0.075680 0.041212 0.099061 0.014988
-0.095892 -0.054402 0.065029 0.091295
0.084147 -0.075680 0.065699 -0.054402 0.042017 -0.028790
0.090930 -0.095892 0.098936 -0.099999 0.099061 -0.096140
0.014112 -0.027942 0.041212 -0.053657 0.065029 -0.075099
Sample Output1:
2.0946610.518066 0.522540 0.506299 0.484257 0.476700
0.519136 0.524614 0.507474 0.483449 0.474655
0.404465 0.419895 0.509409 0.589979 0.587968
0.514583 0.511113 0.497424
0.514587 0.511139 0.497447
0.515313 0.511164 0.496748

此处需要补充说明的是这里计算的只是单层神经网络并且在lable原本的值是3,2,1代表的是第一次输出第三个输出单元输出为1,第二次输出第二个输出单元输出为1...

python代码如下:

#coding=utf-8 
from numpy import *
#from math import *
from numpy.distutils.core import numpy_cmdclass
f=open( r'test')
input=[]
#数据预处理,把文件数据转换
for each in f:
    input.append(each.strip().split())
n,m,p,t=input[0]
sample=input[1:int(n)+1]
w_in_hidden=input[int(n)+1:int(n)+6]
w_hidden_out=input[int(n)+6:]
feature=[]#特征矩阵
lable=[]#标记
for each in sample:
    feature.append(each[:-1])
    lable.append(each[-1])
#将list转化成矩阵
feature=mat(feature)
lable=mat(lable)
w_in_hidden=mat(w_in_hidden)#隐藏层与输入层的权值矩阵
w_hidden_out=mat(w_hidden_out)#隐藏层与输出层的权值矩阵
#逆置
feature=feature.T
zero=mat(ones(feature.shape[0]))
feature=row_stack((zero,feature))
#将第0行加入矩阵,属矩阵拼接问题
feature=feature.a
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值