Допустим, у меня есть следующий фрейм данных pandas:
| col1 | col2 | col3 |
---------------------------------
0 | 5 | 4 | [0,2,4] |
1 | 3 | 8 | [7,3] |
2 | 2 | 1 | [7,3,6,9] |
in 'col3' У меня есть списки разных размеров, которые я также хочу импортировать в свой Tensorflow Estimator.Эти списки также должны быть закодированы k-hot, я не уверен, что люди так его называют:
[1,4,6] ---> [0, 1, 0, 0, 1, 0, 1]
Проблема возникает из-за того, что максимальное число в столбце col3 равно 600_000, поэтому мой кодированный вектор k-hot будетимеют размер 600_000, поэтому я не могу закодировать весь мой фрейм данных (из-за MemoryError) и передать col3 в Tensorflow как
tf.feature_column.numeric_column('col3', 600_000)
У вас есть какие-либо идеи, как я могу кормить этот столбец в моемDNNRegressor?Чтобы поделиться некоторым кодом, я обычно делаю это для «стандартных» столбцов:
# reading the columns from the pandas_input_fn
col1 = tf.feature_column.numeric_column('col1', default_value=0.0)
col2 = tf.feature_column.numeric_column('col2', default_value=0.0)
# converting them to categorical
col1_b = tf.feature_column.bucketized_column(col1, [0,5,10,20])
col1_2 = tf.feature_column.bucketized_column(col2, [0,4,8,16])
# make crosses
cross = tf.feature_column.crossed_colum([col1_b, col2_b], 4*4)
# define what will go in my estimator
features = [
tf.feature_column.embedding_column(cross, 10)
tf.feature_column.indicator_column(col1_b)
tf.feature_column.indicator_cilumn(col2_b)
]
# and finally
estimator = tf.estimator.DNNRegressor(
model_dir=model_dir,
feature_columns=features,
hidden_units=[512,256,256,128,32])