# -*- mode: R -*- ##EmacsとESS使いの方に。モードラインの設定。 ##2017年10月27日(金曜日) ##setwd(choose.dir()) ##ニューラルネットの定義 source("snn.txt") ##学習データの設定 source("pat.txt") ##300回の学習結果 source("snnWeight.txt") ##エラーの様子。 plot(sapply(1:2155, activate), type="b") ##失敗例について、 (1:2155)[sapply(1:2155, activate)>0.1] (dimnames(BufInput)[[2]])[231] ##[1] "CTGGTTCTC" (dimnames(BufInput)[[2]])[sapply(1:2155, activate)>0.1] ##入力層のデルタを見てみる。 ##これは、ほぼlearnと同じ calDerivative <- function(iset){ activate(iset); Output$delta <<- Output$delta * sapply(Output$out, dsigmoid); Hidden$delta <<- drop(t(HiddenOutput$w) %*% Output$delta) * sapply(Hidden$out, dsigmoid); ## *sapply(Input$out, dsigmoid);が有ったが、dsigmoidを無視。 Input$delta <<- drop(t(InputHidden$w) %*% Hidden$delta); } iset <- 230##エラーの少ないやつ。 activate(iset) Error (dimnames(BufInput)[[2]])[iset] (dimnames(BufTarget)[[2]])[iset] iset <- 231##エラーの多いやつ activate(iset) Error (dimnames(BufInput)[[2]])[iset] (dimnames(BufTarget)[[2]])[iset] ##で、入力がどうだったら、エラーが少なくなる。 ##つまり、「EI配列らしく」なるのだろうか?? calDerivative(iset) Output$delta Hidden$delta matplot(cbind(Input$delta*100,Input$out),type="b") abline(v=0:9*4+0.5) ##231番目を書き換える。その前に、保存。 tmpBufInput <- BufInput[,iset] lines(sapply(Input$delta*10000, sigmoid),type="b",col=3) ##極端に、緑の様にしちゃる BufInput[,iset] <- sapply(Input$delta*10000, sigmoid) activate(iset) Error ##やりすぎ??3つの塩基が置換している。 plot(sapply(Input$delta*10000, sigmoid),type="b",col=3) lines(tmpBufInput,type="b",col=1) abline(v=0:9*4+0.5) text(1:9*4-1.5,0.9,1:9,col=2) ##SNPで何とかなるの?? ##1~9塩基のうちの1つだけ換えてみる。 mat <- matrix(0,nrow=4,ncol=4) diag(mat) <- 1 ##対角成分だけに1を mat tmp <- tmpBufInput tmp[1:4] <- as.vector(mat[,1]) tmpBufInput tmp ichange <- 1 ErrorS <- c() for(ibase in 1:9){ for(ichange in 1:4){ tmp <- tmpBufInput tmp[1:4+(ibase-1)*4] <- as.vector(mat[,ichange]) BufInput[,iset] <- tmp activate(iset) ErrorS <- c(ErrorS,Error) } } plot(ErrorS,type="b") abline(v=0:9*4+0.5) text(1:9*4-1.5,0.2,1:9,col=2) ##めっけ。6塩基目をAにすれば、良い。 (dimnames(BufInput)[[2]])[iset] ##元々は、"CTGGTTCTC" だった。