Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列车的Tensorflow CNN回归MSE高于试验_Python_Tensorflow_Machine Learning_Deep Learning_Regression - Fatal编程技术网

Python 列车的Tensorflow CNN回归MSE高于试验

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

我正在给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(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
  • 这对我来说毫无意义,因为列车损失大于测试损失,而且这种情况永远不会发生

  • 我计算的数值正确吗?损失按批次大小平均,并将批次损失除以
    NUM_批次
    I应得到可比较的结果


您的代码看起来不错,但我会做一些不同的事情:

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(…)
,或者至少按原样洗牌。