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