4

我正在使用 CNN 的入门示例Tensorflow并将参数更新为我自己的数据,但由于我的模型很大(244 * 244 个特征),我得到了OutOfMemory错误。

我在 Ubuntu 14.04 上进行培训,配备 4 个 CPU 和 16Go 的 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])
4

1 回答 1

4

有没有办法缩小我的数据,这样我就不会收到这个 OOM 错误?

您可以对数据进行切片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]
于 2018-01-12T15:03:17.370 回答