我正在使用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])
答案 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]