Я исчерпал себя на этом, поэтому любая помощь будет оценена.
Я пытаюсь настроить хостинг модели тензорного потока с помощью Amazon Sagemaker и следую приведенному примеру здесь .
В этом примере используются жестко закодированные столбцы объектов с известной размерностью.
feature_columns = [tf.feature_column.numeric_column(INPUT_TENSOR_NAME, shape=[4])]
Мне нужно избегать этого, так как мой набор данных часто меняется.
Настройка локальной машины
Теперь на моем локальном компьютере я определяю список столбцов
my_feature_columns = []
При следующей стратегии
#Define placeholder nodes based on datatype being inserted
for key in train_x.keys():
Где train_x - набор данных без меток.
«ОБЪЕКТЫ» становятся хэшированными сегментами, поскольку существует много возможных категорий
if train_x[key].dtypes == 'object':
categorical_column = tf.feature_column.categorical_column_with_hash_bucket(
key = key,
hash_bucket_size = len(train_x[key].unique()))
my_feature_columns.append(tf.feature_column.embedding_column(
categorical_column=categorical_column,
dimension=5))
«INT64» становятся категориальными столбцами, поскольку существует только две возможные категории (я переименовал логические значения в 0/1)
elif train_x[key].dtypes == 'int64':
categorical_column = tf.feature_column.categorical_column_with_identity(
key=key,
num_buckets=2)
my_feature_columns.append(tf.feature_column.indicator_column(categorical_column))
«ПЛАВЫ» становятся непрерывными столбцами
elif train_x[key].dtypes == 'float':
my_feature_columns.append(
tf.feature_column.numeric_column(
key=key))
На локальном компьютере это дает хороший список всех моих функций, которые могут быть предоставлены в качестве аргумента при создании экземпляра tf.estimator.DNNClassifier. Поскольку в каждый столбец OBJECT добавляется больше категорий, это обрабатывается
hash_bucket_size = len(train_x[key].unique())
Sagemaker
Из Документов
Подготовка учебного сценария TensorFlow
Ваш учебный скрипт TensorFlow должен быть исходным файлом Python 2.7. Образ докера SageMaker TensorFlow использует этот сценарий, вызывая функции с определенными именами из этого сценария.
Учебный скрипт должен содержать следующее:
Точно одно из следующего:
model_fn: определяет модель, которая будет обучаться.
keras_model_fn: определяет модель tf.keras, которая будет обучаться.
estimator_fn: определяет tf.estimator.Estimator, который будет обучать модель.
train_input_fn: данные предварительной обработки и загрузки.
eval_input_fn: данные предварительной обработки и оценки загрузки.
Опять же, из примера
def train_input_fn(training_dir, params):
"""Returns input function that would feed the model during training"""
return _generate_input_fn(training_dir, 'iris_training.csv')
Эта функция вызывается образом докера sagemaker, который добавляет собственный аргумент для training_dir , это не глобальный параметр.
Когда я пытаюсь получить доступ к моим данным обучения из estimator_fn, чтобы создать список my_feature_columns
NameError: global name 'training_dir' is not defined
Я бы хотел сделать что-то подобное.
def estimator_fn(run_config, params):
my_feature_columns = []
train_x , _ , _ , _ = datasplitter(os.path.join(training_dir, 'leads_test_frame.csv'))
for key in train_x.keys():
if train_x[key].dtypes == 'object':
categorical_column = tf.feature_column.categorical_column_with_hash_bucket(
key = key,
hash_bucket_size = len(train_x[key].unique()))
my_feature_columns.append(tf.feature_column.embedding_column(
categorical_column=categorical_column,
dimension=5))
elif train_x[key].dtypes == 'int64':
categorical_column = tf.feature_column.categorical_column_with_identity(
key=key,
num_buckets=2)
my_feature_columns.append(tf.feature_column.indicator_column(categorical_column))
elif train_x[key].dtypes == 'float':
my_feature_columns.append(
tf.feature_column.numeric_column(
key=key))
return tf.estimator.DNNClassifier(feature_columns=my_feature_columns,
hidden_units=[10, 20, 10],
n_classes=2,
config=run_config)
Спасибо всем, кто может помочь любым способом. С радостью предоставит больше информации, если это необходимо, но, вероятно, 4 страниц вполне достаточно: -S
Ура!
Клем