LSTM Keras中的尺寸不匹配



我想创建一个可以添加两个字节的基本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具有三维,但得到形状为(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)的数组

在Keras中,顺序模型期望形状为(batch_size, sequence_length, input_dimension)的输入。我怀疑你需要改变输入数组的最后两个维度。请记住,批处理维度不是显式定义的。

将X更改为[[[0, 0], [0, 1], [1, 1], [0, 1], [1, 0], [1, 0], [1, 1], [1, 0]]],使其形状为(1, 8, 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,即[samples, time steps, features] - 3D

相关内容

  • 没有找到相关文章

最新更新