LSTM Keras中的尺寸不匹配

时间:2016-06-29 17:05:42

标签: python deep-learning keras lstm

我想创建一个可以添加两个字节的基本RNN。以下是输入和输出,预计会有一个简单的加法

X = [[0, 0], [0, 1], [1, 1], [0, 1], [1, 0], [1, 0], [1, 1], [1, 0]]

X1 = 00101111X2 = 01110010

Y = [1, 0, 1, 0, 0, 0, 0, 1]

我创建了以下顺序模型

model = Sequential()
model.add(GRU(output_dim = 16, input_length = 2, input_dim = 8))
model.add(Activation('relu'`))
model.add(Dense(2, activation='softmax'))
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
model.summary()

我得到的错误是

  

预期lstm_input_1有3个维度,但得到的形状为(8L, 2L)

的数组

因此,如果我通过将X更改为

来增加尺寸
[[[0 0]] [[1 1]] [[1 1]] [[1 0]] [[0 0]] [[1 0]] [[0 1]] [[1 0]]]

然后错误变为

  

预期lstm_input_1形状为(None, 8, 2)但形状为(8L, 1L, 2L)的数组

3 个答案:

答案 0 :(得分:3)

在Keras中,Sequential模型期望输入形状(batch_size, sequence_length, input_dimension)。我怀疑你需要改变输入数组的最后两个维度。请记住,未明确定义批量维度。

答案 1 :(得分:3)

将X更改为selectedDay,使其形状为[[[0, 0], [0, 1], [1, 1], [0, 1], [1, 0], [1, 0], [1, 1], [1, 0]]]

答案 2 :(得分:2)

Keras作为输入需要3D数据,如错误所述。它是样品,时间步骤,功能。由于你有(8L,2L)Keras将其视为2D - [样本,特征]。为了解决它,做这样的事情

def reshape_dataset(train):
    trainX = numpy.reshape(train, (train.shape[0], 1, train.shape[1]))
    return numpy.array(trainX)

x = reshape_dataset(your_dataset)

现在X应为8L,1,2L,即[样本,时间步长,功能] - 3D