参考自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) }
#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
0 0.01942965 1 0.95005097 1 0.96147338 0 0.06028846
联系客服