QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18835|回复: 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()& c6 U% n1 ?9 K" l: R0 W, {
    BP_one_output<-function(input,output,m,fth,sth,w,v){9 ]4 ]* r$ E6 O( Z% k/ ~
            x<-input;#7*8
    0 P3 u1 G" A+ \9 g4 O5 h! h        y<-output;#8*1,y为向量,每一元素为一个样本输出值
    ; \4 `+ v: L- S7 o        theta<-fth;#11*1
    # G% q* }1 F0 y8 S        gama<-sth;#标量/ Q( O/ S8 C, K% ?1 I
            if(m!=length(theta)) print("阈值长度错误!")* t2 w4 a1 S7 k8 ~
            x<-rbind(x,t(rep(-1,ncol(x))));#8*8导致x的最后一列为阈值theta的权重4 J4 o( S5 L6 R. y
            K<-nrow(x);#8一组样本的维数
    & k& v( f" W6 R/ \! e; I) h( D& y        J<-ncol(x);#8一共有多少组样本  o; _8 z5 b% m, T5 [  j1 r
            w<-rbind(w,t(theta));#由7*11变为8*11
    + R7 s- i6 O" Y) o, u        v<-c(v,gama);#由11变为12,但请记住:在隐含层增加一个值为-1的节点,但与输入层并未连接3 n0 b" w9 B7 c, K
    #定义函数f5 i3 e5 u% w9 k  `
            f<-function(h) 1/(1+exp(-h));* m5 y# R! M+ v% ~( `3 G
            epsilon<-alpha<-0.5;
    * H$ h) g- ~9 b% T1 K        N<-0;#重复学习次数的计数/ i7 o  b' T) K' D/ M
            ei<-as.numeric();#记录每次迭代的平均残差平方和- ~) @9 L8 P9 p! {$ P* D; D
            FW<-1;
    ! a  ]7 @$ C8 X2 H) i        while((FW/J)>=0.001){
    . I+ I# Q: i3 J8 }" f. f                Z1<-t(w)%*%x;#11*8矩阵,每一列为一组样本% A$ V; @% p* E5 k4 q* ~
                    Y1<-apply(Z1,c(1,2),f);#11*8矩阵,每一列为一组样本在隐含层的值, a matrix 1 indicates rows, 8 v! S7 w. V2 B# z+ A, s; O" X4 I
                                                                                            #2 indicates columns, c(1, 2) indicates rows and columns8 ]7 Y8 G6 `4 x! A  C
                    Z2<-t(v)%*%rbind(Y1,t(rep(-1,ncol(Y1))));#8*1向量,每个元素为隐含层对输出层的加权值
    ) {* E" g: _3 e0 o: y                D<-f(Z2);#向量,每一元素为一组样本的一个输出值
    6 W- K. S0 k; E" a: u$ [$ c" v$ o: s                b<-y-D;' f* d% A' r7 A$ C
                    #J组样本的学习8 i: x: G) f3 V5 e2 r: U& W
                    #向量,输出层对隐含层的权值的偏导
    5 c8 X& \& A7 K( t, Y# n                FW<-pFW2<-pFW2t_1<-0;
    $ c. v* A7 T$ J5 |. q8 v                pFW1t_1<-matrix(0,nrow(w),ncol(w));#矩阵,隐含层对输入层权值的偏导6 h; D* a# n3 {2 T
                    for(t in 1:J){
    9 W8 \" _5 [$ a6 n+ G, |                        B3<-b[t];
    ; o1 b# L+ l; H                        FW<-FW+B3*B3;#标量
    ! v: ]5 C* F, \0 Q! F# l5 H                        B2<-f(Z2[t])*(1-f(Z2[t]))*B3;#标量% u) h" p" O% s9 w
                            pFW2<--2*c(Y1[,t],-1)*B2;#12*1向量隐含层对输出层的权重偏导,此时多了一个阈值项- M) L3 b  K  Z6 @7 E
                            if(t==1) v<-v-0.5*epsilon*pFW27 y2 x" W8 p3 M! S
                            else{8 Z' D8 W: w( W& ~; Y
                                    v<-v-0.5*epsilon*pFW2+alpha*(-0.5*epsilon*pFW2t_1);8 p9 W8 {8 a9 M
                                    pFW2t_1<-pFW2;* x* E) Z2 g% Q' E
                            }
    # J. x' j: V$ _7 X( d2 @6 O                        B1<-diag(f(Z1[,t])*(1-f(Z1[,t])))%*%v[1length(v)-1)]*B2;#11*1隐含层多出来的一个节点即阈值节点并未与输入层相连
    9 f9 {) b4 ]# J& A1 K/ T- o3 A                        pFW1<--2*x[,t]%*%t(B1)#8*11输入层对隐含层的权重偏导
    # i3 u8 m5 A  O- a6 @1 S1 D                        if(t==1) w<-w-0.5*epsilon*pFW1
    + I, D* N) X8 N/ U# F: m2 e                        else{/ u8 {" Q0 V* J8 n0 I! T
                                    w<-w-0.5*epsilon*pFW1+alpha*(-0.5*epsilon*pFW1t_1);# r2 g& G5 t8 n( e6 h6 j+ E0 }  u
                                    pFW1t_1<-pFW1;: U) [0 ?' y3 ]: t
                            }
    * T" c% m1 y" Y# Z: h1 f                }" I8 K, K. E( P
                    N<-N+1;; ?1 u* K/ a6 {, I- S. o
                    ei[N]<-FW/J;
    $ L- {7 @+ N; B, {3 b4 B        }3 z4 n9 F4 W! X2 {/ b6 t( m
            theta<-w[nrow(w),];#隐含层阈值% L7 A. h" t( f; i. g+ u* }  T( v2 s" ]
            gama<-v[length(v)];#输出层阈值! ^8 O+ {3 o- c0 ~; |
            w<-w[1nrow(w)-1),];#输入层对隐含层的权重/ B# q  ^" T8 d- z
            v<-v[1length(v)-1)];#隐含层对输出层的权重1 B1 s) a# I  }4 P6 e9 c2 E
            list(theta,gama,w,v,N,FW/J,ei)
    + m! O% F. x( I7 M. q! ]2 Z  A}
    8 B; s, i1 N9 i( \- R3 J! jx<-cbind(x1,x2,x3,x4,x5,x6,x7);
      W0 b- ?3 K, U: h6 Xx<-t(x);
    4 P2 K0 e' E( x" }9 |# u& Bhidden_threshold<-runif(11);
    , q$ F: H' F7 X9 O! b. P; a: \) Y+ Toutput_threshold<-runif(1);- B3 Z( ^9 B: k- g/ @: i
    w<-matrix(runif(77),7,11);' B/ C/ z6 e+ u1 l
    v<-runif(11);/ V* b0 J! w3 m
    result<-BP_one_output(x,y,11,hidden_threshold,output_threshold,w,v);
    2 `" k7 a% _4 p  j7 v* c#输出
    $ k4 g8 Q4 v5 Q: L! R% A# wcat("\n");
    % C) y1 z) ~- G+ g. c* A/ A- g( \cat("隐含层阈值theta","\n",result[[1]],"\n");+ t1 A0 p3 [) q7 L
    cat("输出层阈值gama","\n",result[[2]],"\n");$ O- [5 w2 R7 u3 u& `: }
    w<-as.matrix(result[[3]],7,11);
    ' X0 C% G: [" i% a- T* y3 }cat("输入层对隐含层的权重w","\n");* t5 z9 j, v& @, z
    w;
    ' X* Y2 H$ ^$ K' `% mcat("\n");
    5 w0 }" M) d5 H: E# `% I7 G* ncat("隐含层对输出层的权重v","\n",result[[4]],"\n");- t6 I7 y7 l& S  a' T4 `
    cat("迭代次数N" ,"\n",result[[5]],"\n");# o! l5 X6 Q5 f# W
    cat("学习误差FW","\n",result[[6]],"\n");
    8 B, I. f6 A% x5 l0 jcat("每次迭代的误差","\n");1 ?' _+ c+ s) _; w3 @  l
    plot(result[[7]],type="l",ylab="每次学习误差",xlab="反复学习的次数");! N2 h8 ~% r. m6 }
    proc.time()-ti
    ' \+ i8 `& R( U+ o% o3 H3 Q, w5 v
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    2

    主题

    9

    听众

    52

    积分

    升级  49.47%

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

    [LV.3]偶尔看看II

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

    社区QQ达人

    回复

    使用道具 举报

    凌chers        

    0

    主题

    4

    听众

    34

    积分

    升级  30.53%

  • TA的每日心情

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

    [LV.3]偶尔看看II

    群组学术交流A

    回复

    使用道具 举报

    黄窗帘        

    0

    主题

    4

    听众

    28

    积分

    升级  24.21%

    该用户从未签到

    回复

    使用道具 举报

    Esmtih        

    0

    主题

    4

    听众

    9

    积分

    升级  4.21%

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

    [LV.1]初来乍到

    回复

    使用道具 举报

    0

    主题

    4

    听众

    50

    积分

    升级  47.37%

    该用户从未签到

    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-7-10 23:10 , Processed in 0.516151 second(s), 80 queries .

    回顶部