社区
数据结构与算法
帖子详情
有没有BP反向传播算法,我紧急需要?
pxwzd123
2003-08-21 12:12:33
如标题.多谢提供!!!!!!!!
...全文
169
8
打赏
收藏
有没有BP反向传播算法,我紧急需要?
如标题.多谢提供!!!!!!!!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pxwzd123
2003-09-06
打赏
举报
回复
多谢多谢
stephen85
2003-09-04
打赏
举报
回复
请问什么是BP反向传播算法?????????
xl44
2003-09-04
打赏
举报
回复
嗯,学习率改过很多次的,包括动态修改的
ljranby
2003-09-03
打赏
举报
回复
学习速率太大了,改小点试试
xl44
2003-09-03
打赏
举报
回复
个别数值要更改的,另外不是每次能收敛,还望达人指点
xl44
2003-09-03
打赏
举报
回复
//BP.h bp算法
#include "StdAfx.h"
#include <math.h>
#include <stdlib.h>
double Sigmoid(double x)
{
double f=(double)(1.0/(1.0+exp(-x)));
return(f);
}
double Sigmoid2(double x)
{
double f=(double)(exp(-x)/((1+exp(-x))*(1+exp(-x))));
return f;
}
void change(UINT t,double* T,UINT m)
{
UINT f=t;
for(UINT i=0; i < 5;i++){
double l=(double)(f%2);
T[m*5+i]=fabs(l - 0.1);
f = f/2;
}
}
UINT BPModel(UINT width,UINT height,LPSTR g,UINT f)
{
//读取权值
char pFileName[256];
GetModuleFileName( NULL, pFileName, 255 );
CString csFullPath(pFileName);
CString fn;
int nPos = csFullPath.ReverseFind( _T('\\') );
if( nPos >= 0 )
fn=csFullPath.Left( nPos );
switch (f){
case 0:
fn +="\\BPcn.xl44";break;
case 1:
fn +="\\BPen.xl44";break;
case 2:
fn +="\\BPen2.xl44";break;
default:
fn +="\\BPnum.xl44";break;
}
CFile fp;
if(!fp.Open(fn, CFile::modeReadWrite | CFile::shareExclusive | CFile::typeBinary)) {
return 44;
}
double Wji[40][121];
double Wkj[5][40];
fp.Read(Wji,40*121*8);
fp.Read(Wkj,5*40*8);
//取得输入
UINT w_8=w_8(width);
double train[121];
for(UINT y=0; y < 11;y++){
for(UINT x=0; x < 11;x++){
UINT num=0;
if(g[3*y*w_8 + 3*x] == (BYTE)0x00)
num++;
if(g[3*y*w_8 + 3*x + 1] == (BYTE)0x00)
num++;
if(g[3*y*w_8 + 3*x + 2] == (BYTE)0x00)
num++;
if(g[(3*y + 1)*w_8 + 3*x] == (BYTE)0x00)
num++;
if(g[(3*y + 1)*w_8 + 3*x + 1] == (BYTE)0x00)
num++;
if(g[(3*y + 1)*w_8 + 3*x + 2] == (BYTE)0x00)
num++;
if(g[(3*y + 2)*w_8 + 3*x] == (BYTE)0x00)
num++;
if(g[(3*y + 2)*w_8 + 3*x + 1] == (BYTE)0x00)
num++;
if(g[(3*y + 2)*w_8 + 3*x + 2] == (BYTE)0x00)
num++;
train[y*11 + x] = (double)(num/9);
}
}
double Ij[40];
double Oj[40];
double Ik[5];
double Ok[5];
UINT ci=0;
UINT cj=0;
UINT ck=0;
for(cj=0;cj < 40;cj++){
Ij[cj]=0.0;
Oj[cj]=0.0;
}
for(ck=0;ck < 5;ck++){
Ik[ck]=0.0;
Ok[ck]=0.0;
}
for(cj = 0;cj < 40;cj++){
for(ci =0;ci < 121;ci++){
Ij[cj] +=Wji[cj][ci]*train[ci];
}
Oj[cj] = Sigmoid(Ij[cj]);
}
for(ck = 0;ck < 5;ck++){
for(cj = 0;cj < 40;cj++){
Ik[ck] += Wkj[ck][cj] * Oj[cj];
}
Ok[ck]=Sigmoid(Ik[ck]);
}
UINT tem[5];
for(ck = 0;ck < 5;ck++){
if(fabs(Ok[ck] - 0.0) < 0.5)
tem[ck]=0;
else
tem[ck]=1;
}
fp.Close();
UINT cn=tem[0] + tem[1]*2 +tem[2]*4 + tem[3]*8 + tem[4]*16;
return cn;
}
UINT train()
{
//打开文件,字符存为34*34像素,另加2位字符编号
char pFileName[256];
GetModuleFileName( NULL, pFileName, 255 );
CString csFullPath(pFileName);
CString fn;
int nPos = csFullPath.ReverseFind( _T('\\') );
if( nPos >= 0 )
fn=csFullPath.Left( nPos );
fn+="\\num.xl44";
CFile fp;
if(!fp.Open(fn, CFile::modeReadWrite | CFile::shareExclusive | CFile::typeText)) {
return 44;
}
double Wji[40][121];//权值,隐节点40 ,输入11*11
double Wkj[5][40];//权值,输出5
//double level1[j][i];
//double level2[k][j];
double Ij[40];//输入
double Oj[40];//输出
double Ik[5];
double Ok[5];
double n=(double)0.6;//学习率
UINT flag=0;
UINT ci=0;//循环变量
UINT cj=0;
UINT ck=0;
double train[121*24];//样本数据
double Target[5*24];//训练目标,24个样本
UINT target;//训练目标
char lib[34*34];//字符
char tar[2];//字符编号
for(UINT m = 0;m < 24;m++){
fp.Read(lib,34*34);
fp.Read (tar,2);
//为提高速度,取特征11X11
for(UINT y = 0;y < 11;y++){
for(UINT x = 0;x < 11;x++){
UINT num = 0;
if(lib[3*y*34 + 3*x] == '1')
num++;
if(lib[3*y*34 + 3*x + 1] == '1')
num++;
if(lib[3*y*34 + 3*x + 2] == '1')
num++;
if(lib[(3*y + 1)*34 + 3*x] == '1')
num++;
if(lib[(3*y + 1)*34 + 3*x + 1] == '1')
num++;
if(lib[(3*y + 1)*34 + 3*x + 2] == '1')
num++;
if(lib[(3*y + 2)*34 + 3*x] == '1')
num++;
if(lib[(3*y + 2)*34 + 3*x + 1] == '1')
num++;
if(lib[(3*y + 2)*34 + 3*x + 2] == '1')
num++;
train[m*121 + y*11 + x] = (double)((double)(num)/9);
}
}
target=((UINT)tar[0] - 48)*10 + ((UINT)tar[1] - 48);
change(target,Target,m);
}
fp.Close();
//赋初值
double tem=0.0;
for(cj=0;cj < 40;cj++){
for(ci=0;ci < 121;ci++){
tem=(double)((rand()%100)/100.0);
if(tem > 0.5)
tem-=1.0;
Wji[cj][ci]=tem;
}
}
for(ck=0;ck < 5;ck++){
for(cj=0;cj < 40;cj++){
tem=(double)((rand()%100)/100.0);
if(tem > 0.5)
tem-=1.0;
Wkj[ck][cj]=tem;
}
}
//开始训练
for(UINT num = 0;num < 50000;num++){
//样本24个
for(UINT m = 0;m < 24;m++){
for(cj=0;cj < 40;cj++){
Ij[cj]=0.0;
Oj[cj]=0.0;
}
for(ck=0;ck < 5;ck++){
Ik[ck]=0.0;
Ok[ck]=0.0;
}
for(cj = 0;cj < 40;cj++){
for(ci =0;ci < 121;ci++){
Ij[cj] +=Wji[cj][ci]*train[m*121+ci];
}
Oj[cj] = Sigmoid(Ij[cj]);CString ss;
}
for(ck = 0;ck < 5;ck++){
for(cj = 0;cj < 40;cj++){
Ik[ck] += Wkj[ck][cj] * Oj[cj];
}
Ok[ck]=Sigmoid(Ik[ck]);
}
double s1=0.0;
for(cj=0; cj < 40;cj++){
for(ci=0; ci < 121;ci++){
for(ck=0; ck < 5;ck++){
s1 += (Ok[ck] - Target[5*m+ck])*Ok[ck]*(1-Ok[ck])*Wkj[ck][cj];
}
Wji[cj][ci] += n*s1*Oj[cj]*(1-Oj[cj])*train[m*121+ci];
}
}
for(ck=0;ck < 5;ck++){
for(cj=0; cj < 40;cj++){
Wkj[ck][cj] += n*(Target[5*m+ck]-Ok[ck])*Ok[ck]*(1-Ok[ck])*Oj[cj];
}
}
UINT pp=0;
for(ck=0;ck < 5;ck++){
if(fabs(Ok[ck]-Target[5*m+ck]) < 0.3)
pp++;
}
if(pp == 5)
flag++;
}
if(flag == 24){
if(flag == 24){
char pFileName2[256];
GetModuleFileName( NULL, pFileName2, 255 );
CString csFullPath(pFileName2);
CString fn2;
int nPos = csFullPath.ReverseFind( _T('\\') );
if( nPos >= 0 )
fn2=csFullPath.Left( nPos );
fn2 +="\\BPnum.xl44";
CFile fp2;
if(!fp2.Open(fn2, CFile::modeReadWrite | CFile::shareExclusive | CFile::typeBinary)) {
return 44;
}
fp2.SeekToEnd();
fp2.Write(Wji,121*40*8);
fp2.SeekToEnd();
fp2.Write(Wkj,5*40*8);
fp2.Close();
}
//if(num == 99999){
/*char pFileName0[256];
GetModuleFileName( NULL, pFileName0, 255 );
CString csFullPath(pFileName0);
CString fn0;
int nPos0 = csFullPath.ReverseFind( _T('\\') );
if( nPos0 >= 0 )
fn0=csFullPath.Left( nPos0 );
fn0 +="\\BP2.xl44";
CFile fp0;
if(!fp0.Open(fn0, CFile::modeCreate | CFile::modeReadWrite | CFile::shareExclusive | CFile::typeText))
return 44;
fp0.SeekToEnd();
fp0.Write(Wji,121*20*4);
fp0.SeekToEnd();
fp0.Write(Wkj,5*20*4);
fp0.Close();*/
//return 2;
//}
return num;
}
/*for(j=0;j < 5;j++){
for(i=0;i < 2;i++){
level11[j][i]=level1[j][i];
}
level22[j]=level2[j];
}*/
flag=0;
}
return 0;
}
xl44
2003-09-02
打赏
举报
回复
有一个,但不是很完美,下次贴出来
ljranby
2003-08-23
打赏
举报
回复
你连邮箱都没有给,怎么给你?
摔倒识别:智能健康、
紧急
救援和体育竞技的全能神器
实验中,该算法可以在不同的样本集上实现95%以上的准确率,同时能够有效地区分摔倒和其他日常行为动作,大大降低了误判的可能性。针对目前摔倒检测方法存在的适应性弱、用户体验差、识别率不可靠等缺点,本文的方法采用了门控循环单元和时空注意力模块(STM-GRU),通过对骨架数据进行处理和分析,从骨架序列中提取时空特征,实现对老年人摔倒动作的准确识别。本文方法的主要贡献在于结合了门控循环单元和时空注意力模块,利用骨架数据进行摔倒动作识别,解决了目前算法存在的一系列问题,同时具有较好的可扩展性和实用性。
bp
神经网络performance怎么看,
BP
神经网络用什么软件
除了MATLAB能做
BP
神经网络,还有其他什么软件能做 理论上编程语言都可以,比如VB,C语言,过程也都是建模、量化、运算及结果输出(图、表),但是matlab发展到现在,集成了很多的工具箱,所以用的最为广泛,用其他的就得是要从源码开发入手了,何必舍近求远。谷歌人工智能写作项目:小发猫打开Matlab帮助-》然后选择神经网络工具箱->选择例子: 里面有很多
BP
预测的例子
bp
神经网络评价用什么软件。主要是样本组织,把输入和输出样本都确定。可以用前12个月的数据预测下一个月的数据,即第n个数据至n+11共12个
智能控制期末备考:模糊推理、
BP
网络与遗传算法核心考点解析
智能控制作为自动化学科的重要分支,融合了专家系统、模糊逻辑、神经网络与遗传算法等多元技术。模糊控制通过隶属函数与模糊推理处理不确定性问题,而
BP
神经网络凭借误差反向传播机制实现非线性映射与参数优化。遗传算法则模拟自然进化过程,在复杂搜索空间中求解最优参数。这些技术在实际工程中各有应用场景:专家系统适合规则明确的故障诊断,模糊PID适合连续过程控制,神经网络适合模式识别与监督控制。备考智能控制时,理解算法原理与工程实现的衔接尤为关键。本文系统梳理了智能控制的核心知识框架,包括模糊推理计算、
BP
网络推导、遗传算
2025年春《神经网络与深度学习》课程总结(二)
紧接上文,本次将介绍神经网络训练时关键的
反向传播算法
,以及为使网络达到更佳性能而有用的优化方法,这些方法更多的是通用方法,能为大部分神经网络性能优化提供参考。
神经网络原理与训练全流程:从反向传播到部署避坑指南
神经网络作为人工智能领域的核心技术,本质上是一个由大量参数构成的函数拟合器,通过多层线性变换与非线性激活实现对复杂数据规律的自动提取。其训练过程依赖前向传播、损失函数计算与
反向传播算法
,配合梯度下降不断优化权重,使模型逐步逼近目标映射。这一技术在处理图像、文本、时序等非结构化数据上展现出传统规则方法无法企及的优势,推动了卷积神经网络、Transformer等架构在视觉识别、自然语言处理等场景中的大规模应用。从边缘设备上的模型量化部署,到算法工程师的日常调参,都离不开对这些核心概念的深入理解。本文围绕神经网络
数据结构与算法
33,026
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章