2016-06-29 3 views
5

Я хочу создать базовый RNN, который может добавить два байта. Ниже приведены входные и выходные, которые, как ожидается простого добавленияНесоответствие размеров в LSTM Keras

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() 

The Мне ошибки получить что-то по адресу

ожидается 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

В Keras Sequential модели ожидают ввода формы (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 в качестве входных данных requiers 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

Смежные вопросы