2017-09-05 7 views
2

私は以前の記事でこれについて尋ねていますが、答えはありませんでした。私は同じ問題を抱えています - Rのrnnパッケージの関数int2binとbin2intは間違った値を返すようです。問題はbin2intにあるようです。これがバグであることを確認していただければ幸いです。それは返すので(と思う)、その後間違っているint2binRパッケージr2nのbin2int関数がバグを持っているようです

function (integer, length = 8) 
{ 
    t(sapply(integer, i2b, length = length)) 
} 

に包まれて

function (integer, length = 8) 
{ 
    as.numeric(intToBits(integer))[1:length] 
} 

library(rnn) 
X2 <- 1:154 
X21 <- int2bin(X2, length = 15) 

> head(X2) 
[1] 1 2 3 4 5 6 

# X21 (data after int2bin(X2, length = 15)) num [1:154, 1:15] 1 0 1 0 1 1 1... 

>head(X21) 
    [,1][,2][,3][,4][,5][,6][,7][,8][,9][,10][,11][,12][,13][,14][,15] 
[1,] 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
[2,] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
[3,] 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
[4,] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
[5,] 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
[6,] 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 

# so far so good 

>X22 <- bin2int(X21) 

# X22 (data after conversion back to integer) X22 int [1:154] 131072 262144... 

> head(X22) 
[1] 131072 262144 393216 524288 655360 786432 

# should be 1 2 3 4 5 6 
+1

これは、SOに頼まれるよりも、パッケージメンテナーにもっと良いと思われるようです。 –

+0

パッケージの作者は、ここで質問をするように要請しました。 – eafpres

答えて

1

int2binの基本機能は、次のように定義されてi2bですバイナリ数を逆にする。

あなたの例では、それは000000000000001.

として返されるべきとき1あなたは、[1:長さ]を変更することにより、後方intToBits()リストを返すことによって、これを修正することができ、100000000000000として返されるまで、[長さ:1]

function (integer, length = 8) 
{ 
    as.numeric(intToBits(integer))[length:1] 
} 

しかし、bin2intにも問題があります。正しいバイナリ入力を渡すとナンセンスが出力されます。

b2i関数は次のように実装されます

サンプル入力を渡す
function(binary){ 
    packBits(as.raw(c(rep(0, 32 - length(binary)), binary)), "integer") 
} 

、私は、この関数が何をしているか理解していない - 確かに整数にバイナリを変換しません。

@Juliusから2進数から10進数への変換する関数を借りる:

BinToDec <- function(x){ 
    sum(2^(which(rev(unlist(strsplit(as.character(x), "")) == 1))-1)) } 

これはBASE2からの簡単な変換です。各バイナリ桁を分割し、各インデックスから1を引く== 1のインデックスを返します(Rは1ではなく、ゼロであるため)、2を前に返された各インデックスの累乗に加算します。実施例101(バイナリ)= 2^2 + 2^0 =次いで

そして

X22 <- apply(X21,1,BinToDec) 

戻り値(これは、標準的な右から左へのバイナリ表記を以下の修正X21構造を使用して注意してください)5 1:154

つまり、はい、私はrnn:bin2intrnn::int2binが間違っている/壊れているようです。また

、むしろrnn::int2bin機能を修正しようとするよりも、私はR.utils::intToBin

をお勧めしたいと単純に使用します。

require(R.utils) 

X99 <- sapply(X2, intToBin) 
+1

ありがとう、私はこれらの機能をうまくいけばうまくいけばあなたの答えで、最初の部分では、i2bが最初のビットを返すことを望みます、2番目のビット秒、などRは、 –

+0

バスタシアン(作成者の1人)がgithubリポジトリの更新された機能を持っています。私もそれを試みています。詳細なレビューをありがとうございます。 – eafpres

+0

packBits(as.raw(c、binary、rep(0,32-length(binary))))、 'integer') – eafpres

0

私はRNNここで使用した実装例を見つけました: https://www.r-bloggers.com/plain-vanilla-recurrent-neural-networks-in-r-waves-prediction/ この実装の作品。私はtrainrを使う前にトランスポーズの鍵を見つけました:

# Create sequences 
t <- seq(0.005,2,by=0.005) 
x <- sin(t*w) + rnorm(200, 0, 0.25) 
y <- cos(t*w) 

# Samples of 20 time series 
X <- matrix(x, nrow = 40) 
Y <- matrix(y, nrow = 40) 

# Standardize in the interval 0 - 1 
X <- (X - min(X))/(max(X) - min(X)) 
Y <- (Y - min(Y))/(max(Y) - min(Y)) 

# Transpose 
X <- t(X) 
Y <- t(Y) 

私のコードを更新しました。私はこのパッケージの使用に成功しました。したがって、バイナリの使用上の問題は、パッケージの使用には影響しません。私のコードが期待された結果を生み出していない理由を探していたので、おそらく私が提唱していた赤いニシンでした。

関連する問題