私は予測のためのリカレントニューラルネットワークに(RNN)を使用していないが、いくつかの奇妙な理由で、それは常に私のようにおもちゃの例でこれを説明ここでは1を出力しますはなぜRNNは常に出力1
例 次元(360,5)の行列M
と、M
の行数を含むベクトルY
を考えてみましょう。今、RNNを使用して、M
からY
を予測したいと思います。 rnn
R
パッケージを使用して、私はトレーニングはエポック・エラーは常に4501理想的であるということですが、エポック・エラーがエポックの増加に伴って減少するはずで観察奇妙なことの一つ
library(rnn)
M <- matrix(c(1:1800),ncol=5,byrow = TRUE) # Matrix (say features)
Y <- apply(M,1,sum) # Output equls to row sum of M
mt <- array(c(M),dim=c(NROW(M),1,NCOL(M))) # matrix formatting as [samples, timesteps, features]
yt <- array(c(Y),dim=c(NROW(M),1,NCOL(Y))) # formatting
model <- trainr(X=mt,Y=yt,learningrate=0.5,hidden_dim=10,numepochs=1000) # training
としてモデルを訓練しました。
次に、私はのように1上記と同じ構造のテストデータセットを作成しました:私は常に一定のエポック・エラーの原因になることができますどのような1 として出力を取得し、予測して
M2 <- matrix(c(1:15),nrow=3,byrow = TRUE)
mt2 <- array(c(M2),dim=c(NROW(M2),1,NCOL(M2)))
predictr(model,mt2)
と同じ出力ですか? @Barkerによって提供さ
UPDATE#1
回答は私の問題では動作しません。それを開くには、ここでは、ドロップボックスリンクを使って最小限のデータをtraindata、testadata、私のR
というコードで共有します。
データの詳細:列「パワー」を1日目から、私はパラメータlearning rate, hidden_dim, numepochs
を変える14
normalize_data <- function(x){
normalized = (x-min(x))/(max(x)-min(x))
return(normalized)
}
#read test and train data
traindat <- read.csv(file = "train.csv")
testdat <- read.csv(file = "test.csv")
# column "power" is response variable and remaining are predictors
# predictors in traindata
trainX <- traindat[,1:dim(traindat)[2]-1]
# response of train data
trainY <- traindat$power
# arrange data acc. to RNN as [samples,time steps, features]
tx <- array(as.matrix(trainX), dim=c(NROW(trainX), 1, NCOL(trainX)))
tx <- normalize_data(tx) # normalize data in range of [0,1]
ty <- array(trainY, dim=c(NROW(trainY), 1, NCOL(trainY))) # arrange response acc. to predictors
# train model
model <- trainr(X = tx, Y = ty, learningrate = 0.08, hidden_dim = 6, numepochs = 400)
# predictors in test data
testX <- testdat[,1:dim(testdat)[2]-1]
testX <- normalize_data(testX) # normalize data in range of [0,1]
#testY <- testdat$power
# arrange data acc. to RNN as [samples,time steps, features]
tx2 <- array(as.matrix(testX), dim=c(NROW(testX), 1, NCOL(testX))) # predict
pred <- predictr(model,tx2)
pred
日に前の日に消費応答温度、湿度の関数であり、変数、および電源ですが、まだそれを0.9または1のいずれかになります。
最も単純な理由は、学習率が高すぎるか、モデルがデータに適合しないことです。 –
あなたのデータに問題があるとわかりました。まずデータをデバッグするには小さすぎます。線形モデルでさえ、16の列と37の行を持つ訓練データセットが与えられれば苦労するかもしれませんが、ニューラルネットですか?気にしないで。あなたのデータは順番に並んでいないようですが、各行の遅れは前の行と同じになります。 RNNはデータを順番に必要とする。最後に、どうしてラグを機能として使用しているのですか? RNNの全体のポイントは、それが以前のデータを記憶する「記憶」の側面である。とにかく前の値を与えているのであれば、ネットワークは何のためにも複雑になりました。 – Barker
@Barker、私はあなたのポイントを持っています!しかし、私は時系列データモデリングの問題にまだ直面しています。 RNNの入力には、私は同じ質問をhttp://stackoverflow.com/q/42431720/3317829 –