python - 将 >2GB 数据传递给 tf.estimator
问题描述
我有x_train
numpyy_train
数组,每个数组 >2GB。我想使用 tf.estimator API 训练模型,但出现错误:
ValueError: Cannot create a tensor proto whose content is larger than 2GB
我正在使用以下方式传递数据:
def input_fn(features, labels=None, batch_size=None,
shuffle=False, repeats=False):
if labels is not None:
inputs = (features, labels)
else:
inputs = features
dataset = tf.data.Dataset.from_tensor_slices(inputs)
if shuffle:
dataset = dataset.shuffle(shuffle)
if batch_size:
dataset = dataset.batch(batch_size)
if repeats:
# if False, evaluate after each epoch
dataset = dataset.repeat(repeats)
return dataset
train_spec = tf.estimator.TrainSpec(
lambda : input_fn(x_train, y_train,
batch_size=BATCH_SIZE, shuffle=50),
max_steps=EPOCHS
)
eval_spec = tf.estimator.EvalSpec(lambda : input_fn(x_dev, y_dev))
tf.estimator.train_and_evaluate(model, train_spec, eval_spec)
tf.data 文档提到了这个错误,并提供了使用带有占位符的传统 TenforFlow API 的解决方案。不幸的是,我不知道如何将其转换为 tf.estimator API?
解决方案
对我有用的解决方案是使用
tf.estimator.inputs.numpy_input_fn(x_train, y_train, num_epochs=EPOCHS,
batch_size=BATCH_SIZE, shuffle=True)
而不是input_fn
. 唯一的问题是会tf.estimator.inputs.numpy_input_fn
引发弃用警告,所以不幸的是这也将停止工作。
推荐阅读
- asp.net-mvc - Application Insights Cookie - 覆盖值
- javascript - 如何根据使用数组传入 Kendo Grid 的 Id 在 MVC 应用程序中返回数据?
- terminal - `tput cols`、`tput lines`和`stty size`之间有什么区别?
- linux - hw_ptr 和 app_ptr 未在 alsa 驱动程序中更新
- matlab - 如何去除 MatLab 中绘制区域之间的分界线?
- unreal-engine4 - 如何调试虚幻引擎源代码
- php - phpspreadsheet 中的 3D 范围参考
- xpath - 在 datePickerDay 中选择一个随机日期而不是特定日期
- javascript - getColumnCount() 和 getPhysicalNumberOfCells 方法没有在我的 selenium WebDriver 中调用
- javascript - 为什么赛普拉斯不打开模态页面?