QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18832|回复: 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()( y( F5 w$ u4 J$ e
    BP_one_output<-function(input,output,m,fth,sth,w,v){
    + W& ^7 e% g6 H) Q        x<-input;#7*8* X- i9 j2 w2 j6 X& L/ T
            y<-output;#8*1,y为向量,每一元素为一个样本输出值
    / J/ Q' p  C: p9 L, q) ?; c5 @  {        theta<-fth;#11*1. {* i/ m; z5 s4 r
            gama<-sth;#标量0 L2 l# w  J, M+ X: \* Y# b
            if(m!=length(theta)) print("阈值长度错误!"). |$ P! N0 A0 U8 Y: k4 p& f6 ?
            x<-rbind(x,t(rep(-1,ncol(x))));#8*8导致x的最后一列为阈值theta的权重
    6 Z6 w& c2 A8 s, F        K<-nrow(x);#8一组样本的维数
    5 d( O" b1 p2 {0 ]/ c5 U/ Q& Y        J<-ncol(x);#8一共有多少组样本3 Z  H2 b) C2 w: a, M
            w<-rbind(w,t(theta));#由7*11变为8*119 i! p1 U# ]. ?. Z3 K/ J
            v<-c(v,gama);#由11变为12,但请记住:在隐含层增加一个值为-1的节点,但与输入层并未连接  H6 B5 p1 Q- B9 P; P2 z7 x# B
    #定义函数f# M  L& j. ?0 G% g" f3 T' a6 ]* r
            f<-function(h) 1/(1+exp(-h));8 t' U* {' o* i  h5 O
            epsilon<-alpha<-0.5;
    ; B8 g! B. \) h, m+ g2 [        N<-0;#重复学习次数的计数4 ]6 y( }; a. p# T
            ei<-as.numeric();#记录每次迭代的平均残差平方和
    7 R% l/ ~$ W9 Z        FW<-1;
    0 r; ]8 D2 g  L        while((FW/J)>=0.001){9 R& w; y% E% y: a0 J/ l: s
                    Z1<-t(w)%*%x;#11*8矩阵,每一列为一组样本
    - e, K/ A7 G8 R3 P0 ~4 l" U                Y1<-apply(Z1,c(1,2),f);#11*8矩阵,每一列为一组样本在隐含层的值, a matrix 1 indicates rows,
    " _1 \' C4 E% t9 s  J' z5 u8 T                                                                                        #2 indicates columns, c(1, 2) indicates rows and columns
    ) [0 C) p$ k$ J. V% z6 Q                Z2<-t(v)%*%rbind(Y1,t(rep(-1,ncol(Y1))));#8*1向量,每个元素为隐含层对输出层的加权值
      D, l% z5 D8 k4 x/ V! b6 O3 @                D<-f(Z2);#向量,每一元素为一组样本的一个输出值
    7 _. l; {9 r1 d+ R                b<-y-D;
    * B: B) K0 Q/ O6 V# }' Y. {                #J组样本的学习  b. ^5 z% ^/ w6 l  ?
                    #向量,输出层对隐含层的权值的偏导
    , ]5 c( O: o: T; J                FW<-pFW2<-pFW2t_1<-0;8 S+ C6 I0 y+ s
                    pFW1t_1<-matrix(0,nrow(w),ncol(w));#矩阵,隐含层对输入层权值的偏导+ P- _* M- F  H  F
                    for(t in 1:J){7 B# O' B3 @  y5 M
                            B3<-b[t];/ w, |8 P& P4 n1 T! u8 o
                            FW<-FW+B3*B3;#标量% T. g& T0 m( I, N
                            B2<-f(Z2[t])*(1-f(Z2[t]))*B3;#标量: J; o( [6 d" C
                            pFW2<--2*c(Y1[,t],-1)*B2;#12*1向量隐含层对输出层的权重偏导,此时多了一个阈值项( L# A& I8 E- n' T
                            if(t==1) v<-v-0.5*epsilon*pFW27 r, A8 C! Y$ i
                            else{
    . V4 N+ C* M* N5 ?4 \6 U                                v<-v-0.5*epsilon*pFW2+alpha*(-0.5*epsilon*pFW2t_1);0 p5 n- ^$ u: E, Q7 h9 w* `" J
                                    pFW2t_1<-pFW2;
    0 V% E  k3 i, _3 G% H9 q                        }
    ; t7 D# i  s$ H' u5 D                        B1<-diag(f(Z1[,t])*(1-f(Z1[,t])))%*%v[1length(v)-1)]*B2;#11*1隐含层多出来的一个节点即阈值节点并未与输入层相连! L/ I& b, Z4 j  S: }; R7 l( v
                            pFW1<--2*x[,t]%*%t(B1)#8*11输入层对隐含层的权重偏导( E& l: {7 w8 X& n. f9 b
                            if(t==1) w<-w-0.5*epsilon*pFW1, r8 o* q* B( Z) D4 `
                            else{1 L8 j6 _. O: B9 H  p7 a; \
                                    w<-w-0.5*epsilon*pFW1+alpha*(-0.5*epsilon*pFW1t_1);! X1 ]0 d! z1 B" @
                                    pFW1t_1<-pFW1;
    6 S% s1 L. d& G3 ~7 B- t                        }
    / r7 I3 T3 ?% ?: i8 r                }
    * K) M7 a' }1 |+ U                N<-N+1;3 R. Q; y1 Y! y' W
                    ei[N]<-FW/J;) U, p  P0 t4 g9 R1 C
            }
    4 A) ~8 R! F7 D' _        theta<-w[nrow(w),];#隐含层阈值/ d1 M" x7 p+ E$ X% L
            gama<-v[length(v)];#输出层阈值& L' }5 v0 L* ~9 h/ N+ B: ^
            w<-w[1nrow(w)-1),];#输入层对隐含层的权重8 s6 m0 W+ l* p8 B$ ?- d3 k6 ?
            v<-v[1length(v)-1)];#隐含层对输出层的权重
    1 N7 C- S+ C/ L( S. }        list(theta,gama,w,v,N,FW/J,ei)! X, p$ ~$ e! [' _7 X
    }
    " ^! E- g/ k* a1 c# v4 tx<-cbind(x1,x2,x3,x4,x5,x6,x7);) h6 g2 u4 d, Z. b
    x<-t(x);
    . M9 T6 V! y% c2 v9 n5 Q* }hidden_threshold<-runif(11);
    " r: `6 Y+ [3 M+ w! p1 ?2 ^output_threshold<-runif(1);1 h# C1 F& j, I  {5 j
    w<-matrix(runif(77),7,11);
    % v& r9 p: v6 R/ U' Wv<-runif(11);
    ; y8 y' m  D; S  Y7 L; B" e3 Jresult<-BP_one_output(x,y,11,hidden_threshold,output_threshold,w,v);
      _; R& X  L' _% M5 @#输出2 B$ b7 p, C; E  |5 I# s2 d" T5 g9 l
    cat("\n");
    1 P; ]6 b' p- [9 H- D  [" Hcat("隐含层阈值theta","\n",result[[1]],"\n");  n0 k" s' O  N" u' d# x
    cat("输出层阈值gama","\n",result[[2]],"\n");
      z1 R9 J+ g7 i3 B9 mw<-as.matrix(result[[3]],7,11);
    6 G, b9 R$ d$ m" P5 ]cat("输入层对隐含层的权重w","\n");& n+ E$ c  x1 z7 m! O  g
    w;- O5 k7 t6 h% A# q+ F
    cat("\n");
    + D7 u+ R- ^+ z. Jcat("隐含层对输出层的权重v","\n",result[[4]],"\n");
    7 @1 |% @8 Z, d# d/ w. Wcat("迭代次数N" ,"\n",result[[5]],"\n");$ r6 F% h: c! T: W6 v/ O9 q
    cat("学习误差FW","\n",result[[6]],"\n");
    - @1 m$ w- w* C- {  W8 m+ J! Scat("每次迭代的误差","\n");6 T6 c: T7 p" l6 ~
    plot(result[[7]],type="l",ylab="每次学习误差",xlab="反复学习的次数");7 A4 g% ?% o3 V: L% x5 h5 J2 u) R
    proc.time()-ti
    ; }* |- _+ p4 i0 U7 g, ^$ Q& c
    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 06:29 , Processed in 0.802513 second(s), 81 queries .

    回顶部