У меня есть набор данных, содержащий 3 столбца: отметка времени (строка), Inverter_Key (строка) (в моем случае 21 инвертор), энергия (целое число), температура (целое число). Я пытаюсь создать модель LSTM для прогнозирования энергии и температуры каждого инвертора. Чтобы повысить скорость модели, вместо этого получите входную форму (96,66). Я объединил набор данных для обучения и теста, чтобы получить набор данных как (96,4). Однако прогноз не соответствует фактическим данным при проверке. Я полагал, что это произошло из-за окон, потому что я уже проверял структуру и корреляционные связи. Зависимость показывает, что энергия и температура имеют линейную зависимость 0,78 и нелинейную 0,8. Я также масштабирую свои энергетические данные, чтобы они стали меньше. Таким образом, я обрабатываю данные именно так.
Для данных энергия и температура будут записываться каждые 15 минут. Например
Timestamp , Inverter_Key , Energy, Temperature
12/12/2022 10:15, KU , 2 , 22
12/12/2022 10:15, KS , 4 , 22
12/12/2022 10:30, KU , 4 , 21
12/12/2022 10:30, KS , 5 , 21
Я использую технику маркировки для обозначения времени, а также кодирую горячий код для обозначения ключа инвертора как целого числа.
Вот как я работаю с окнами:< /p>
def windowed_dataset(data, window_size=96, batch_size=128, shuffle_buffer=1000):
dataset = tf.data.Dataset.from_tensor_slices(data)
dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)
dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))
dataset = dataset.shuffle(shuffle_buffer)
dataset = dataset.map(lambda window: (window[:-1], window[-1]))
dataset = dataset.batch(batch_size,drop_remainder=True).prefetch(tf.data.AUTOTUNE)
return dataset
Как создать модель и подогнать ее:
def create_M_LSTM_model():
model_m_lstm = tf.keras.models.Sequential([
tf.keras.layers.LSTM(64,return_sequences=True,input_shape = input_data_shape),
#tf.keras.layers.Dropout(0.2),
tf.keras.layers.LSTM(32,return_sequences=True),
tf.keras.layers.LSTM(16,return_sequences=True),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(6),
])
return model_m_lstm
def create_model_M_LSTM():
tf.random.set_seed(51) # Set a seed for reproducibility
model_create = create_M_LSTM_model() # Create the model
model_create.compile(
loss=tf.keras.losses.Huber(), # Loss function
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), # Optimizer
metrics=["mae"] # Metric
)
return model_create
# Create and summarize the model
model_create_m_lstm = create_model_M_LSTM()
# Print model summary
model_create_m_lstm.summary()
is_train = True
if is_train:
model_create_m_lstm.fit(train_dataset, epochs=20)
How can I window train dataset which contain both categorical and numerical data.The expected dataset is that when I extract data of KU inverter out of the prediction is will match with the data of KU inverter of test dataset.
Подробнее здесь: https://stackoverflow.com/questions/792 ... lstm-model
Как обработать набор данных с категориальными и числовыми данными для модели LSTM? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение