用于分类的神经网络 - 泛化

时间:2017-07-14 11:42:48

标签: neural-network mnist

我在R中开发了一个神经网络来对一组图像进行分类,即MNIST手写数字数据库中的图像。 我在图像上使用pca,nn有两个隐藏层。 到目前为止,我无法在验证集上获得超过95%的准确率。 如何在验证集上获得100%的准确度?也就是说,我该怎么做才能提高nn的泛化能力?

(我正在使用随机反向传播算法来找到最佳权重)。

我将发布找到权重的函数的代码 DICLAIMER:我对神经网络和R这么全新,所以这只是尝试提出一些东西。

fixedLearningRateStochasticGradientDescent <- function(X_in, Y, w_list, eta, numOfIterations){ 
  x11(); 
  err_data <- NULL
  N <- dim(X_in)[2]
  X_in <- rbind(rep(1, N), X_in) #add bias neurons to input
  iter <- 0
  for(i in 1:numOfIterations){ 
    errGrad <- NULL; 
    iter <- i
    e_in <- 0 
    g_list <- initGradient(w_list) 
    L <- length(w_list) 


    for(i in (1:N)){ 
      #compute x 
      s_list <- list() 
      x_list <- list(X_in[,i, drop = FALSE]) 
      for(l in 1:L){ 
        S <- t(w_list[[l]]) %*% x_list[[l]] 
        s_list[[length(s_list) + 1]] <- S 
        X <- apply(S, 1:2, theta_list[[l]]) 
        X_n <- dim(X)[2]
        if(l < L){ 
          X <- rbind(rep(1, X_n), X) #add bias neurons to input  

        }
        x_list[[length(x_list) + 1]] <- X
      } 

      #compute d 
      d_list <- list() 
      for(l in (1:L)){ 
        d_list[[l]] <- NULL 
      } 
      target <- t(Y[i,,drop = FALSE]) 
      d_list[[L]] <- 2 * (x_list[[L + 1]] - target) * theta_der_list[[L]](x_list[[L + 1]])
      for(l in (L - 1):1){ 
        T <- theta_der_list[[l]](x_list[[l + 1]]) 
        Q <- w_list[[l + 1]] %*% d_list[[l + 1]] 
        D <- T * Q 
        D <- D[-1, , drop=FALSE] #remove bias
        d_list[[l]] <- D 
      } 

      e_in <- e_in + (1/N * sum((x_list[[L + 1]] - target)^2)) 

      for(l in 1:L){ 
        G <- x_list[[l]] %*% t(d_list[[l]]) 
        #print(G) 
        g_list[[l]] <- G
      } 

      for(i in 1:(length(w_list))){ 
        w_list[[i]] <- w_list[[i]] - eta * g_list[[i]] 
      }
    } 

    err <- e_in 
    g_list <- errGrad[[2]] 
    err_data <- c(err_data, err)
    print(paste0(iter, ": ", err)) 
  } 
  plot(err_data, type="o", col="red")
  print(err)
  return(w_list)
} 

其余的代码是微不足道的:
- 在输入上执行pca - 初始化重量
- 找到重量
- 计算测试和验证集的性能。

0 个答案:

没有答案