LSTM ValueError: входные массивы должны иметь то же количество выборок, что и целевые массивы - PullRequest
0 голосов
/ 09 июля 2019

Я столкнулся с проблемой, когда я пытался подобрать модель, вот моя модель сборки и форма моего поезда и данные испытаний:

import keras
def buildModel(dataLength, labelLength):
    price=Input(shape=(dataLength, 51),name='price') 
#     price = Input(shape = (dataLength,1),name='price')
    sentiment = Input(shape=(dataLength, 51),name='sentiment')

    priceLayers = LSTM(64, return_sequences=False)(price)
    sentimentLayers = LSTM(64, return_sequences=False)(sentiment)

    output = keras.layers.concatenate(
        [priceLayers,sentimentLayers,]
    )
    output = Dense(labelLength, activation='linear',name='output')(output)

    model = Model(
        inputs = [price,sentiment],
        outputs=[output]
    )
    model.compile(optimizer='rmsprop',loss='mse')
    return model

from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model

lstm = buildModel(22234,1)
lstm.fit([trainX,trainS],[trainY],validation_data=(
        [testX,testS],
        [testY]),epochs = 10)

trainX.shape = (1, 22234, 51)
testX.shape = (1, 9500, 51)

trainY.shape = (22234,)
testY.shape = (9500,)

trainS.shape = (1, 22234, 51)
testS.shape = (1, 9500, 51)

Ошибка показывает:

ValueError                                Traceback (most recent call last)
<ipython-input-40-4d75b702c980> in <module>()
      5 lstm.fit([trainX,trainS],[trainY],validation_data=(
      6         [testX,testS],
----> 7         [testY]),epochs = 10
      8 )
ValueError: Input arrays should have the same number of samples as target arrays. Found 1 input samples and 22234 target samples.

Но я не понимаю, почему он говорит, что мои входные и целевые выборки имеют разный размер, потому что в X и S есть 3 измерения, а в Y только 2D?Я думаю: вход должен быть 3D, поэтому я изменяю X и S;однако Y является меткой, и ее не нужно изменять

1 Ответ

0 голосов
/ 09 июля 2019

Размер партии для входов и целей должен быть одинаковым. Это должно быть измерение 0.

trainX.shape = (1, 22234, 51)

должно быть: (22234, 51, 1), когда выходные данные имеют форму (22234,).

Не пытайтесь использовать 1 в качестве измерения time_step, поскольку LSTM с одним временным шагом не имеет смысла.

Входные размеры должны быть (batch_size, time_steps, n_features). Нет необходимости указывать batch_size при построении модели. Таким образом, формы, которые вы объявляете, должны быть (time_steps, n_features). Для последовательности из N измерений N - это time_steps, а n_features - количество значений, измеренных за один раз.

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