QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18474|回复: 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()
    5 e1 c8 M. W! RBP_one_output<-function(input,output,m,fth,sth,w,v){
    0 l2 G" z* j8 R0 A: S3 m2 j0 t        x<-input;#7*8% X3 V* H' B6 v0 n+ g- X- P
            y<-output;#8*1,y为向量,每一元素为一个样本输出值& @6 U1 V( ~6 r& R1 k$ H
            theta<-fth;#11*1
    + S9 `2 j4 r% R) i$ A        gama<-sth;#标量
    & K3 G& a: c# A& }/ |; c2 ~        if(m!=length(theta)) print("阈值长度错误!")
    6 y! O& V2 Y: E( @& j; S        x<-rbind(x,t(rep(-1,ncol(x))));#8*8导致x的最后一列为阈值theta的权重
    / v6 D; M, _3 W$ l% u        K<-nrow(x);#8一组样本的维数6 z2 x2 p. f1 y
            J<-ncol(x);#8一共有多少组样本/ `9 n8 ]: Q1 ~1 \2 r
            w<-rbind(w,t(theta));#由7*11变为8*11
      J" v6 L% _, l2 G: g. h" e0 B        v<-c(v,gama);#由11变为12,但请记住:在隐含层增加一个值为-1的节点,但与输入层并未连接8 o. m; {. Y5 ]% N. R( \
    #定义函数f& u8 Z# l5 X9 o; m/ D
            f<-function(h) 1/(1+exp(-h));
    9 i5 \' {! N0 u        epsilon<-alpha<-0.5;
    . U; b! o. e, r; }8 T1 b        N<-0;#重复学习次数的计数
    3 D6 y, V  Q8 \' [# R6 H        ei<-as.numeric();#记录每次迭代的平均残差平方和' |2 g# A/ n5 s0 \
            FW<-1;
    ) }( q' X6 h1 P" }+ a" z( m' N( x4 z        while((FW/J)>=0.001){
    : s! M7 d, K# b0 @9 i8 J                Z1<-t(w)%*%x;#11*8矩阵,每一列为一组样本
    7 K3 D6 h- O+ V                Y1<-apply(Z1,c(1,2),f);#11*8矩阵,每一列为一组样本在隐含层的值, a matrix 1 indicates rows,
    . L4 j: i: W" d9 I9 d                                                                                        #2 indicates columns, c(1, 2) indicates rows and columns+ S" O9 ~" k7 l+ K$ p- e
                    Z2<-t(v)%*%rbind(Y1,t(rep(-1,ncol(Y1))));#8*1向量,每个元素为隐含层对输出层的加权值
    ' k# R' R# b! i; k. b2 W                D<-f(Z2);#向量,每一元素为一组样本的一个输出值
    ' T7 D  \7 M% _1 k7 T# T/ a! j! }                b<-y-D;) K/ j$ e. b0 i; _. q
                    #J组样本的学习" s# R5 G3 X' q& E9 T- ^9 B, A9 P9 u
                    #向量,输出层对隐含层的权值的偏导
    + y3 g, j3 A7 s: |* y                FW<-pFW2<-pFW2t_1<-0;
    ' |0 `3 v" u$ ~6 {! e+ L# v                pFW1t_1<-matrix(0,nrow(w),ncol(w));#矩阵,隐含层对输入层权值的偏导  t' k) n. @4 H  I4 F& ~: O! n
                    for(t in 1:J){
    ) H1 B; r$ L! p                        B3<-b[t];( H+ Z& m# Q/ F
                            FW<-FW+B3*B3;#标量
    ( L: [, B5 y& d6 Q" M                        B2<-f(Z2[t])*(1-f(Z2[t]))*B3;#标量
    3 Q& e! Y4 y) r0 |, g2 s+ S8 q                        pFW2<--2*c(Y1[,t],-1)*B2;#12*1向量隐含层对输出层的权重偏导,此时多了一个阈值项) V8 I  O6 K/ t- t
                            if(t==1) v<-v-0.5*epsilon*pFW2( L: z' N8 ]( D: y9 r
                            else{
    9 T/ g* v  p/ |& s/ a                                v<-v-0.5*epsilon*pFW2+alpha*(-0.5*epsilon*pFW2t_1);" Z9 T. T) d% Q6 }- O
                                    pFW2t_1<-pFW2;
    3 p" f/ i1 `- g( h                        }
    : H5 i9 R) t7 d0 q                        B1<-diag(f(Z1[,t])*(1-f(Z1[,t])))%*%v[1length(v)-1)]*B2;#11*1隐含层多出来的一个节点即阈值节点并未与输入层相连
    : u  [) @! H' o! v! [                        pFW1<--2*x[,t]%*%t(B1)#8*11输入层对隐含层的权重偏导
    . X5 E, u1 v) p9 u" X                        if(t==1) w<-w-0.5*epsilon*pFW1
    ( n3 d7 P4 |7 f7 w# U# K% r                        else{' y) z. `! w% d1 V
                                    w<-w-0.5*epsilon*pFW1+alpha*(-0.5*epsilon*pFW1t_1);7 k) u6 |# l2 x' R
                                    pFW1t_1<-pFW1;
    , l6 ?8 N6 q9 k9 w                        }3 r# C0 N3 d3 @" D9 q6 e& [4 C5 l) ~
                    }
    / H- [- d2 p* \) _' Q- T                N<-N+1;
    ' O# x$ E4 J8 i4 `: h                ei[N]<-FW/J;( c4 ~8 ~- g- r
            }
    " R* ^; G  M, d  ]$ v' Z+ y3 R. Q        theta<-w[nrow(w),];#隐含层阈值, V# A% n  L4 G) l9 d* h6 V
            gama<-v[length(v)];#输出层阈值
    9 |! B) P( T' q        w<-w[1nrow(w)-1),];#输入层对隐含层的权重; w' T. L+ Z4 o! `- {! l
            v<-v[1length(v)-1)];#隐含层对输出层的权重
    $ l( k- @- R6 w1 n4 L3 ]        list(theta,gama,w,v,N,FW/J,ei)* P. ?3 X) [0 W9 @
    }
    2 Y, n) L8 }  x+ |x<-cbind(x1,x2,x3,x4,x5,x6,x7);
    # i" x: R5 H  S. Gx<-t(x);
    2 Z/ ?& \9 o3 h" r: X5 P$ rhidden_threshold<-runif(11);
    2 o5 t% p6 X' s9 ^output_threshold<-runif(1);; Y, W0 g+ z. h
    w<-matrix(runif(77),7,11);
    - a( M. Q$ W& m/ d  t0 j; uv<-runif(11);
    9 X+ c4 k3 a/ A5 `: N3 U: D4 r  k, w' a2 Fresult<-BP_one_output(x,y,11,hidden_threshold,output_threshold,w,v);  V2 F6 [; [2 s, ^
    #输出3 m) {1 ]/ k, y& K9 I  n% R# H
    cat("\n");  k8 o. m8 S9 H$ _! s
    cat("隐含层阈值theta","\n",result[[1]],"\n");
    * g2 h$ [  y0 R$ O7 n# J3 Jcat("输出层阈值gama","\n",result[[2]],"\n");9 c2 ~/ G: S% e/ B, O% Y& ?
    w<-as.matrix(result[[3]],7,11);
    5 q6 w8 U4 D, k$ W9 ]( }cat("输入层对隐含层的权重w","\n");6 h+ ^' [& ?5 Y& R; k! G
    w;  j3 {5 I+ x. h- |8 e( [- o  m' H
    cat("\n");
    3 o$ `; n7 e/ N5 xcat("隐含层对输出层的权重v","\n",result[[4]],"\n");0 q2 b+ N, ?. ^
    cat("迭代次数N" ,"\n",result[[5]],"\n");9 Z7 m, o: D5 U4 Z1 _
    cat("学习误差FW","\n",result[[6]],"\n");
    7 g( T8 `7 ^# I4 icat("每次迭代的误差","\n");
    * o: h9 O4 o+ Q% M& E. j" v& `plot(result[[7]],type="l",ylab="每次学习误差",xlab="反复学习的次数");& r( n8 c0 @+ P% F7 J
    proc.time()-ti. R$ \3 l+ ]. p6 G" y, M
    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, 2025-8-1 01:59 , Processed in 0.524247 second(s), 79 queries .

    回顶部