QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18788|回复: 5
打印 上一主题 下一主题

神经网络在R语言 实现

[复制链接]
字体大小: 正常 放大
haviet        

2

主题

4

听众

60

积分

升级  57.89%

  • TA的每日心情
    开心
    2014-6-23 23:18
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    跳转到指定楼层
    1#
    发表于 2011-9-13 20:25 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    ti<-proc.time()% t2 q* l( D1 L
    BP_one_output<-function(input,output,m,fth,sth,w,v){
    ) e7 z# q: w1 h( u& U+ @& _$ l7 E( }        x<-input;#7*8$ C8 G) X+ S# S2 z
            y<-output;#8*1,y为向量,每一元素为一个样本输出值
    # m6 s3 S( l; |        theta<-fth;#11*1
      p% F" L# a0 x, K) O5 h5 E        gama<-sth;#标量( L: C5 p. v" ^/ W
            if(m!=length(theta)) print("阈值长度错误!")
    1 n9 A: d  S! ~& L9 O1 r; a        x<-rbind(x,t(rep(-1,ncol(x))));#8*8导致x的最后一列为阈值theta的权重# o- B* A, B8 S& ?) X
            K<-nrow(x);#8一组样本的维数4 r8 z$ J1 O6 I# N4 x& ^
            J<-ncol(x);#8一共有多少组样本
    9 [0 b, s: z8 u, q        w<-rbind(w,t(theta));#由7*11变为8*116 g6 I- v* ?  A  e6 r7 B/ }+ _% o/ e( {
            v<-c(v,gama);#由11变为12,但请记住:在隐含层增加一个值为-1的节点,但与输入层并未连接
    ) b0 `* _4 o4 u) s; E#定义函数f# j, E" M0 b" w2 Z' H2 a
            f<-function(h) 1/(1+exp(-h));
    " w( H( i* [) r% D        epsilon<-alpha<-0.5;
    2 M" _7 z$ r+ C        N<-0;#重复学习次数的计数
    $ i$ M6 \' d+ ]: J        ei<-as.numeric();#记录每次迭代的平均残差平方和
    " K$ l' X: f' {8 [        FW<-1;
    " a% a1 l  p; L. V5 Z        while((FW/J)>=0.001){
    ( ]. e2 ]( h. q; S8 ]. r, t                Z1<-t(w)%*%x;#11*8矩阵,每一列为一组样本
    1 T$ [1 q7 d: u0 @                Y1<-apply(Z1,c(1,2),f);#11*8矩阵,每一列为一组样本在隐含层的值, a matrix 1 indicates rows,
    4 D2 P* L5 o: L4 }* f* j                                                                                        #2 indicates columns, c(1, 2) indicates rows and columns2 `8 D7 @2 l1 ]  [' X! N
                    Z2<-t(v)%*%rbind(Y1,t(rep(-1,ncol(Y1))));#8*1向量,每个元素为隐含层对输出层的加权值8 ^9 y" e: i# |$ v. x1 m2 s
                    D<-f(Z2);#向量,每一元素为一组样本的一个输出值( ?3 V7 f7 l" d) b$ m( f* ~
                    b<-y-D;  G2 N# \1 T) \  b1 r% }1 ]
                    #J组样本的学习
    7 D2 ^6 ~- E+ h$ s                #向量,输出层对隐含层的权值的偏导; g/ o( K8 a& U& `% Y/ l* T
                    FW<-pFW2<-pFW2t_1<-0;
    3 ~1 L) v$ b( q                pFW1t_1<-matrix(0,nrow(w),ncol(w));#矩阵,隐含层对输入层权值的偏导( b6 k% V) X) x: M7 f
                    for(t in 1:J){
    % H# C; R* f+ g, ]7 u: G9 _                        B3<-b[t];
    $ u2 @4 W7 `  z  w+ T; S                        FW<-FW+B3*B3;#标量
    - \/ z  h) E$ w6 A                        B2<-f(Z2[t])*(1-f(Z2[t]))*B3;#标量# m# _. O% B8 L/ ^6 P& e4 [# U
                            pFW2<--2*c(Y1[,t],-1)*B2;#12*1向量隐含层对输出层的权重偏导,此时多了一个阈值项: T" j0 ]1 K+ U+ v! c" N( W
                            if(t==1) v<-v-0.5*epsilon*pFW2" t* h# ~# X- ]6 K1 x+ o
                            else{8 Y* @1 `7 i( p
                                    v<-v-0.5*epsilon*pFW2+alpha*(-0.5*epsilon*pFW2t_1);; q5 h+ J! j' h2 {; }! M& `" B
                                    pFW2t_1<-pFW2;
    # b, g) A4 O0 o  Z- s; Z                        }" u) D6 p( x5 z& @& D
                            B1<-diag(f(Z1[,t])*(1-f(Z1[,t])))%*%v[1length(v)-1)]*B2;#11*1隐含层多出来的一个节点即阈值节点并未与输入层相连4 u: T6 L9 S/ F# w  c* h
                            pFW1<--2*x[,t]%*%t(B1)#8*11输入层对隐含层的权重偏导
      J7 \' O: x% p$ v7 K( ^                        if(t==1) w<-w-0.5*epsilon*pFW1
    % n! I' M- P/ L5 t8 T+ F+ N                        else{
    5 E9 I$ \! ^! T6 p0 I1 |0 ^                                w<-w-0.5*epsilon*pFW1+alpha*(-0.5*epsilon*pFW1t_1);6 L" J, f% F; ]. C( N$ d
                                    pFW1t_1<-pFW1;
    ! k, Q' r9 B1 r  I$ ?                        }# r8 \- `' F) n
                    }
    & m) r/ H; |8 D' A) q                N<-N+1;
    ' h. K, p4 s8 [. ^6 z                ei[N]<-FW/J;
    / z* W1 M7 r* ]! ~2 D        }& z2 M0 W5 Y9 C# F& s
            theta<-w[nrow(w),];#隐含层阈值
    : f7 s4 d2 Y( Z; Z        gama<-v[length(v)];#输出层阈值% i% t8 M5 K3 [  l" d
            w<-w[1nrow(w)-1),];#输入层对隐含层的权重
      q: A  |  l1 |1 |! w7 C9 V# I        v<-v[1length(v)-1)];#隐含层对输出层的权重
    2 Z( k- `, M1 F. i) ?7 {( d        list(theta,gama,w,v,N,FW/J,ei)
    6 o9 f4 N9 q( f$ j}& @" I! I, I+ W
    x<-cbind(x1,x2,x3,x4,x5,x6,x7);/ H7 Y' G' X6 z& l% L3 @# }
    x<-t(x);
    # L2 k: K( N# o8 Chidden_threshold<-runif(11);
    1 O: W9 B5 ]# ]; moutput_threshold<-runif(1);. C( k3 R  F) q& z# O$ i4 [
    w<-matrix(runif(77),7,11);3 X+ }6 D+ I. e( f
    v<-runif(11);
    $ A9 A. t% j+ ~8 p. ?: Mresult<-BP_one_output(x,y,11,hidden_threshold,output_threshold,w,v);
    # q* G" a! t1 b, S9 `! U0 _/ k1 t#输出
    9 b) _' ^1 I: }" m% o1 O  ccat("\n");
    : P6 u- i" E: {( g/ K- ~cat("隐含层阈值theta","\n",result[[1]],"\n");+ c0 o) Y- M) Y8 [( U$ f( D$ i; W
    cat("输出层阈值gama","\n",result[[2]],"\n");
    0 p4 X1 U5 {" r9 q- t+ g  ~" gw<-as.matrix(result[[3]],7,11);
    5 @0 [6 b2 l2 y  k3 r+ Acat("输入层对隐含层的权重w","\n");
    6 u- H, X$ X3 Q' M! J6 V$ Bw;! N7 g# e5 B4 l, y8 N
    cat("\n");! S) A1 c3 L7 l
    cat("隐含层对输出层的权重v","\n",result[[4]],"\n");
      p3 P7 R4 G/ @! \- o8 n* xcat("迭代次数N" ,"\n",result[[5]],"\n");
    ! O) s% `7 x' ccat("学习误差FW","\n",result[[6]],"\n");6 D, ?- a4 b# N' n3 X# S0 W3 o
    cat("每次迭代的误差","\n");  t9 g% A  f7 P+ F8 r  d) R
    plot(result[[7]],type="l",ylab="每次学习误差",xlab="反复学习的次数");7 e$ X2 l/ X2 Z! Z# w" {
    proc.time()-ti; Z  z, N- O$ C
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    0

    主题

    4

    听众

    50

    积分

    升级  47.37%

    该用户从未签到

    回复

    使用道具 举报

    Esmtih        

    0

    主题

    4

    听众

    9

    积分

    升级  4.21%

  • TA的每日心情
    难过
    2011-11-8 08:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    回复

    使用道具 举报

    黄窗帘        

    0

    主题

    4

    听众

    28

    积分

    升级  24.21%

    该用户从未签到

    回复

    使用道具 举报

    凌chers        

    0

    主题

    4

    听众

    34

    积分

    升级  30.53%

  • TA的每日心情

    2012-8-30 18:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    群组学术交流A

    回复

    使用道具 举报

    2

    主题

    9

    听众

    52

    积分

    升级  49.47%

  • TA的每日心情
    开心
    2016-6-22 08:37
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    自我介绍
    多次国赛获奖,研究生数学建模获得国家奖

    社区QQ达人

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-5-25 21:59 , Processed in 0.363991 second(s), 80 queries .

    回顶部