TransWikia.com

Линейная регрессия с несколькими переменными и оптимизация

Stack Overflow на русском Asked by Alihan Urumov on December 30, 2021

Добрый день) Снова нужна ваша помощь. Я пару дней копался пять раз переписал код. читаю примеры с официального сайта и много не работает в новой версии тензорфлоу. постоянно что то переделывают. Вот собрал кое как код который работает) Но тут линейная регрессия с одной переменной. Мне нужно переделать его чтоб регрессия учитывала все переменные. 82 входа получается и один выход. скрин таблицы приведу тоже. Первая колонка входные данные вторая выходные. строка – одна итерация
Да и код кажется не продуктивным и не оптимизированным. копаюсь изучаю функции, но далеко до совершенства))
Ну и еще валидационную выборку включил, пока код не написал к его использованию, для подгона параметров после тренировочной(

# Задание размерности модели в функции
def linear_model():
  model = keras.Sequential([
        layers.Dense(1, use_bias=True, input_shape=(1,), name='layer')
      ])

# Задание оптимизатора
  optimizer = tf.keras.optimizers.Adam(
      learning_rate=0.01, beta_1=0.9, beta_2=0.99, epsilon=1e-05, amsgrad=False,
      name='Adam')

# Задание параметров модели
  model.compile(loss='mse', optimizer=optimizer, metrics=['mae','mse'])
  return model

# Создание модели ранее созданой функцией
model = linear_model()

# Задание параметров Нйероной сети
n_epochs = 4000
batch_size = 256
n_idle_epochs = 100
n_epochs_log = 200
n_samples_save = n_epochs_log * trainInput.shape[0]
print('Checkpoint is saved for each {} samples'.format(n_samples_save))

# Механихм остановки обучение при отсутствии дальнейшего прогресса обучения
earlyStopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=n_idle_epochs,         
min_delta=0.001)

# Создание настраиваемого обратного вызова для печати журнала после определенного количества эпох
predictions_list = []
class NEPOCHLogger(tf.keras.callbacks.Callback):
    def __init__(self,per_epoch=100):
        #  количество пакетов для ожидания перед выводом потерь
        self.seen = 0
        self.per_epoch = per_epoch

    def on_epoch_end(self, epoch, logs=None):
      if epoch % self.per_epoch == 0:
        print('Epoch {}, loss {:.2f}, val_loss {:.2f}, mae {:.2f}, val_mae {:.2f}, mse {:.2f}, val_mse {:.2f}'
          .format(epoch, logs['loss'], logs['val_loss'],logs['mae'], logs['val_mae'],logs['mse'], logs['val_mse']))
          
# Вызов объекта
log_display = NEPOCHLogger(per_epoch=n_epochs_log)

# Включаем эпоху в имя файла
import os
checkpoint_path = "training/cp-{epoch:05d}.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

# Создаем обратный вызов, который сохраняет веса модели
checkpointCallback = tf.keras.callbacks.ModelCheckpoint(
    filepath=checkpoint_path, 
    verbose=1, 
    save_weights_only=True,
    save_freq=n_samples_save)

# Сохроняем веса
model.save_weights(checkpoint_path.format(epoch=0))

# Определяем обратный вызов Keras TensorBoard
logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

history = model.fit(
  trainInput, trainTarget, batch_size=batch_size,
  epochs=n_epochs, validation_split = 0.1, verbose=0, callbacks=        
[earlyStopping,log_display,tensorboard_callback,checkpointCallback])

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP