Tensorflow:如何为固定估算器定义单热特征列

时间:2017-12-14 01:44:33

标签: tensorflow

我的单热编码似乎在训练期间错误地具有3个维度(我认为它应该有2个),这会导致OOM。我如何错误地构建单热功能列?

当我开始训练神经网络时,我得到了这个错误:

  

在分配形状的张量时的OOM [114171,829,829]

     

[[节点:   DNN / input_from_feature_columns / input_layer / air_store_id_indicator / one_hot   = OneHot [T = DT_FLOAT,TI = DT_INT64,axis = -1,_device =" / job:localhost / replica:0 / task:0 / gpu:0"](dnn / input_from_feature_columns / input_layer / air_store_id_indicator / SparseToDense / _149,   DNN / input_from_feature_columns / input_layer / air_store_id_indicator / one_hot /深度,   DNN / input_from_feature_columns / input_layer / air_store_id_indicator / one_hot / on_value,   DNN / input_from_feature_columns / input_layer / air_store_id_indicator / one_hot / off_value)]]

我尝试定义一个在我的DNNRegressor中使用的单热功能列,如下所示:

tf.feature_column.indicator_column(
    tf.feature_column.categorical_column_with_identity(key='id', num_buckets=df_train['id'].unique().size))

在我的input_fn DNNRegressor::fit()中,我填充了这样的热门编码:

labels, uniques = pd.factorize(df_train['id'])
returned_feature_columns[k] = tf.one_hot(labels, uniques.size, 1, 0)

当我打印那个单热编码时,它的尺寸看起来是正确的,因为我有114171个训练样例和829个唯一ID:

Tensor("one_hot:0", shape=(114171, 829), dtype=int32)

1 个答案:

答案 0 :(得分:1)

定义的张量消耗大量内存。 SELECT A.ID,A.NAME,B.AGE FROM A JOIN B ON A.ID = B.ID 协议缓冲区有2GB的限制。您应该用较小的批次训练您的模型。有一个很好的更高级别的Estimator API可以为tf.GraphDef数据框构建input_fn

pandas

有关详细信息,请参阅文档here