LSTM Keras中的维度不匹配问题

5

我希望创建一个基本的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个回答

3
在Keras中,顺序模型希望输入的形状为(batch_size, sequence_length, input_dimension)。我怀疑您需要更改输入数组的最后两个维度。请记住,批处理维度没有明确定义。

3

将X变为[[[0, 0], [0, 1], [1, 1], [0, 1], [1, 0], [1, 0], [1, 1], [1, 0]]],使其形状为(1, 8, 2)


2

Keras要求输入三维数据,如错误所述。它是样本、时间步长和特征。由于您有(8L, 2L),Keras将其视为二维——[样本,特征]。为了解决问题,请执行以下操作:

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,即[样本数,时间步长,特征数] - 三维


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接