社区
数据结构与算法
帖子详情
有没有BP反向传播算法,我紧急需要?
pxwzd123
2003-08-21 12:12:33
如标题.多谢提供!!!!!!!!
...全文
160
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个
2025年春《神经网络与深度学习》课程总结(二)
紧接上文,本次将介绍神经网络训练时关键的
反向传播算法
,以及为使网络达到更佳性能而有用的优化方法,这些方法更多的是通用方法,能为大部分神经网络性能优化提供参考。
14、基于
BP
神经网络的气象无线传感器网络温度误差校正
本文提出了一种基于
BP
神经网络的气象无线传感器网络温度误差校正方法(BATC),旨在解决低成本传感器在实际环境中受太阳辐射等因素影响导致的温度测量不准确问题。通过引入三次样条插值统一不同传感器的数据采样频率,并进行时间平移处理以消除封装材料引起的传感延迟,构建三层
BP
神经网络模型,利用太阳辐射(SR)作为输入,空气温度误差(ATE)作为输出,实现对节点温度的高精度校正。实验结果表明,该方法在最大绝对误差、平均绝对误差和标准差等指标上均优于现有统计方法,显著提升了低成本传感器的观测精度。未来工作将聚焦于模型优
AI期末突击指南:3小时搞定符号主义、连接主义核心考点(含计算题公式)
本文提供AI期末突击指南,帮助学生在3小时内掌握符号主义和连接主义核心考点。通过对比记忆法和公式速记技巧,重点解析归结原理、博弈树α-β剪枝、
BP
网络权值调整等高频计算题型,助力考生快速定位得分点,提升应试效率。
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章