Python tensorflow-在大批量上运行optimizer op

Python tensorflow-在大批量上运行optimizer op,python,memory,tensorflow,Python,Memory,Tensorflow,通常,我们以优化器操作作为输入调用run命令,以更新某些模型的可训练参数: session.run(model.optimizer_op, feed_dict={model.X: X_batch, model.y: y_batch}) 但当批处理大小较大时,X_批处理无法放入GPU内存。 如何拆分此任务以处理较大的批处理大小?这主要取决于您的GPU内存大小。但是,很难将整个数据集与模型及其所需操作(即预测概率)一起拟合。因此,您需要从不同的角度考虑批处理。我假设你的代码是这样的: # Mode

通常,我们以优化器操作作为输入调用run命令,以更新某些模型的可训练参数:

session.run(model.optimizer_op, feed_dict={model.X: X_batch, model.y: y_batch})
但当批处理大小较大时,X_批处理无法放入GPU内存。
如何拆分此任务以处理较大的批处理大小?

这主要取决于您的GPU内存大小。但是,很难将整个数据集与模型及其所需操作(即预测概率)一起拟合。因此,您需要从不同的角度考虑批处理。我假设你的代码是这样的:

# Model Definition    
X = tf.placeholder(tf.float32, shape=[None, DIM,DIM,3], name='X')
y = tf.placeholder(tf.float32, shape=[None, N_CLASSES], name='y')

...

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

...

# Training your model
sess.run([train_step], feed_dict={X: X_batch, y: y_batch})
而不是使用
X
y
作为
输入到
训练步骤
。您可以为所有批次(即整个数据集)累积
交叉熵。然后,您可以运行一次
训练步骤。例如:

cross_entropy_all = []
for X_batch, y_batch in batches_generator():
    cross_entropy_all += sess.run([cross_entropy], feed_dict={X: X_batch, y: y_batch})

# Numpy or Tensorflow equivalent for `vstack`
cross_entropy_all = np.vstack(cross_entropy_all)

# Run the optimizer on the entire dataset (not just on a specific batch)
sess.run([train_step], feed_dict={cross_entropy: cross_entropy_all})
这应该可以在不耗尽内存的情况下实现您的目标。建议的方法针对所有交叉熵运行优化步骤。因此,您不需要输入X和y(它们用于/需要产生
交叉熵
,因为它已经输入到优化步骤)