分享

R语言13行代码实现神经网络

 战神之家 2018-04-26

参考自11行python
以及吴恩达老师的机器学习
http://blog.csdn.net/sadfasdgaaaasdfa/article/details/47185199

还是有些地方有些疑惑。例如误差反向传递回去的推倒还不太明白。

x <- data.frame(c(0,0,1),c(0,1,1),c(1,0,1),c(1,1,1))
y <- c(0,1,1,0)
x <- as.matrix(t(x))
syn0 <- matrix(rnorm(3 * col ),ncol=3,nrow=3)
syn1 <- matrix(rnorm(3 * 1 ),ncol=3,nrow=1)
for (i in 1:10000){
  l1 <- 1/(1+exp(-(x %*% t(syn0) )))
  l2 <- 1/(1+exp(-(l1)  %*% t(syn1) ))
  errorOutput <- l2 - y
  errorHidder <- errorOutput %*% syn1 * l1  * (1-l1 )
  syn1 <- syn1 -  t(0.01 * t(l1) %*% errorOutput )
  syn0 <- syn0 - t(0.01 * t(x) %*% errorHidder) 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

运行结果

#


nnetOneLayer <- function(x,y,numberofUnits = 3,alpha = 0.01,iter=10000){
  x <- as.matrix(t(x))
  # x的特征数量
  col <- ncol(x)
  #0-1的权重初始化 nrow 表示特征数
  syn0 <- matrix(rnorm(numberofUnits * col ),ncol=col,nrow=numberofUnits)
  #1-2的权重初始化
  syn1 <- matrix(rnorm(numberofUnits * 1 ),ncol=(numberofUnits),nrow=1)
  cost <- c(NA)
  length(cost) <- iter
  for (i in 1:iter){
    #输入层到隐层的值
    l1 <- 1/(1+exp(-(x %*% t(syn0) )))
    #隐层到输出层的值
    l2 <- 1/(1+exp(-(l1)  %*% t(syn1) ))
    #输出层误差
    errorOutput <- l2 - y
    #隐层误差
    errorHidder <- errorOutput %*% syn1 * l1  * (1-l1 )

    #
    syn1 <- syn1 -  t(alpha * t(l1) %*% errorOutput )
    syn0 <- syn0 - t(alpha * t(x) %*% errorHidder) 


    cost[i] <- errorOutput
  }

  plot(cost)
  cbind(y,l2)

}

x <- data.frame(c(0,0,1),c(0,1,1),c(1,0,1),c(1,1,1))
y <- c(0,1,1,0)
nnetOneLayer(x,y)
l2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

真实结果与预测结果

 0 0.01942965
 1 0.95005097
 1 0.96147338
 0 0.06028846
  • 1
  • 2
  • 3
  • 4

cost函数随着迭代的变化

这里写图片描述

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多