QQQQQQQQQQQQQQQQQQ
QQQQQQQQQQQQQQQQQQ

Reputation: 31

ValueError: Input 0 is incompatible with layer simple_rnn_1: expected ndim=3, found ndim=2 in Keras

I'm trying to create this simple RNN architecture in Keras:

Here is my code:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Activation
from keras.layers import SimpleRNN

#fix random seed
np.random.seed(7)

trainX = np.loadtxt('trainX.csv', delimiter=',', dtype=np.float32)
trainT = np.loadtxt('trainT.csv', delimiter=',', dtype=np.float32)

print(trainX)
print(trainT)
print(trainX.shape[1])

HIDDEN_LAYERS = 4

model = Sequential()

model.add(Dense(output_dim=HIDDEN_LAYERS, input_dim=trainX.shape[1]))
model.add(Activation("relu"))
model.add(SimpleRNN(4, input_dim=trainX.shape[1], input_length=128))
model.add(Activation("relu"))
model.add(Dense(output_dim=4))
model.add(Activation("softmax"))

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(trainX, trainT, nb_epoch=20, batch_size=128)

When I run this code, I get the following error on the line where I add a SimpleRNN layer:

ValueError: Input 0 is incompatible with layer simple_rnn_1: expected ndim=3, found ndim=2

Does anyone know what's going on? The value of trainX.shape[1] is 24

Upvotes: 3

Views: 2948

Answers (1)

Ioannis Nasios
Ioannis Nasios

Reputation: 8537

you can add your SimpleRNN as first layer and after your first change your train data shape like this:

trainX=trainX.reshape(trainX.shape[0],1,trainX.shape[1])

model = Sequential()
model.add(SimpleRNN(4,  input_shape=(trainX.shape[1:])))
model.add(Dense(output_dim=HIDDEN_LAYERS))
model.add(Activation("relu"))
model.add(Dense(output_dim=4))
model.add(Activation("softmax"))
...

or add a Reshape layer without reshaping trainX, like this:

from keras.layers import Reshape

model = Sequential()
model.add(Dense(output_dim=HIDDEN_LAYERS, input_dim=trainX.shape[1]))
model.add(Activation("relu"))
model.add(Reshape((1,4)))
model.add(SimpleRNN(4))
model.add(Dense(output_dim=4))
model.add(Activation("softmax"))
...

Upvotes: 1

Related Questions