错误:Out of Memory,tensorflow cnn

时间:2018-01-12 14:55:05

标签: python tensorflow tensorflow-estimator

我正在使用Tensorflow CNN的入门示例并将参数更新为我自己的数据,但由于我的模型很大(244 * 244个功能),因此出现OutOfMemory错误。

我在Ubuntu 14.04上运行4个CPU和16个RAM的培训。 有没有办法缩小我的数据,所以我没有得到这个OOM错误?
我的代码如下所示:

# Create the Estimator
  mnist_classifier = tf.estimator.Estimator(
    model_fn=cnn_model_fn, model_dir="path/to/model")

# Load the data
train_input_fn = tf.estimator.inputs.numpy_input_fn(
  x={"x": np.array(training_set.data)},
  y=np.array(training_set.target),
  num_epochs=None,
  batch_size=5,
  shuffle=True)

# Train the model
mnist_classifier.train(
  input_fn=train_input_fn,
  steps=100,
  hooks=[logging_hook])

1 个答案:

答案 0 :(得分:4)

  

有没有办法缩小我的数据,所以我没有得到这个OOM错误?

您可以slice training_set获取数据集的一部分。类似的东西:

x={"x": np.array(training_set.data)[:(len(training_set)/2)]},
y=np.array(training_set.target)[:(len(training_set)/2)],

在此示例中,您将获得数据集的前半部分(您可以选择要加载的数据集的哪个点)。

编辑:另一种方法是获取训练数据集的随机子集。这可以通过屏蔽数据集数组上的元素来实现。例如:

import numpy as np
from random import random as rn

#obtain boolean mask to filter out some elements
#here you can define your sample %
r = 0.5 #say filter half the elements
mask = [True if rn() >= r else False for i in range(len(training_set))]

#finally, mask out those elements, 
#the result will have ~r times the original elements
reduced_ds = training_set[mask]