# 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 作为 feed_dict 到 train_step . 您可以为所有批次(即整个数据集)累积 cross_entropy . 然后,您可以运行 train_step 一次 . 例如:
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})
1 回答
这主要取决于您的GPU内存大小 . 但是,很难将整个数据集与模型及其所需的操作(即预测概率)相匹配 . 因此,您需要考虑以不同的角度进行批处理 . 我假设你的代码遵循这些方针:
而不是使用
X
和y
作为feed_dict
到train_step
. 您可以为所有批次(即整个数据集)累积cross_entropy
. 然后,您可以运行train_step
一次 . 例如:这应该可以实现您的目标,而无需运行GPU内存 . 建议的方法针对所有交叉熵运行优化步骤 . 因此,您不需要提供X和y(生成
cross_entropy
所使用/需要的,因为它已经被提供给优化步骤) .