我想创建一个可以添加两个字节的基本RNN。以下是输入和输出,预计会有一个简单的加法
X = [[0, 0], [0, 1], [1, 1], [0, 1], [1, 0], [1, 0], [1, 1], [1, 0]]
即X1 = 00101111
和X2 = 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)
的数组
答案 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