bquast / rnn

Recurrent Neural Networks in R
https://qua.st/rnn
73 stars 28 forks source link

RNN trainr issue #32

Open vasgupta opened 6 years ago

vasgupta commented 6 years ago

Hello, I am getting an error running the trainr command in the package. Here it is:

Error in if (dim(X)[2] != dim(Y)[2] && !seq_to_seq_unsync) { : missing value where TRUE/FALSE needed

Even though X and Y are the same length. I have copied the R file with my code:

library(rnn) library(corrplot) prices <- read.csv('A:\Vasu\Big Data Masters\MRP\Clean Input.csv')

prices$Date <- NULL prices$Gold.Price <- as.numeric(gsub(",","", as.character(just_prices$Gold.Price), fixed = TRUE)) prices$DJIA <- as.numeric(gsub(",","", as.character(just_prices$DJIA), fixed = TRUE))

matrix <- cor(prices) corrplot(matrix, method = "circle") model <- trainr(Y = array(prices$Gold.Price), X = array(prices$US.Dollar.Index) , learningrate = 0.1, sigmoid = 'logistic', use_bias = T)

bquast commented 6 years ago

@DimitriF any thoughts?

DimitriF commented 6 years ago

I think array without the dim argument will return a array with one dimension, it seems you have only one sample, this should work better:

model <- trainr(Y = array(prices$Gold.Price,dim=c(1,nrow(prices)), X = array(prices$US.Dollar.Index,dim=c(1,nrow(prices)) , learningrate = 0.1,
sigmoid = 'logistic', use_bias = T)
vasgupta commented 6 years ago

Thanks @DimitriF it worked!

vasgupta commented 6 years ago

But just one more question, what if I wanted to input 3 variables, instead of one? I tried this, but its not working.

model <- trainr(Y = array(prices$Gold.Price,dim=c(1,nrow(prices))), X = array(c(prices$US.Dollar.Index, prices$CBOE.Volatility, prices$Silver.Price), dim=c(3,nrow(prices))) , learningrate = 0.1, sigmoid = 'logistic', use_bias = T)

DimitriF commented 6 years ago

the first dimension is for the number of samples, the second for the number of elements in the sequence and the optional third dimension for the number of variables (if only 2 dimensions, yu have only one variable), so it should look like this:

model <- trainr(Y = array(prices$Gold.Price,dim=c(1,nrow(prices))),
X = array(c(prices$US.Dollar.Index, prices$CBOE.Volatility, prices$Silver.Price),
dim=c(1,nrow(prices),3)) , learningrate = 0.1,
sigmoid = 'logistic', use_bias = T)

But I am not sure how array fill itself so you may have to use aperm to check

vasgupta commented 6 years ago

Hey, just wanted to clarify an issue I was getting. I'm running the RNN with just one variable and I convert all my inputs to binary before training on the RNN. However, in the output I was expecting a binary output, but it gave me a decimal answer. How can I fix this?

Here's my code:

prices <- read.csv('A:\Vasu\Big Data Masters\MRP\Clean Input.csv')

prices$Date <- NULL prices$Gold.Price <- as.numeric(gsub(",","", as.character(just_prices$Gold.Price), fixed = TRUE)) prices$DJIA <- as.numeric(gsub(",","", as.character(just_prices$DJIA), fixed = TRUE))

matrix <- cor(prices) corrplot(matrix, method = "circle")

convert integer prices to binary

Y <- int2bin(prices$Gold.Price) X <- int2bin(prices$US.Dollar.Index) test <- int2bin(Test_prices$US.Dollar.Index)

model <- trainr(Y = Y, X = X , learningrate = 0.1, sigmoid = 'logistic', use_bias = T)

result <- predictr(model, test)

DimitriF commented 6 years ago

round(result) ?

vasgupta commented 6 years ago

My results look like this:

results table

bquast commented 6 years ago

All below 0.5? There must be another problem then

vasgupta commented 6 years ago

Does the input have to be in binary?

vasgupta commented 6 years ago

As well the int2bin function doesn't properly convert the integer to binary, it gives a wrong number.

bquast commented 6 years ago

Not the input, nor the output has to be binary, the binary stuff is simply an example.