QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18874|回复: 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()
    * k. e( a5 U; S4 K% qBP_one_output<-function(input,output,m,fth,sth,w,v){: }3 g( R4 J9 m
            x<-input;#7*8
    % x4 ^8 \: i- Q  N) V        y<-output;#8*1,y为向量,每一元素为一个样本输出值
    / z8 o1 ?7 F8 h2 p7 j+ r: F( y( c        theta<-fth;#11*1& c$ h/ Z  _4 l  p6 `2 m
            gama<-sth;#标量" C* E* s3 n7 T! G3 L. D: {- v$ q
            if(m!=length(theta)) print("阈值长度错误!")
    ; {# e* X0 o2 g* j        x<-rbind(x,t(rep(-1,ncol(x))));#8*8导致x的最后一列为阈值theta的权重/ A. D& X5 t  N3 L
            K<-nrow(x);#8一组样本的维数1 q6 g$ I) Z8 {- Q0 K1 Q
            J<-ncol(x);#8一共有多少组样本
      `6 ~: n7 |* O. K        w<-rbind(w,t(theta));#由7*11变为8*11
    & U" l6 t, P6 K# q        v<-c(v,gama);#由11变为12,但请记住:在隐含层增加一个值为-1的节点,但与输入层并未连接6 \6 Y4 V3 _& a$ L' W5 A
    #定义函数f9 Q: d2 L1 n0 R
            f<-function(h) 1/(1+exp(-h));% g% o9 ]- q8 @+ b5 f, P
            epsilon<-alpha<-0.5;5 }$ ]' a: I0 Z' a' ]- |) N
            N<-0;#重复学习次数的计数
    ; K$ K0 F7 I# @, H        ei<-as.numeric();#记录每次迭代的平均残差平方和
    ' N" c8 B' Q& R* @, L3 h1 O        FW<-1;: h* A" |. E( |* ]- z
            while((FW/J)>=0.001){* v# H1 w( o5 {' ~% w1 N
                    Z1<-t(w)%*%x;#11*8矩阵,每一列为一组样本: w1 `. W+ F2 P# e% y0 w
                    Y1<-apply(Z1,c(1,2),f);#11*8矩阵,每一列为一组样本在隐含层的值, a matrix 1 indicates rows, % G+ c5 x+ e4 w, g3 @# w
                                                                                            #2 indicates columns, c(1, 2) indicates rows and columns
    1 `7 L6 s  U) K                Z2<-t(v)%*%rbind(Y1,t(rep(-1,ncol(Y1))));#8*1向量,每个元素为隐含层对输出层的加权值
    & Y2 I( r- d* \& u, E5 ?                D<-f(Z2);#向量,每一元素为一组样本的一个输出值
    3 L# N) c% q- N5 p# I: R' i. {                b<-y-D;  V% K. ^) o2 M2 A
                    #J组样本的学习1 c6 P' a! @2 M* W1 e
                    #向量,输出层对隐含层的权值的偏导/ c/ w. J; \9 K4 }, s
                    FW<-pFW2<-pFW2t_1<-0;* N4 Z+ }. y) Y& a; o, _# r0 C: Z
                    pFW1t_1<-matrix(0,nrow(w),ncol(w));#矩阵,隐含层对输入层权值的偏导
    % E- @, h: _# C; r3 I                for(t in 1:J){. E; U% y! o) W, j
                            B3<-b[t];- Z$ ]6 p/ V6 I# q
                            FW<-FW+B3*B3;#标量7 X/ F. S6 R' B% _
                            B2<-f(Z2[t])*(1-f(Z2[t]))*B3;#标量- S) y/ Q. j; J
                            pFW2<--2*c(Y1[,t],-1)*B2;#12*1向量隐含层对输出层的权重偏导,此时多了一个阈值项
    5 p% m6 V4 T) I+ P' m                        if(t==1) v<-v-0.5*epsilon*pFW25 h; M& H/ |* v( N4 T
                            else{
    1 S3 r7 @; F3 p: K- [: ^                                v<-v-0.5*epsilon*pFW2+alpha*(-0.5*epsilon*pFW2t_1);; H8 _) t* ~/ Y4 Z
                                    pFW2t_1<-pFW2;
    % o0 n* j) k: j3 H; U* p7 v                        }
    , @" _# h( R4 h* ^; U                        B1<-diag(f(Z1[,t])*(1-f(Z1[,t])))%*%v[1length(v)-1)]*B2;#11*1隐含层多出来的一个节点即阈值节点并未与输入层相连
    ( P1 A' J% C8 j& R                        pFW1<--2*x[,t]%*%t(B1)#8*11输入层对隐含层的权重偏导
    $ p- j4 e$ B0 d2 {* ~6 j% @' Z. s                        if(t==1) w<-w-0.5*epsilon*pFW1$ P" d7 B9 S; o7 v' Z8 `
                            else{
    1 J7 _1 z: m# K0 |( `                                w<-w-0.5*epsilon*pFW1+alpha*(-0.5*epsilon*pFW1t_1);
    4 H. B* M. `: [5 F! c1 H                                pFW1t_1<-pFW1;& |' Z5 P" B2 V4 v
                            }4 }2 v8 O2 f( W  W$ l- [
                    }
    , G' n4 {6 |- O* y; c" j                N<-N+1;
    / z  K% n2 {6 N3 }- R/ @                ei[N]<-FW/J;
    7 T' h( w, M8 ^9 X8 z% ~$ V        }4 j( d( L" l; F! m% G
            theta<-w[nrow(w),];#隐含层阈值- ~! s  A( V, h, @: ]4 V0 o
            gama<-v[length(v)];#输出层阈值
    : O: Z- i+ r/ e7 P1 O+ o4 J. W        w<-w[1nrow(w)-1),];#输入层对隐含层的权重
    7 |# G$ I9 n6 c6 Z' I5 ^3 @        v<-v[1length(v)-1)];#隐含层对输出层的权重
    / E. Y! q: v) f6 S        list(theta,gama,w,v,N,FW/J,ei)
    . h4 k+ s1 g; i; ~. `! k1 W7 B}, A6 f+ R) l8 z9 T
    x<-cbind(x1,x2,x3,x4,x5,x6,x7);
    - [: T0 L- @1 W7 hx<-t(x);( j4 ]0 l- o6 ^! b
    hidden_threshold<-runif(11);
    6 O% S9 t# U4 I; }4 Coutput_threshold<-runif(1);7 d( ~6 Z# Z7 E- u/ M0 q* J$ b
    w<-matrix(runif(77),7,11);
    / V% ~* ^4 k0 Y8 {: D. Uv<-runif(11);
    6 j" Q& }3 z' Y3 |0 Gresult<-BP_one_output(x,y,11,hidden_threshold,output_threshold,w,v);
    ! _( S& t: k% O9 C#输出4 L! |' k# f& Q) y5 v; r, _+ x
    cat("\n");
    1 z" \# m. E6 Icat("隐含层阈值theta","\n",result[[1]],"\n");
    7 F& \; w3 N& O' W6 Acat("输出层阈值gama","\n",result[[2]],"\n");
    2 z5 J  y$ b+ Mw<-as.matrix(result[[3]],7,11);  S3 A; p$ Z5 S. ]
    cat("输入层对隐含层的权重w","\n");& Z! j0 F4 k+ r
    w;- m/ p0 S- u% ~: e& r$ O3 j5 \
    cat("\n");: I; m( u4 U7 ^8 u
    cat("隐含层对输出层的权重v","\n",result[[4]],"\n");* J" e! w. y  u
    cat("迭代次数N" ,"\n",result[[5]],"\n");9 {. b5 A2 @2 N
    cat("学习误差FW","\n",result[[6]],"\n");1 n1 }& p, {4 ?" |; v
    cat("每次迭代的误差","\n");
    # v. @; p* N: A: V  `! K' x" _* lplot(result[[7]],type="l",ylab="每次学习误差",xlab="反复学习的次数");
    ) P# `' I1 y7 X' rproc.time()-ti9 b- w7 y# W% k! E3 {: u
    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-8-24 09:16 , Processed in 0.914562 second(s), 80 queries .

    回顶部