Когда использовать генератор тензорного потока во временных рядах

#tensorflow #generator #lstm

#тензорный поток #генератор #lstm

Вопрос:

Я создаю LSTM ANN, и я не уверен в использовании генератора в моем случае. Сеть должна иметь несколько гиперпараметров, которые она должна повторять, например, эпохи, функции активации …, однако, если в этом случае используется генератор, каждая итерация обучается на разных наборах, верно? Итак, правильнее использовать список или массив вместо этого? Спасибо

 for epoch in EPOCHS do:
for activation in ACTIVATION do:
trainLSTM(epoch, activation)
save best model
  

Ответ №1:

Рекомендуется использовать Generator for Time Series Data , который был подробно объяснен в руководстве по анализу временных рядов Tensorflow. Код для такого Generator показан ниже:

 class WindowGenerator():
  def __init__(self, input_width, label_width, shift,
               train_df=train_df, val_df=val_df, test_df=test_df,
               label_columns=None):
    # Store the raw data.
    self.train_df = train_df
    self.val_df = val_df
    self.test_df = test_df

    # Work out the label column indices.
    self.label_columns = label_columns
    if label_columns is not None:
      self.label_columns_indices = {name: i for i, name in
                                    enumerate(label_columns)}
    self.column_indices = {name: i for i, name in
                           enumerate(train_df.columns)}

    # Work out the window parameters.
    self.input_width = input_width
    self.label_width = label_width
    self.shift = shift

    self.total_window_size = input_width   shift

    self.input_slice = slice(0, input_width)
    self.input_indices = np.arange(self.total_window_size)[self.input_slice]

    self.label_start = self.total_window_size - self.label_width
    self.labels_slice = slice(self.label_start, None)
    self.label_indices = np.arange(self.total_window_size)[self.labels_slice]

  def __repr__(self):
    return 'n'.join([
        f'Total window size: {self.total_window_size}',
        f'Input indices: {self.input_indices}',
        f'Label indices: {self.label_indices}',
        f'Label column name(s): {self.label_columns}'])
  

Например, если ваш Data относится к периоду с 1960 года (1 января) по 2016 год (31 декабря) и вы хотите получить predict прогноз погоды за весь февраль 2017 года, рассматривая окно данных за последние 2 года, значения аргументов вышеуказанного класса показаны ниже:

 input_width: 2 Years => 365 * 2 = 730
label_width: Entire Feb Month => 28
shift: We are not predicting from Jan 1st 2017 but are shifting by entire Month of Jan => 30
train_df, test_df, val_df => Self Explanatory
label_columns : Name of the Target Column