QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18456|回复: 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()
    + ~6 i" _' j/ Y8 B+ V4 [BP_one_output<-function(input,output,m,fth,sth,w,v){# K, M) o4 N( [" p; `1 U4 S
            x<-input;#7*8
    : h( W; b; M% \% I. Y3 q  f        y<-output;#8*1,y为向量,每一元素为一个样本输出值
    2 g3 F. x$ N* z1 g4 }% w$ _5 e( Y        theta<-fth;#11*19 I& I6 _3 i2 k* e
            gama<-sth;#标量( S  p- @7 O6 C$ u5 k8 a3 W
            if(m!=length(theta)) print("阈值长度错误!")5 u# N$ X# C3 F. }, e
            x<-rbind(x,t(rep(-1,ncol(x))));#8*8导致x的最后一列为阈值theta的权重
      c. J# `6 I& j1 z, H        K<-nrow(x);#8一组样本的维数8 V+ C* c/ P5 c
            J<-ncol(x);#8一共有多少组样本6 B. b! s/ G' \" ~1 V) }& Q- C. T% E
            w<-rbind(w,t(theta));#由7*11变为8*11
    & V9 v" ]; S: i+ T        v<-c(v,gama);#由11变为12,但请记住:在隐含层增加一个值为-1的节点,但与输入层并未连接
      d5 J) \$ J% d" l5 m' r#定义函数f- F# T/ m$ i# M( Z8 T
            f<-function(h) 1/(1+exp(-h));
    . {" E* ]; q) e/ b2 \5 [- K4 }2 G5 S# q        epsilon<-alpha<-0.5;+ B& ^: b. X( j5 Z4 U
            N<-0;#重复学习次数的计数
    % s4 Y/ d9 |* o5 u4 u* P1 ~) Z        ei<-as.numeric();#记录每次迭代的平均残差平方和% j8 N6 Z2 P: Y. Q: N( \
            FW<-1;
    9 B9 g3 U2 m/ v8 P2 Q        while((FW/J)>=0.001){
    % O- ^( R4 o7 _9 E/ b                Z1<-t(w)%*%x;#11*8矩阵,每一列为一组样本% i2 o7 L: t, s/ t  K2 w
                    Y1<-apply(Z1,c(1,2),f);#11*8矩阵,每一列为一组样本在隐含层的值, a matrix 1 indicates rows,
    2 I5 o) z5 `( T! a% S) k                                                                                        #2 indicates columns, c(1, 2) indicates rows and columns( Q; ]0 ?2 [% x( {; S
                    Z2<-t(v)%*%rbind(Y1,t(rep(-1,ncol(Y1))));#8*1向量,每个元素为隐含层对输出层的加权值. Y$ W# l9 U3 l0 P/ o, a! c
                    D<-f(Z2);#向量,每一元素为一组样本的一个输出值( L: ^6 G) r* I! z" `
                    b<-y-D;6 b& ?. Z( h% H5 W  l" C' ]) V
                    #J组样本的学习
    " F& O0 l. i- z2 i8 R. R                #向量,输出层对隐含层的权值的偏导
    6 h* ]9 a5 ]! S, j                FW<-pFW2<-pFW2t_1<-0;8 A3 C2 n) N* _
                    pFW1t_1<-matrix(0,nrow(w),ncol(w));#矩阵,隐含层对输入层权值的偏导1 K1 _- b" r* L: M. G" t6 n
                    for(t in 1:J){
    2 o7 V. F0 E7 d- Y" u( k" d                        B3<-b[t];4 s" D/ p1 C( y' q
                            FW<-FW+B3*B3;#标量
    0 N/ y" k9 n2 i1 f. u- @+ E                        B2<-f(Z2[t])*(1-f(Z2[t]))*B3;#标量
    + s8 o& h* W) {; D2 H                        pFW2<--2*c(Y1[,t],-1)*B2;#12*1向量隐含层对输出层的权重偏导,此时多了一个阈值项9 V! K/ r: k/ K/ k
                            if(t==1) v<-v-0.5*epsilon*pFW2
    0 q* K2 {" D# l8 q3 D- h3 V                        else{
    & F1 D3 s6 H2 u7 w* c1 {* Y3 n0 @                                v<-v-0.5*epsilon*pFW2+alpha*(-0.5*epsilon*pFW2t_1);
    4 V$ E( E0 N6 ]8 Y+ z! `! P: @                                pFW2t_1<-pFW2;: i4 U# b: n+ C7 A9 ^
                            }
    5 W/ X  ?: H5 c7 u                        B1<-diag(f(Z1[,t])*(1-f(Z1[,t])))%*%v[1length(v)-1)]*B2;#11*1隐含层多出来的一个节点即阈值节点并未与输入层相连2 V" l6 E1 y9 p. s1 g
                            pFW1<--2*x[,t]%*%t(B1)#8*11输入层对隐含层的权重偏导3 \- \/ f/ c/ p; p5 y3 _
                            if(t==1) w<-w-0.5*epsilon*pFW1& M7 Y( }/ S" e/ r# D6 d
                            else{
    2 |7 O' B! }' G* u5 M. ]+ M% I                                w<-w-0.5*epsilon*pFW1+alpha*(-0.5*epsilon*pFW1t_1);
    4 S; d' k" k2 e' t: o& r                                pFW1t_1<-pFW1;
    7 @2 l; p+ W5 e- T  \; W* d& d                        }7 l  Z) Z" }" W
                    }
    " K6 b  Y! }  s& D$ e% I                N<-N+1;" u# l, e( e  y+ |
                    ei[N]<-FW/J;* {* U2 ~+ O5 O$ d) d  [
            }
    % u% j2 ]5 l; U3 d        theta<-w[nrow(w),];#隐含层阈值
    2 L0 B* w; O8 a4 L1 q        gama<-v[length(v)];#输出层阈值
    2 \) Q& i2 i9 n        w<-w[1nrow(w)-1),];#输入层对隐含层的权重. L# r+ O# Q) ]5 e8 R% ?  |
            v<-v[1length(v)-1)];#隐含层对输出层的权重
    & T7 K" H: X) \+ x( R        list(theta,gama,w,v,N,FW/J,ei)& q8 }/ c' l6 B3 Y1 \
    }: Y0 d4 n$ U% j+ c* C/ M' H
    x<-cbind(x1,x2,x3,x4,x5,x6,x7);
    1 E7 ?2 q& W5 ~# [- q% t  Yx<-t(x);3 A. b4 p, H! k9 m' @/ [& w
    hidden_threshold<-runif(11);
      H, i( T6 {2 W+ C/ f8 |" Foutput_threshold<-runif(1);/ `+ e  C7 ?  ]* }3 x9 U0 q& H1 |
    w<-matrix(runif(77),7,11);
      N- J4 p4 O* L  rv<-runif(11);
    $ E) w' j, A7 p3 A' _result<-BP_one_output(x,y,11,hidden_threshold,output_threshold,w,v);: Y5 Q; r% p) N6 n% A
    #输出
    / b0 _5 p: h: E$ V; F9 e# Wcat("\n");
      l$ @6 |) \$ W( w: icat("隐含层阈值theta","\n",result[[1]],"\n");, H  ?6 ]/ P( S' J! T: K3 Z! l& m
    cat("输出层阈值gama","\n",result[[2]],"\n");
    " f+ T" k. S$ E: c- W" F9 Z$ Rw<-as.matrix(result[[3]],7,11);
    ; \/ @% }, {; K7 _cat("输入层对隐含层的权重w","\n");
    ! r' y6 r  {- X* j. r! n0 nw;
    # ?9 ?$ g! u% y7 }" _) R& Zcat("\n");
    # a! h0 `0 w; I' p: p2 u5 f! |cat("隐含层对输出层的权重v","\n",result[[4]],"\n");. a! u, j9 Z4 t
    cat("迭代次数N" ,"\n",result[[5]],"\n");) _/ |: o* M% N! E# E% F
    cat("学习误差FW","\n",result[[6]],"\n");
    6 Z+ _: t4 ?/ r8 Kcat("每次迭代的误差","\n");
    8 d% n1 _3 Y3 e1 `- T8 J# {plot(result[[7]],type="l",ylab="每次学习误差",xlab="反复学习的次数");. i4 _: z5 T# h0 [. L
    proc.time()-ti
      t* h+ W8 V6 T/ l) l# B
    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, 2025-7-28 11:44 , Processed in 0.631678 second(s), 80 queries .

    回顶部