Tensorflow:tf.estimator不适用于大型CSV训练文件(约7GB)

时间:2018-08-17 21:27:34

标签: python csv tensorflow machine-learning deep-learning

我正在尝试针对二元分类问题训练固定估计器tf.estimator.DNNClassifier

def input_fn_train(features, labels, batch_size):
    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
    dataset = dataset.shuffle(1000).repeat().batch(batch_size)
    return dataset

hidden_units=[1024, 512, 256]     
estimator = tf.estimator.DNNClassifier(
    feature_columns=my_feature_columns,
    hidden_units=hidden_units,
    model_dir=model_dir,
    optimizer=tf.train.ProximalAdagradOptimizer(
              learning_rate=0.01,
              l1_regularization_strength=0.001))

estimator.train(input_fn=lambda:input_fn_train(train_x, train_y, batch_size), steps=train_steps)

但是,当我尝试运行estimator.train时,出现以下错误

[libprotobuf FATAL T:\src\github\tensorflow\cmake_build\protobuf\src\protobuf\src\google\protobuf\message_lite.cc:68] CHECK failed: (byte_size_before_serialization) == (byte_size_after_serialization): tensorflow.GraphDef was modified concurrently during serialization.

我非常确定这与存储在变量train_x中的CSV训练文件的大小有关,因为我在较小的训练CSV文件(〜500 MB)中尝试了相同的代码,并且效果很好。

我的CSV培训文件有801列(包括标签0或1),这800个要素是介于0和1(浮点数)之间的数值。训练文件具有超过一百万个实例(801 x 1172480),

此外,重要的是要提到train_x(包含7GB CSV数据的变量)已成功填充内存中的7GB数据。此外,我对内存溢出没有任何问题(我的计算机具有128 GB的内存RAM),因此剩下的唯一一件事是Tensorflow [不幸的是]无法处理该大小的CSV训练文件。

我计划将训练集分成不同的文件,并使用检查点功能对这些文件进行训练,但是我不确定这是否是最佳解决方案,任何建议都将得到赞赏

0 个答案:

没有答案