QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18898|回复: 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()
    / `2 Y  \- S& D- Y$ |: Z$ b5 u1 @BP_one_output<-function(input,output,m,fth,sth,w,v){
    # h% R. p# w3 @$ Z        x<-input;#7*8
    $ J/ b4 W/ J' B( Q        y<-output;#8*1,y为向量,每一元素为一个样本输出值( G1 ]' g# b: e3 n
            theta<-fth;#11*13 T/ E- l0 h. @1 W9 E* u
            gama<-sth;#标量6 M. }7 v; O9 M" A
            if(m!=length(theta)) print("阈值长度错误!")' }3 j8 V- m! b6 {1 |( `4 V
            x<-rbind(x,t(rep(-1,ncol(x))));#8*8导致x的最后一列为阈值theta的权重
    : n* D% m( k9 p" {        K<-nrow(x);#8一组样本的维数  ]1 `: M1 c9 t. |  s. T+ x
            J<-ncol(x);#8一共有多少组样本6 W0 Z+ j7 {' p2 {; I; B
            w<-rbind(w,t(theta));#由7*11变为8*11
    # ^1 q; @. f4 _+ k- Q. O        v<-c(v,gama);#由11变为12,但请记住:在隐含层增加一个值为-1的节点,但与输入层并未连接- g, N7 x7 p( ^3 q' Z
    #定义函数f
    ) W. K& L, X  i+ j8 c        f<-function(h) 1/(1+exp(-h));
    : _. O& e  `* k/ I3 \5 d: ~        epsilon<-alpha<-0.5;7 B- Y: l6 n& f
            N<-0;#重复学习次数的计数
    . m8 N5 k3 |) H9 k        ei<-as.numeric();#记录每次迭代的平均残差平方和
    4 j: P: I, C  }9 j4 t! t        FW<-1;' @0 |8 D! n! U7 B
            while((FW/J)>=0.001){' U  b$ U8 F1 w! F- k& y
                    Z1<-t(w)%*%x;#11*8矩阵,每一列为一组样本5 |) C! T/ W, A# ~7 G4 R
                    Y1<-apply(Z1,c(1,2),f);#11*8矩阵,每一列为一组样本在隐含层的值, a matrix 1 indicates rows, 3 x' N7 {$ I3 y& v$ V6 t
                                                                                            #2 indicates columns, c(1, 2) indicates rows and columns. _' A/ a; ~* Y6 W( P
                    Z2<-t(v)%*%rbind(Y1,t(rep(-1,ncol(Y1))));#8*1向量,每个元素为隐含层对输出层的加权值9 _6 H0 y( }* q  i' ]
                    D<-f(Z2);#向量,每一元素为一组样本的一个输出值/ d- L4 m/ V3 _+ W
                    b<-y-D;- O/ b5 P% ]! |+ {
                    #J组样本的学习
    2 D2 c* @& b* p                #向量,输出层对隐含层的权值的偏导- f1 ^2 l  ^3 t4 E" r+ x! Y9 W
                    FW<-pFW2<-pFW2t_1<-0;! o6 l; E* F3 {
                    pFW1t_1<-matrix(0,nrow(w),ncol(w));#矩阵,隐含层对输入层权值的偏导" M" C3 ^" R- D5 [
                    for(t in 1:J){0 D6 \- D# @6 z! k% W
                            B3<-b[t];2 E, o, |1 f$ J/ |& u
                            FW<-FW+B3*B3;#标量
    & b  [& o& E8 \2 r                        B2<-f(Z2[t])*(1-f(Z2[t]))*B3;#标量4 F( ~! S5 G1 W- ^
                            pFW2<--2*c(Y1[,t],-1)*B2;#12*1向量隐含层对输出层的权重偏导,此时多了一个阈值项: j' H. y( _' v5 }
                            if(t==1) v<-v-0.5*epsilon*pFW2
    - f. F" ^+ o6 b, ~                        else{
    . q  d. p# j4 B7 V                                v<-v-0.5*epsilon*pFW2+alpha*(-0.5*epsilon*pFW2t_1);9 a# x6 _# ]" C, D( a9 C' z
                                    pFW2t_1<-pFW2;
    ; D9 h1 T( o- B# Z8 L                        }
    , _+ ?3 j/ |: m) W3 v$ W                        B1<-diag(f(Z1[,t])*(1-f(Z1[,t])))%*%v[1length(v)-1)]*B2;#11*1隐含层多出来的一个节点即阈值节点并未与输入层相连$ d& G* u, B1 `% O: y
                            pFW1<--2*x[,t]%*%t(B1)#8*11输入层对隐含层的权重偏导
    2 u8 s. n9 o- n; h$ \% w9 g0 L                        if(t==1) w<-w-0.5*epsilon*pFW15 \2 Y5 u8 }+ e- A. ^
                            else{
    . E4 E, H4 x* e; u* G                                w<-w-0.5*epsilon*pFW1+alpha*(-0.5*epsilon*pFW1t_1);& D3 s+ V1 `7 K5 \7 y9 S
                                    pFW1t_1<-pFW1;: z8 v; O0 g( {. ?; F% |6 u
                            }
    . J2 t8 W) N! H) i                }6 Z5 q& x% Z9 F; Z$ n6 N1 c
                    N<-N+1;3 C2 F4 B6 P7 \. h" x$ \
                    ei[N]<-FW/J;. h9 g, C2 q$ Q1 T2 j8 F! Y
            }
    - Y0 R) R4 v0 ?! J( t7 G4 f        theta<-w[nrow(w),];#隐含层阈值4 W& S3 J; w3 w
            gama<-v[length(v)];#输出层阈值/ c& u1 |1 D$ F' r* {/ x, ]* L
            w<-w[1nrow(w)-1),];#输入层对隐含层的权重  N! G3 t6 b% m! e$ p
            v<-v[1length(v)-1)];#隐含层对输出层的权重
    ) [4 A; C2 F, i( B7 K0 ]        list(theta,gama,w,v,N,FW/J,ei)
    + N9 Z$ O, ~- b3 t8 c5 M' Q}2 H8 @. p3 u7 I/ I" L) J1 @' `, i: M
    x<-cbind(x1,x2,x3,x4,x5,x6,x7);$ k  k0 o- t' I  R
    x<-t(x);
      `5 }; x( n' u$ e8 J, ]/ dhidden_threshold<-runif(11);: t3 n2 {& Y; e% S" J0 ?* L
    output_threshold<-runif(1);# X3 @/ z2 k5 a% Z7 Q! O/ y: J/ e
    w<-matrix(runif(77),7,11);; Y# Y- `& V. I6 ?6 `
    v<-runif(11);7 o- h; v6 ^4 Q" S4 q# Z8 A4 v& {
    result<-BP_one_output(x,y,11,hidden_threshold,output_threshold,w,v);
    ; O& B/ O' S  }1 U6 V#输出
    - [/ [* o4 W5 w+ z2 q! ^9 ~8 gcat("\n");
    8 {" t/ u( i4 M7 t/ V7 L* fcat("隐含层阈值theta","\n",result[[1]],"\n");
    ; s* ^. b. l- v, o( ncat("输出层阈值gama","\n",result[[2]],"\n");- F) @9 n/ b' ~0 @
    w<-as.matrix(result[[3]],7,11);
    : y1 V% {6 w* p' ~+ r9 I* y! v  Ucat("输入层对隐含层的权重w","\n");
    6 A$ s' ]; P" U" [w;7 x* J6 i8 A& M! Q. A( R2 {
    cat("\n");6 T+ \: O# k7 i- e8 Y
    cat("隐含层对输出层的权重v","\n",result[[4]],"\n");
    & {2 Z4 s4 [# ^; kcat("迭代次数N" ,"\n",result[[5]],"\n");) z8 H& `% \4 W3 X2 Z
    cat("学习误差FW","\n",result[[6]],"\n");/ S$ x( e9 y& S+ h- V9 {* ^4 G9 Y
    cat("每次迭代的误差","\n");
    ' o! _* s( F6 Y: g+ n( eplot(result[[7]],type="l",ylab="每次学习误差",xlab="反复学习的次数");
    3 V  [' `! a/ Y( x: U8 _proc.time()-ti( D- }% H/ K/ H8 D4 P
    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-9-5 03:23 , Processed in 0.389401 second(s), 79 queries .

    回顶部