我发现,在这个program中,与数据集配对的TF Estimator使用了不合理的大量内存(大约1 GB)并且需要几十分钟,尽管批量大小只有10并且迭代次数是100。 模型初始化的代码:
classifier = tf.estimator.LinearClassifier (
feature_columns=construct_feature_columns(),
n_classes=10,
optimizer=my_optimizer,
config=tf.estimator.RunConfig(keep_checkpoint_max=1)
)
调用适合程序:
classifier.train(
input_fn=training_input_fn,
steps=steps_per_period
)
该程序使用Logistic回归对10k示例MNIST数据集(内存中约60 MB)进行分类,而同一过程仅使用sklearn的LogisticRegression只需几秒钟和一点内存。任何人都可以就主要内存消费者在这里或者我如何追踪内存使用情况提供建议吗?
UPD。我进行了另一项实验,使用占位符和数据集类将进料数据与模型进行比较。我实现了自定义逻辑回归(与Estimator中的回归相反),并发现使用数据集提供数据:
ds = Dataset.from_tensor_slices((train_x, train_y))
ds = ds.batch(10).repeat(num_epochs)
ds = ds.shuffle(buffer_size=10000)
x,y = ds.make_one_shot_iterator().get_next()
...
sess.run(my_optimiser)
在培训期间,与占位符一起消耗至少5倍的内存:
x = tf.placeholder(tf.float32, (None,784), 'pixels')
y = tf.placeholder(tf.float32, (None), 'targets')
...
sess.run(my_optimiser, feed_dict={x:train_x, y:train_y})