Как включить нормализацию функций в регрессионную модель Кераса? - PullRequest
1 голос
/ 30 марта 2019

У меня есть данные для задачи регрессии. Независимые функции (X_train) масштабируются с помощью стандартного скейлера. Построена последовательная модель Keras с добавлением скрытых слоев. Скомпилировал модель. Затем подгонка модели с model.fit(X_train_scaled, y_train ) Затем я сохранил модель в .hdf5 файле.

Теперь, как включить масштабную часть в сохраненную модель, так что одни и те же параметры масштабирования могут применяться к невидимым тестовым данным.

#imported all the libraries for training and evaluating the model
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42)
sc = StandardScaler()
X_train_scaled = sc.fit_transform(X_train)
X_test_scaled= sc.transform (X_test)



def build_model():
    model = keras.Sequential([layers.Dense(64, activation=tf.nn.relu,input_shape=[len(train_dataset.keys())]),
    layers.Dense(64, activation=tf.nn.relu),
    layers.Dense(1)
    ])

    optimizer = tf.keras.optimizers.RMSprop(0.001)

    model.compile(loss='mean_squared_error',
                optimizer=optimizer,
                metrics=['mean_absolute_error', 'mean_squared_error'])
    return model
model = build_model()
EPOCHS=1000
history = model.fit(X_train_scaled, y_train, epochs=EPOCHS,
                    validation_split = 0.2, verbose=0)

loss, mae, mse = model.evaluate(X_test_scaled, y_test, verbose=0)

1 Ответ

1 голос
/ 03 мая 2019

Стандартный и эффективный способ, насколько я понимаю, использовать Tensorflow Transform.По сути это не означает, что мы должны использовать весь конвейер TFX, если нам нужно использовать TF Transform.TF-преобразование также можно использовать в качестве автономного.

Tensorflow Transform создает граф преобразования лучей, который вводит эти преобразования в виде констант в граф Tensorflow.Поскольку эти преобразования представлены в виде констант на графике, они будут единообразными по всему обучению и обслуживанию.Преимущества такой согласованности при обучении и обслуживании:

  1. Устраняет перекос при обучении
  2. Устраняет необходимость наличия кода в системе обслуживания, что улучшает задержку.

Пример кода для преобразования TF приведен ниже:

Код для импорта всех зависимостей:

try:
  import tensorflow_transform as tft
  import apache_beam as beam
except ImportError:
  print('Installing TensorFlow Transform.  This will take a minute, ignore the warnings')
  !pip install -q tensorflow_transform
  print('Installing Apache Beam.  This will take a minute, ignore the warnings')
  !pip install -q apache_beam
  import tensorflow_transform as tft
  import apache_beam as beam

import tensorflow as tf
import tensorflow_transform.beam as tft_beam
from tensorflow_transform.tf_metadata import dataset_metadata
from tensorflow_transform.tf_metadata import dataset_schema

Ниже упоминается функция предварительной обработки, в которой мы упоминаем все преобразования:

def preprocessing_fn(inputs):
  """Preprocess input columns into transformed columns."""
  # Since we are modifying some features and leaving others unchanged, we
  # start by setting `outputs` to a copy of `inputs.
  outputs = inputs.copy()

  # Scale numeric columns to have range [0, 1].
  for key in NUMERIC_FEATURE_KEYS:
    outputs[key] = tft.scale_to_0_1(outputs[key])

  for key in OPTIONAL_NUMERIC_FEATURE_KEYS:
    # This is a SparseTensor because it is optional. Here we fill in a default
    # value when it is missing.
    dense = tf.sparse_to_dense(outputs[key].indices,
                               [outputs[key].dense_shape[0], 1],
                               outputs[key].values, default_value=0.)
    # Reshaping from a batch of vectors of size 1 to a batch to scalars.
    dense = tf.squeeze(dense, axis=1)
    outputs[key] = tft.scale_to_0_1(dense)

  return outputs

В дополнение к

tft.scale_to_0_1

Вы также можете использовать другие API для нормализации, такие как

tft.scale_by_min_max, tft.scale_to_z_score

. Для получения подробной информации вы можете обратиться по ссылке ниже.и для учебника по TF Transform.

https://www.tensorflow.org/tfx/transform/get_started

https://www.tensorflow.org/tfx/tutorials/transform/census

...