2017-07-25 128 views
2

输入元件具有3行,每行具有199列和输出具有46行和1列keras多输入到simpleRNN尺寸:尺寸失配

Input.shape, output.shape 
((204563, 3, 199), (204563, 46, 1)) 

当输入给出下面的错误被抛出:

from keras.layers import Dense 
from keras.models import Sequential 
from keras.layers.recurrent import SimpleRNN 

model = Sequential() 
model.add(SimpleRNN(100, input_shape = (Input.shape[1], Input.shape[2]))) 
model.add(Dense(output.shape[1], activation = 'softmax')) 
model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy']) 
model.fit(Input, output, epochs = 20, batch_size = 200) 

错误抛出:

Epoch 1/20 

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-134-378dd431cf45> in <module>() 
     3 model.add(Dense(y_target.shape[1], activation = 'softmax')) 
     4 model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy']) 
----> 5 model.fit(X_input, y_target, epochs = 20, batch_size = 200) 
. 
. 
. 
ValueError: Error when checking model target: expected dense_6 to have 2 dimensions, but got array with shape (204563, 46, 1) 

请解释这个问题,可能soution的原因

回答

2

的问题是,SimpleRNN(100)返回形状(204563, 100)的张量,因此,Dense(46)(因为output.shape[1]=46)将返回形状(204563, 46)的张量,但您y_target具有形状(204563, 46, 1)。您需要删除最后一个维度,例如y_target = np.squeeze(y_target),以便维度一致