Ожидается увидеть 1 массив (ов), но вместо этого получил следующий список из 4 массивов - PullRequest
0 голосов
/ 05 февраля 2019

Мне нужна помощь, чтобы соответствовать скомпилированной модели Keras.В частности, у меня проблемы с размерами входных данных.

X_train =
    [[[1, 16], [1, 19], [1, 17]],
     [[1, 19], [1, 17], [0, 17]],
     [[1, 17], [0, 17], [1, 17]],
     [[0, 17], [1, 17], [1, 18]]]

y_train =
    0  1  0
    1  0  0
    1  0  0
    0  0  1

Входные данные имеют следующие размеры:

print(len(X_train), 'train sequences')
print(len(X_test), 'test sequences')
print('X_train shape:', np.array(X_train).shape )
print('X_test shape:', np.array(X_test).shape )
print('y_train shape:', y_train.shape)
print('y_test shape:', y_test.shape)

> 4 train sequences
> 1 test sequences
> X_train shape: (4, 3, 2)
> X_test shape: (1, 3, 2)
> y_train shape: (4, 3)
> y_test shape: (1, 3)

Форма X должна интерпретироваться следующим образом:

  • Образцы.Количество образцов.
  • Временные шаги.Один временной шаг - это одна точка наблюдения в выборке.
  • Особенности.Одна особенность - это одно наблюдение за шагом по времени.

(выборки -> 4, отметки времени -> 3, особенности -> 2)

Это модель Keras:

model = Sequential()

model.add(LSTM(
                units=32, # number of units returned by LSTM
                return_sequences=True, 
                input_shape=(timestamps,nb_features),
                dropout=0.2, 
                recurrent_dropout=0.2
              )
         )

model.add(TimeDistributed(Dense(1)))

model.add(Dropout(0.2))

model.add(Flatten())

# model.add(TimeDistributedDense(1))
model.add(Dense(units=nb_classes,
               activation='softmax'))

# Define a performance metric
#sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss="categorical_crossentropy",
              metrics = ['accuracy'],
              optimizer='adadelta')

Краткое описание модели:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_2 (LSTM)                (None, 3, 32)             4480      
_________________________________________________________________
time_distributed_2 (TimeDist (None, 3, 1)              33        
_________________________________________________________________
dropout_2 (Dropout)          (None, 3, 1)              0         
_________________________________________________________________
flatten_2 (Flatten)          (None, 3)                 0         
_________________________________________________________________
dense_4 (Dense)              (None, 3)                 12        
=================================================================
Total params: 4,525
Trainable params: 4,525
Non-trainable params: 0
_________________________________________________________________

На этом графике видно, что входное значение равно (None, 3, 2), что означает, что (4, 3, 2) из ​​X_train должно быть в порядке,но по какой-то причине это не так.

enter image description here

Когда я выполняю этот код, он выдает ошибку:

history = model.fit(X_train, y_train, validation_split=0.25, epochs=500, batch_size=2, shuffle=True, verbose=0)

Ошибка:

ValueError: Ошибка при проверке ввода модели: список массивов Numpy, передаваемых в вашу модель, не соответствует размеру, ожидаемому моделью.Ожидается увидеть 1 массив (ов), но вместо этого получен следующий список из 4 массивов: [массив ([[1, 16], [1, 19], [1, 17]]), массив ([[1, 19], [1, 17], [0, 17]]), массив ([[1, 17], [0, 17], [1, 17]]), массив ([[0, 17], [1, 17], ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...