Создание многих столбцов объектов в Tensorflow
Я начинаю работу над проектом Tensorflow и нахожусь в середине определения и создания моих столбцов функций. Тем не менее, у меня есть сотни и сотни функций - это довольно обширный набор данных. Даже после предварительной обработки и очистки, у меня много столбцов.
традиционный способ создания feature_column
определена в Tensorflow учебник и даже сообщение StackOverflow. Вы по существу объявляете и инициализируете объект Tensorflow для каждого столбца функций:
gender = tf.feature_column.categorical_column_with_vocabulary_list(
"gender", ["Female", "Male"])
это работает хорошо, если ваш набор данных имеет только несколько колонн, но в моем случае, я точно не хочу иметь сотни строк кода инициализации разные feature_column
объекты.
каков наилучший способ решить эту проблему? Я замечаю, что в учебнике все столбцы собраны в виде списка:
base_columns = [
gender, native_country, education, occupation, workclass, relationship,
age_buckets,
]
который в конечном итоге передается в ваш оценщик:
m = tf.estimator.LinearClassifier(
model_dir=model_dir, feature_columns=base_columns)
так было бы идеальным способом обработка feature_column
создание сотен столбцов, чтобы добавить их в список? Что-то вроде этого?
my_columns = []
for col in df.columns:
if is_string_dtype(df[col]): #is_string_dtype is pandas function
my_column.append(tf.feature_column.categorical_column_with_hash_bucket(col,
hash_bucket_size= len(df[col].unique())))
elif is_numeric_dtype(df[col]): #is_numeric_dtype is pandas function
my_column.append(tf.feature_column.numeric_column(col))
это лучший способ создать эти столбцы? Или мне не хватает некоторой функциональности Tensorflow, которая позволяет мне обойти этот шаг?
3 ответов
то, что у вас есть, имеет для меня смысл. :) копирование из собственного кода:
my_columns = []
for col in df.columns:
if is_string_dtype(df[col]): #is_string_dtype is pandas function
my_columns.append(tf.feature_column.categorical_column_with_hash_bucket(col,
hash_bucket_size= len(df[col].unique())))
elif is_numeric_dtype(df[col]): #is_numeric_dtype is pandas function
my_columns.append(tf.feature_column.numeric_column(col))
я использовал ваш собственный ответ. Просто отредактировал немного (должно быть my_columns
вместо my_column
на for
loop) и опубликовать его так, как он работал для меня.
import pandas.api.types as ptypes
my_columns = []
for col in df.columns:
if ptypes.is_string_dtype(df[col]): #is_string_dtype is pandas function
my_columns.append(tf.feature_column.categorical_column_with_hash_bucket(col,
hash_bucket_size= len(df[col].unique())))
elif ptypes.is_numeric_dtype(df[col]): #is_numeric_dtype is pandas function
my_columns.append(tf.feature_column.numeric_column(col))
вышеуказанные два метода работают, только если данные предоставлены в фрейме данных pandas, где у вас есть имя столбца для каждого столбца. Но, если у вас есть все числовые столбцы, и вы не хотите называть эти столбцы. например, прочитав несколько числовых столбцов из массива numpy, вы можете использовать что-то вроде этого:-
feature_column = [tf.feature_column.numeric_column(key='image',shape=(784,))]
input_fn = tf.estimator.inputs.numpy_input_fn(dict({'image':x_train})
где X_train-Ваш массив numy с 784 столбцами. Вы можете проверить это в должности Викас Сангван для более подробной информации.