TensorFlow 优化器是否最小化 API 实施的小批量?
Does TensorFlow optimizer minimize API implemented mini-batch?
Tensorflow minimize API 例如,当我们为输入张量提供小批量数据时,GradientDescentOptimizer 是否已经实现了小批量?
我在看这个bolg 表明minimize
方法中没有实现minibatch,我们必须先做compute_gradients
然后累积梯度,最后做apply_gradients
完成小批量训练。
def train_standard(opt_type, learning_rate, image_set):
# Arrays for logging accuracy and loss
acc_log = np.zeros(len(image_set))
loss_log = np.zeros(len(image_set))
# Create optimizer
opt = opt_type(learning_rate)
#
# no-minibatch (standard, simple) operation
#
minimize = opt.minimize(loss)
# Create session to execute ops
sess = tf.InteractiveSession()
# Necessary initializations
tf.set_random_seed(1234)
tf.global_variables_initializer().run()
# Train loop
for i, batch in enumerate(image_set):
sess.run(minimize, feed_dict={x: batch[0], y_: batch[1]})
acc_log[i] = sess.run(accuracy,
feed_dict={x: mnist.test.images, y_: mnist.test.labels})
loss_log[i] = sess.run(loss,
feed_dict={x: mnist.test.images, y_: mnist.test.labels})
return acc_log, loss_log
然而,当我做实验时,我发现两种方法产生相似的结果。我想知道如果我们 feed_dict
是一个小批量大小矩阵而不是训练数据的一行,minimize
方法是否会进行小批量更新。
谁能帮我澄清一下这个问题,如果我错了请指正?
此致
这取决于您对小批量学习的定义。一种方法是简单地对一个 minibatch 进行采样,执行权重更新(即计算前向和反向传递),对另一个 minibatch 进行采样,执行另一个权重更新,等等。当你一次只喂一个小批量时,这很容易用 Optimizer.minimize()
完成。据我所知,这是最常用的方法。
你喜欢的 post 旨在做其他事情:计算多个小批量的梯度(即计算前向和后向传递,但不改变权重),然后执行单个权重使用所有累积的梯度进行更新。那当然是不同的,更多的工作要实现(如图post)。
Tensorflow minimize API 例如,当我们为输入张量提供小批量数据时,GradientDescentOptimizer 是否已经实现了小批量?
我在看这个bolg 表明minimize
方法中没有实现minibatch,我们必须先做compute_gradients
然后累积梯度,最后做apply_gradients
完成小批量训练。
def train_standard(opt_type, learning_rate, image_set):
# Arrays for logging accuracy and loss
acc_log = np.zeros(len(image_set))
loss_log = np.zeros(len(image_set))
# Create optimizer
opt = opt_type(learning_rate)
#
# no-minibatch (standard, simple) operation
#
minimize = opt.minimize(loss)
# Create session to execute ops
sess = tf.InteractiveSession()
# Necessary initializations
tf.set_random_seed(1234)
tf.global_variables_initializer().run()
# Train loop
for i, batch in enumerate(image_set):
sess.run(minimize, feed_dict={x: batch[0], y_: batch[1]})
acc_log[i] = sess.run(accuracy,
feed_dict={x: mnist.test.images, y_: mnist.test.labels})
loss_log[i] = sess.run(loss,
feed_dict={x: mnist.test.images, y_: mnist.test.labels})
return acc_log, loss_log
然而,当我做实验时,我发现两种方法产生相似的结果。我想知道如果我们 feed_dict
是一个小批量大小矩阵而不是训练数据的一行,minimize
方法是否会进行小批量更新。
谁能帮我澄清一下这个问题,如果我错了请指正?
此致
这取决于您对小批量学习的定义。一种方法是简单地对一个 minibatch 进行采样,执行权重更新(即计算前向和反向传递),对另一个 minibatch 进行采样,执行另一个权重更新,等等。当你一次只喂一个小批量时,这很容易用 Optimizer.minimize()
完成。据我所知,这是最常用的方法。
你喜欢的 post 旨在做其他事情:计算多个小批量的梯度(即计算前向和后向传递,但不改变权重),然后执行单个权重使用所有累积的梯度进行更新。那当然是不同的,更多的工作要实现(如图post)。