BP神经网络算法(2)
// BpNet.h:interfacefortheBpclass. // // E-Mail:zengzhijun369@163.com /**/ ///////////////////////////////////////////////////////////////////// / #include stdafx.h #include BpNet.h #include math.h #ifdef_DEBUG #undef THIS_FILE static char
//BpNet.h: interface for the Bp class.
//
//E-Mail:zengzhijun369@163.com
/**///////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BpNet.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
/**///////////////////////////////////////////////////////////////////////
// Construction/Destruction
/**///////////////////////////////////////////////////////////////////////
BpNet::BpNet()
{
error=1.0;
e=0.0;
rate_w=0.05; //权值学习率(输入层--隐含层)
rate_w1=0.047; //权值学习率 (隐含层--输出层)
rate_b1=0.05; //隐含层阀值学习率
rate_b2=0.047; //输出层阀值学习率
error=1.0;
e=0.0;
rate_w=0.05; //权值学习率(输入层--隐含层)
rate_w1=0.047; //权值学习率 (隐含层--输出层)
rate_b1=0.05; //隐含层阀值学习率
rate_b2=0.047; //输出层阀值学习率
}
BpNet::~BpNet()
{
}
void winit(double w[],int sl)//权值初始化
{int i;
double randx();
for(i=0;isl;i++)
{
*(w+i)=0.2*randx();
}
}
double randx()//kqy error
{double d;
d=(double) rand()/32767.0;
return d;
}
void BpNet::init()
{
winit((double*)w,innode*hidenode);
winit((double*)w1,hidenode*outnode);
winit(b1,hidenode);
winit(b2,outnode);
}
void BpNet::train(double p[trainsample][innode],double t[trainsample][outnode])
{
double pp[hidenode];//隐含结点的校正误差
double qq[outnode];//希望输出值与实际输出值的偏差
double yd[outnode];//希望输出值
double x[innode]; //输入向量
double x1[hidenode];//隐含结点状态值
double x2[outnode];//输出结点状态值
double o1[hidenode];//隐含层激活值
double o2[hidenode];//输出层激活值
for(int isamp=0;isamptrainsample;isamp++)//循环训练一次样品
{
for(int i=0;iinnode;i++)
x[i]=p[isamp][i];
for(i=0;ioutnode;i++)
yd[i]=t[isamp][i];
//构造每个样品的输入和输出标准
for(int j=0;jhidenode;j++)
{
o1[j]=0.0;
for(i=0;iinnode;i++)
o1[j]=o1[j]+w[i][j]*x[i];//隐含层各单元输入激活值
x1[j]=1.0/(1+exp(-o1[j]-b1[j]));//隐含层各单元的输出kqy1
// if(o1[j]+b1[j]>0) x1[j]=1;
//else x1[j]=0;
}
for(int k=0;koutnode;k++)
{
o2[k]=0.0;
for(j=0;jhidenode;j++)
o2[k]=o2[k]+w1[j][k]*x1[j];//输出层各单元输入激活值
x2[k]=1.0/(1.0+exp(-o2[k]-b2[k]));//输出层各单元输出
// if(o2[k]+b2[k]>0) x2[k]=1;
// else x2[k]=0;
}
for(k=0;koutnode;k++)
{
e=0.0;
qq[k]=(yd[k]-x2[k])*x2[k]*(1.-x2[k]);//希望输出与实际输出的偏差
e+=fabs(yd[k]-x2[k])*fabs(yd[k]-x2[k]);//计算均方差
for(j=0;jhidenode;j++)
w1[j][k]=w1[j][k]+rate_w1*qq[k]*x1[j];//下一次的隐含层和输出层之间的新连接权
e=sqrt(e);
error=e;
}
for(j=0;jhidenode;j++)
{
pp[j]=0.0;
for(k=0;koutnode;k++)
pp[j]=pp[j]+qq[k]*w1[j][k];
pp[j]=pp[j]*x1[j]*(1-x1[j]);//隐含层的校正误差
for(i=0;iinnode;i++)
w[i][j]=w[i][j]+rate_w*pp[j]*x[i];//下一次的输入层和隐含层之间的新连接权
}
for(k=0;koutnode;k++)
b2[k]=b2[k]+rate_b2*qq[k];//下一次的隐含层和输出层之间的新阈值
for(j=0;jhidenode;j++)
b1[j]=b1[j]+rate_b1*pp[j];//下一次的输入层和隐含层之间的新阈值
}//end isamp样品循环
}
/**////////////////////////////end train/////////////////////////////
/////////////////////////////////////////////////////////////////
double *BpNet::recognize(double *p)
{
double x[innode]; //输入向量
double x1[hidenode];//隐含结点状态值
double x2[outnode];//输出结点状态值
double o1[hidenode];//隐含层激活值
double o2[hidenode];//输出层激活值
for(int i=0;iinnode;i++)
x[i]=p[i];
for(int j=0;jhidenode;j++)
{
o1[j]=0.0;
for(int i=0;iinnode;i++)
o1[j]=o1[j]+w[i][j]*x[i];//隐含层各单元激活值
x1[j]=1.0/(1.0+exp(-o1[j]-b1[j]));//隐含层各单元输出
//if(o1[j]+b1[j]>0) x1[j]=1;
// else x1[j]=0;
}
for(int k=0;koutnode;k++)
{
o2[k]=0.0;
for(int j=0;jhidenode;j++)
o2[k]=o2[k]+w1[j][k]*x1[j];//输出层各单元激活值
x2[k]=1.0/(1.0+exp(-o2[k]-b2[k]));//输出层各单元输出
//if(o2[k]+b2[k]>0) x2[k]=1;
//else x2[k]=0;
}
for(k=0;koutnode;k++)
{
shuchu[k]=x2[k];
}
return shuchu;
}/**/////////////////////////////end sim///////////////////////////
void BpNet::writetrain()
{//曾志军 for 2006.7
AfxMessageBox("你还没有训练呢,训练后再写吧!请不要乱写,除非你认为这次训练是最好的,否则会覆盖我训练好的权值,那样你又要花时间训练!");
AfxMessageBox("你认为这次训练结果是最好的,就存下来,下次就不要花时间训练了!",MB_YESNO,NULL);
FILE *stream0;
FILE *stream1;
FILE *stream2;
FILE *stream3;

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如今的深度學習方法專注於設計最適合的目標函數,以使模型的預測結果與實際情況最接近。同時,必須設計一個合適的架構,以便為預測取得足夠的資訊。現有方法忽略了一個事實,當輸入資料經過逐層特徵提取和空間變換時,大量資訊將會遺失。本文將深入探討資料透過深度網路傳輸時的重要問題,即資訊瓶頸和可逆函數。基於此提出了可編程梯度資訊(PGI)的概念,以應對深度網路實現多目標所需的各種變化。 PGI可以為目標任務提供完整的輸入訊息,以計算目標函數,從而獲得可靠的梯度資訊以更新網路權重。此外設計了一種新的輕量級網路架

寫在前面&筆者的個人理解目前,在整個自動駕駛系統當中,感知模組扮演了其中至關重要的角色,行駛在道路上的自動駕駛車輛只有通過感知模組獲得到準確的感知結果後,才能讓自動駕駛系統中的下游規控模組做出及時、正確的判斷和行為決策。目前,具備自動駕駛功能的汽車中通常會配備包括環視相機感測器、光達感測器以及毫米波雷達感測器在內的多種數據資訊感測器來收集不同模態的信息,用於實現準確的感知任務。基於純視覺的BEV感知演算法因其較低的硬體成本和易於部署的特點,以及其輸出結果能便捷地應用於各種下游任務,因此受到工業

C++中機器學習演算法面臨的常見挑戰包括記憶體管理、多執行緒、效能最佳化和可維護性。解決方案包括使用智慧指標、現代線程庫、SIMD指令和第三方庫,並遵循程式碼風格指南和使用自動化工具。實作案例展示如何利用Eigen函式庫實現線性迴歸演算法,有效地管理記憶體和使用高效能矩陣操作。

C++sort函數底層採用歸併排序,其複雜度為O(nlogn),並提供不同的排序演算法選擇,包括快速排序、堆排序和穩定排序。

论文地址:https://arxiv.org/abs/2307.09283代码地址:https://github.com/THU-MIG/RepViTRepViT在移动端ViT架构中表现出色,展现出显著的优势。接下来,我们将探讨本研究的贡献所在。文中提到,轻量级ViTs通常比轻量级CNNs在视觉任务上表现得更好,这主要归功于它们的多头自注意力模块(MSHA)可以让模型学习全局表示。然而,轻量级ViTs和轻量级CNNs之间的架构差异尚未得到充分研究。在这项研究中,作者们通过整合轻量级ViTs的有效

人工智慧(AI)與執法領域的融合為犯罪預防和偵查開啟了新的可能性。人工智慧的預測能力被廣泛應用於CrimeGPT(犯罪預測技術)等系統,用於預測犯罪活動。本文探討了人工智慧在犯罪預測領域的潛力、目前的應用情況、所面臨的挑戰以及相關技術可能帶來的道德影響。人工智慧和犯罪預測:基礎知識CrimeGPT利用機器學習演算法來分析大量資料集,識別可以預測犯罪可能發生的地點和時間的模式。這些資料集包括歷史犯罪統計資料、人口統計資料、經濟指標、天氣模式等。透過識別人類分析師可能忽視的趨勢,人工智慧可以為執法機構

簡介在電腦視覺領域,準確地測量影像相似性是一項關鍵任務,具有廣泛的實際應用。從圖像搜尋引擎到人臉辨識系統和基於內容的推薦系統,有效比較和尋找相似圖像的能力非常重要。 Siamese網路與對比損失相結合,為數據驅動方式學習影像相似性提供了強大的框架。在這篇文章中,我們將深入了解Siamese網路的細節,探討對比損失的概念,並探討這兩個組件如何共同運作以創建一個有效的圖像相似性模型。首先,Siamese網路由兩個相同的子網路組成,這兩個子網路共享相同的權重和參數。每個子網路將輸入圖像編碼為特徵向量,這

01前景概要目前,難以在檢測效率和檢測結果之間取得適當的平衡。我們研究了一種用於高解析度光學遙感影像中目標偵測的增強YOLOv5演算法,利用多層特徵金字塔、多重偵測頭策略和混合注意力模組來提高光學遙感影像的目標偵測網路的效果。根據SIMD資料集,新演算法的mAP比YOLOv5好2.2%,比YOLOX好8.48%,在偵測結果和速度之間達到了更好的平衡。 02背景&動機隨著遠感技術的快速發展,高解析度光學遠感影像已被用於描述地球表面的許多物體,包括飛機、汽車、建築物等。目標檢測在遠感影像的解釋中
