Python 列车的Tensorflow CNN回归MSE高于试验
我正在给CNN提供图片,以预测回归设置中的值Python 列车的Tensorflow CNN回归MSE高于试验,python,tensorflow,machine-learning,deep-learning,regression,Python,Tensorflow,Machine Learning,Deep Learning,Regression,我正在给CNN提供图片,以预测回归设置中的值 Input: [NUM_EXAMPLES, HEIGHT, WIDTH, CHANNELS] -> [NUM_EXAMPLES, YPRED] 这就是损失:loss=tf.reduce\u mean(tf.squared\u差(Ypreds,label)) 培训循环: Loop { for i in range(EPOCHS): epoch_train_loss = 0 for k in range
Input: [NUM_EXAMPLES, HEIGHT, WIDTH, CHANNELS] -> [NUM_EXAMPLES, YPRED]
这就是损失:loss=tf.reduce\u mean(tf.squared\u差(Ypreds,label))
培训循环:
Loop {
for i in range(EPOCHS):
epoch_train_loss = 0
for k in range(NUM_BATCHES):
_, batch_loss = sess.run([train_step, loss], feed_dict={...})
epoch_train_loss += (batch_loss/NUM_BATCHES)
# calculate test loss after 1 epoch and log
epoch_test_loss = sess.run(loss, feed_dict={...})
# print train and test loss after 1 epoch
print(epoch_train_loss, epoch_test_loss)
}
以下是测井结果:
Epoch: 0 (8.21s), Train-Loss: 12844071, Test-Loss: 3802676
Epoch: 1 (4.94s), Train-Loss: 3691994, Test-Loss: 3562206
Epoch: 2 (4.90s), Train-Loss: 3315438, Test-Loss: 2968338
Epoch: 3 (5.00s), Train-Loss: 1841562, Test-Loss: 417192
Epoch: 4 (4.94s), Train-Loss: 164503, Test-Loss: 3531
Epoch: 5 (4.94s), Train-Loss: 97477, Test-Loss: 1843
Epoch: 6 (4.98s), Train-Loss: 96474, Test-Loss: 4676
Epoch: 7 (4.94s), Train-Loss: 89613, Test-Loss: 1080
- 这对我来说毫无意义,因为列车损失大于测试损失,而且这种情况永远不会发生
- 我计算的数值正确吗?损失按批次大小平均,并将批次损失除以
I应得到可比较的结果NUM_批次
epoch\u列车损失=[]
对于范围内的k(数量批次):
_,批处理丢失=sess.run([train\u step,loss],feed\u dict={…})
历元列车损失。追加(批量损失)
历元列车损失=np.平均值(历元列车损失)
#同时打印'epoch\u train\u loss'和'epoch\u train\u loss'
获得损失的完整分布,而不是单个数字(平均值),可以帮助您详细检查发生了什么
这里有一个可能的解释:训练集和测试集没有被正确地洗牌,因此测试集有效地模仿了训练集的一部分(甚至可以是训练集的一部分)。在这种情况下,培训损失在批次间的分布将具有非常高的方差:有些损失将与报告的测试损失相当,有些损失将高得多,从而使平均值上升。对数据进行洗牌后,多次运行是否具有相同的趋势?我在这里上传了模型:(之前的模型是错误的,抱歉)。目前已实施您的解决方案并在单元[13]中运行。你们可以看到这种奇怪的行为,好像列车丢失和测试丢失被翻转了。这可能与您提到的洗牌或
initialize_数据集(…)
fn有关。我在这里迷路了,再次感谢你看了这个!:)@ivan请减少迭代次数并打印整个epoch\u train\u loss
列表。我已在上述链接的单元格[19]中完成了此操作。分布似乎很好,嗯。同意,它看起来是一致的。您能否进一步输出trany
和testY
更新的分布。细胞[8],[10]。通过train\u test\u split(…)
(来自sklearn.model\u selection.train\u test\u split
)。此外,通过此调用再次在initialize_datasets(…)
中洗牌数据集dataset_train=dataset_train.apply(tf.contrib.data.shuffle_和_repeat(…)
,或者至少按原样洗牌。