2017-03-02 70 views
0

正常运行优化运算,我们称之为运行命令与优化操作输入更新一些模型的可训练参数:tensorflow - 在大批量

session.run(model.optimizer_op, feed_dict={model.X: X_batch, model.y: y_batch}) 

但当批量大,X_batch不能适应GPU内存。 我怎样才能分割这个任务来处理大批量?

回答

0

这主要取决于您的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}) 

而不是使用Xy为您feed_dicttrain_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,因为它已经送入优化步骤)。