?最近在實現BP神經網路於手寫數字辨識中,其中在計算權值矩陣更新時出錯,還望各位高手相助
train <-read.csv("222.csv",header = F) // 5000個樣本 像素2828
target <-read.csv("111.csv",header = F) // 期望輸出
trainD <- train[,1:3500]
targetD <- target[,1:3500] //訓練集
x <- matrix(trainD,nrow = 784,ncol=3500,byrow = T) #输入值,7843500矩阵
y <- matrix(targetD,nrow=10,ncol = 3500) #输出值,103500矩阵
syn1 <- matrix(rnorm(2744000),nrow = 3500,byrow = T) # 输入层到隐藏层的3500784 权重阵,初始值随机产生
syn2 <- matrix(rnorm(35000),nrow = 3500,byrow = T) # 隐藏层到输出层的350010 权重阵,初始值随机产生
for (i in 1:10000){
a1 <- 1/(1+exp(-(x %% syn1))) #隐藏层经权重和sigmod函数转换后的值,
a2 <- 1/(1+exp(-(a1%*% syn2))) #输出层经权重和sigmod函数转换后的值,
#這邊出現一個Error in x %*% syn1 : requires numeric/complex matrix/vector arguments
我在想是否因為 x和syn1讀近來都是顯示large matrix 無法運算,因為我用比較小的矩陣都可以計算出來。
有望各位大老相助
error_2 <- a2 - y #输出层误差,
error_1 <- error_2 %% t(syn2) a1 (1-a1 ) #隐藏层误差,
syn2 <- syn2 - 0.06 a1 %% error_2 #应用梯度下降法求输出层权重阵,0.06为学习率
syn1 <- syn1 - 0.06 t(x) %*% error_1 #应用梯度下降法求隐藏层权重阵,0.06为学习率
}