我正在学习Udacity深度学习课程,其作业说:“展示过度拟合的极端情况 . 将训练数据限制在几个批次 . ”
我的问题是:
1)为什么 reducing num_steps, num_batches
与过度拟合有关?我们不是添加任何变量也不是增加W的大小 .
在下面的代码中,num_steps曾经是3001,num_batches是128,解决方案只是将它们分别减少到101和3 .
num_steps = 101
num_bacthes = 3
with tf.Session(graph=graph) as session:
tf.initialize_all_variables().run()
print("Initialized")
for step in range(num_steps):
# Pick an offset within the training data, which has been randomized.
# Note: we could use better randomization across epochs.
#offset = (step * batch_size) % (train_labels.shape[0] - batch_size)
offset = step % num_bacthes
# Generate a minibatch.
batch_data = train_dataset[offset:(offset + batch_size), :]
batch_labels = train_labels[offset:(offset + batch_size), :]
# Prepare a dictionary telling the session where to feed the minibatch.
# The key of the dictionary is the placeholder node of the graph to be fed,
# and the value is the numpy array to feed to it.
feed_dict = {tf_train_dataset : batch_data, tf_train_labels : batch_labels, beta_regul : 1e-3}
_, l, predictions = session.run(
[optimizer, loss, train_prediction], feed_dict=feed_dict)
if (step % 2 == 0):
print("Minibatch loss at step %d: %f" % (step, l))
print("Minibatch accuracy: %.1f%%" % accuracy(predictions, batch_labels))
print("Validation accuracy: %.1f%%" % accuracy(
valid_prediction.eval(), valid_labels))
print("Test accuracy: %.1f%%" % accuracy(test_prediction.eval(), test_labels))
此代码摘自解决方案:https://github.com/rndbrtrnd/udacity-deep-learning/blob/master/3_regularization.ipynb
2)有人可以解释梯度下降中“偏移”的概念吗?我们为什么要使用它?
3)我已经尝试过num_steps并发现如果我增加num_steps,准确度就会提高 . 为什么?我应该如何解释num_step与学习率?
1 回答
1)当您训练神经网络以防止过度拟合时,设置早期停止条件是非常典型的 . 你没有添加新的变量,但是使用早期停止条件你无法集中和严重地使用它们,更不等同 .
2)在这种情况下,“偏移”是未在小批量中使用的剩余观察值(其余部分)
3)将“学习速率”视为“速度”,将“num_steps”视为“时间” . 如果你跑得更久,你可能会进一步开车......但也许如果你开得更快也许你可能会崩溃而不是更进一步......