我的单热编码似乎在训练期间错误地具有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)
答案 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。