Как устранить ошибку значения для ввода Keras TF lstm - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь построить Keras NN из спецификаций тензорного потока. Однако у меня возникают проблемы с моим lstm_input, где я получаю сообщение об ошибке "

ValueError: Ошибка при проверке ввода: ожидалось, что lstm_1_input имеет 3 измерения, но получил массив с формой (None, 1)"

Я относительно новичок в использовании Keras для временных рядов, поэтому любая помощь будет принята с благодарностью. Я пытаюсь предсказать / прогнозировать подтвержденные случаи и летальные исходы COVID19 в Нью-Йорке.

Мой адаптированный код:

    import tensorflow as tf

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    import os

    import pandas as pd

    mpl.rcParams['figure.figsize'] = (8, 6)
    mpl.rcParams['axes.grid'] = False

    df = USARate[USARate['Province_State'] == 'New York' ]
    df.drop('Province_State', axis = 1, inplace = True)
    TRAIN_SPLIT = 60
    tf.random.set_seed(13)
    features_considered = ['ConfirmedCases', 'Fatalities']
    features = df[features_considered]
    features.index = df['Date']
    features.head()

    ConfirmedCases  Fatalities
    Date        
    2020-01-22  0   0
    2020-01-23  0   0
    2020-01-24  0   0
    2020-01-25  0   0
    2020-01-26  0   0
    dataset = features.values
    data_mean = dataset[:TRAIN_SPLIT].mean(axis=0)
    data_std = dataset[:TRAIN_SPLIT].std(axis=0)


    def multivariate_data(dataset, target, start_index, end_index,  history_size,
                      target_size, step, single_step=False):
    data = []
    labels = []

    start_index = start_index + history_size
    if end_index is None:
      end_index = len(dataset) - target_size

    for i in range(start_index, end_index):
     indices = range(i-history_size, i, step)
     data.append(dataset[indices])

    if single_step:
      labels.append(target[i+target_size])
    else:
      labels.append(target[i:i+target_size])

    return np.array(data), np.array(labels)


    BATCH_SIZE = 20
    BUFFER_SIZE = 100

    past_history = 59
    future_target = 1
    STEP = 1

    x_train_single, y_train_single = multivariate_data(dataset, dataset[:, 1], 0,
                                                   TRAIN_SPLIT, past_history,
                                                   future_target, STEP,
                                                   single_step=True)
    x_val_single, y_val_single = multivariate_data(dataset, dataset[:, 1],
                                               TRAIN_SPLIT, None, past_history,
                                               future_target, STEP,
                                               single_step=True)
    print ('Single window of past history : {}'.format(x_train_single[0].shape))

    train_data_single = tf.data.Dataset.from_tensor_slices((x_train_single, y_train_single))
    train_data_single = train_data_single.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()

    val_data_single = tf.data.Dataset.from_tensor_slices((x_val_single, y_val_single))
    val_data_single = val_data_single.batch(BATCH_SIZE).repeat()

    single_step_model = tf.keras.models.Sequential()
    single_step_model.add(tf.keras.layers.LSTM(8,
                                  input_shape=x_train_single.shape[-2:]))

    single_step_model.add(tf.keras.layers.Dense(1))
                         single_step_model.compile(optimizer=tf.keras.optimizers.RMSprop(), loss='mae')


    EPOCHS = 10
    EVALUATION_INTERVAL = 1

    single_step_history = single_step_model.fit(train_data_single, epochs=EPOCHS,
                                                    steps_per_epoch=EVALUATION_INTERVAL,
                                             validation_data=val_data_single,
                                            validation_steps=50)

вышеприведенных ошибок на single_step_history ^^^^ пожалуйста, извините за ошибку отступа на model.compile, я не мог адаптировать его обратно в интерфейсе здесь.

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