0
正常運行優化運算,我們稱之爲運行命令與優化操作輸入更新一些模型的可訓練參數:tensorflow - 在大批量
session.run(model.optimizer_op, feed_dict={model.X: X_batch, model.y: y_batch})
但當批量大,X_batch不能適應GPU內存。 我怎樣才能分割這個任務來處理大批量?
正常運行優化運算,我們稱之爲運行命令與優化操作輸入更新一些模型的可訓練參數:tensorflow - 在大批量
session.run(model.optimizer_op, feed_dict={model.X: X_batch, model.y: y_batch})
但當批量大,X_batch不能適應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
爲您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})
這應該實現自己的目標,而無需運行你的GPU內存不足。建議的方法針對所有交叉熵運行優化步驟。因此,您不需要輸入X和y(用於生產cross_entropy
,因爲它已經送入優化步驟)。