как передать данные из нескольких массивов в модель? - PullRequest
1 голос
/ 14 июля 2020

Как вы можете видеть ниже, объект n3w_coin имеет метод под названием forecast_coin(), который возвращает фрейм данных с 5 столбцами после удаления date_time, я разделяю данные с помощью train_test_split, а затем нормализую его с помощью sc, после преобразования 2D-массива в 3D-массив, который я хотел бы передать модели для обучения, но у меня возникли небольшие проблемы с выяснением того, как передать normalized_x_train модели

моя цель состоит в том, чтобы передать каждый подмассив внутри normalized_x_train в модель

Я получаю следующую ошибку IndexError: tuple index out of range

пожалуйста, объясните, почему и что не так в моем подходе

df = pd.DataFrame(n3w_coin.forecast_coin())

x_sth = np.array(df.drop(['date_time'],1))
y_sth = np.array(df.drop(['date_time'],1))



sc = MinMaxScaler(feature_range=(0,1))


X_train, X_test, y_train, y_test = train_test_split(x_sth,y_sth, test_size=0.2, shuffle=False)

print (X_train)
normalized_x_train = sc.fit_transform(X_train)
normalized_y_train = sc.fit_transform(y_train)

print (normalized_x_train)

### converting to a 3D array to feed the model 

normalized_x_train = np.reshape(normalized_x_train, (400 , 5 ,1 ))

print (normalized_x_train.shape)

print (normalized_x_train)

model = Sequential()
model.add(LSTM(units = 100, return_sequences = True, input_shape=(normalized_x_train.shape[5],1)))
 
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])
model.fit(normalized_x_train, normalized_y_train, epochs=100, batch_size=400 )

1 Ответ

1 голос
/ 23 июля 2020

Пара наблюдений из вашего кода:

  1. Помимо Normalizing the Data, вам нужно Prepare Time Series Data. Пожалуйста, найдите function ниже, это pre-processes Data, чтобы его можно было подавать на LSTM Model.
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)

parameters, history_size и target_size важные. history_size указывает, сколько значений в Time Series необходимо учитывать для predicting Target Value. target_size указывает, какой именно Future Value необходимо предсказать.

Ваш Network имеет только 1 LSTM Layer, и вы устанавливаете значение аргумента return_sequences = True. Значение этого параметра должно быть True, только если после Layer есть еще LSTM Layer.

Так как вы хотите предсказать Numeri c Значение, в конце должен быть плотный слой с 1 Neuron/Unit/Node и с Activation = 'linear'.

См. Этот Учебник Tensorflow по анализу временных рядов который содержит полный код вашей проблемы.

...