Tensorflow数据集重复和模型精度

Tensorflow数据集重复和模型精度,tensorflow,tensorflow-datasets,Tensorflow,Tensorflow Datasets,我有一个我正在尝试训练的数据集。我想从每个批次的整个数据集中随机选取行。我不想一次又一次地重复同一批货 我遇到的问题是,每次运行代码时,精度都会从低开始,然后逐渐提高。我认为这是因为它是在每次跑步时进行单批次训练。如果是在完整数据集上进行训练,则不会在每次运行程序时重置精度。我可能错了。可能是我的模型没有保存,但我确实保存/恢复了它 运行1 运行2 运行3 代码 dataset=tf.data.TFRecordDataset(输入\tfrecords) dataset=dataset.map(解

我有一个我正在尝试训练的数据集。我想从每个批次的整个数据集中随机选取行。我不想一次又一次地重复同一批货

我遇到的问题是,每次运行代码时,精度都会从低开始,然后逐渐提高。我认为这是因为它是在每次跑步时进行单批次训练。如果是在完整数据集上进行训练,则不会在每次运行程序时重置精度。我可能错了。可能是我的模型没有保存,但我确实保存/恢复了它

运行1

运行2

运行3

代码

dataset=tf.data.TFRecordDataset(输入\tfrecords)
dataset=dataset.map(解析)
dataset=dataset.shuffle(缓冲区大小=100)
dataset=dataset.batch(批次大小)
dataset=dataset.repeat()
iterator=dataset.make_initializable_iterator()
下一个元素=迭代器。获取下一个元素()
saver.restore(会话、型号\位置)
当步骤<培训\u iters:
功能,一个热标签=session.run(下一个元素)
_,acc,loss,logits=session.run([optimizer,accurity,cost,pred],feed\u dict={x:features,y:one\u hot\u labels})
损失总额+=损失
acc_总计+=acc
如果(步骤+1)%display\u step==0:
saver.save(会话、型号\位置)
打印(“Iter=“+str(步骤+1)+”,平均损耗=“+\
“{.6f}.”格式(总损失/显示步长)+”,平均精度=“+\
“{.2f}%.”格式(100*acc_总计/显示步骤))
acc_总计=0
总损失=0
步骤+=1

我认为你所描述的没有任何问题。随着网络的学习,其准确性自然会提高。您的代码看起来也能在运行之间正确地保存和恢复网络。第三次运行可能是过度拟合,或者您的学习率可能太高,从而导致模型发散或振荡。不确定您是否正在使用learning rate annealment?此外,为了清楚起见,我通常也会恢复训练迭代次数。

数据集中有多少个元素?如果它比<代码> BuffelyStase参数大到 DataSet(Suffle)(),训练可能会超过训练示例的特定顺序,因此考虑增加缓冲区大小。
Iter= 2000, Average Loss= 0.105903, Average Accuracy= 79.21%
Iter= 4000, Average Loss= 0.090152, Average Accuracy= 73.22%
Iter= 6000, Average Loss= 0.100107, Average Accuracy= 85.10%
Iter= 8000, Average Loss= 0.106910, Average Accuracy= 95.63%
Iter= 2000, Average Loss= 0.105059, Average Accuracy= 81.15%
Iter= 4000, Average Loss= 0.105170, Average Accuracy= 92.25%
Iter= 6000, Average Loss= 0.106881, Average Accuracy= 95.68%
Iter= 2000, Average Loss= 0.102585, Average Accuracy= 79.52%
Iter= 4000, Average Loss= 0.079520, Average Accuracy= 75.09%
Iter= 6000, Average Loss= 0.077820, Average Accuracy= 73.63%
dataset = tf.data.TFRecordDataset(input_tfrecords)
dataset = dataset.map(parse)
dataset = dataset.shuffle(buffer_size=100)
dataset = dataset.batch(batch_size)
dataset = dataset.repeat()
iterator = dataset.make_initializable_iterator()
next_element = iterator.get_next()

saver.restore(session, model_location)

while step < training_iters:
    features, one_hot_labels = session.run(next_element)
    _, acc, loss, logits = session.run([optimizer, accuracy, cost, pred], feed_dict={x: features, y: one_hot_labels})

    loss_total += loss
    acc_total += acc
    if (step+1) % display_step == 0:
        saver.save(session, model_location)
        print("Iter= " + str(step+1) + ", Average Loss= " + \
              "{:.6f}".format(loss_total/display_step) + ", Average Accuracy= " + \
              "{:.2f}%".format(100*acc_total/display_step))
        acc_total = 0
        loss_total = 0
    step += 1