验证损失仅在第一个时期为零

时间:2019-12-02 14:45:02

标签: python tensorflow deep-learning tensorflow-datasets tf.keras

问题

我正在尝试使用数据集和keras API在Tensorflow中构建回归模型。目标包含很多零,尽管所有零都是正数,但非零值大致呈正态分布。

当我尝试在下面创建线性模型时,我注意到在第一个时期,验证损失和两个验证指标都完全为0,尽管训练损耗和指标均不为0。该问题在第一个时期后消失。尽管这并不能阻止我创建模型,但仍然无法解释为什么会发生这种情况以及我可能会怎么做。

到目前为止已经尝试

我未能成功查明问题所在的地方:

  • 交换traintest
  • 较小的批处理大小(32而不是255)
  • 改组test
  • 将致密层的初始化符设置为正常

我的代码

train = tf.data.experimental.make_csv_dataset(...)
test = tf.data.experimental.make_csv_dataset(...) # a smaller csv file

model = Sequential([
    DenseFeatures(features),
    Dense(1, activation='linear') # we are doing a regression
])
model.compile(
    optimizer='adam',
    loss='mean_squared_error',
    metrics=['mean_squared_error', 'mean_absolute_error']
)
model.fit(train,
          epochs=2, 
          validation_data=test
)

1 个答案:

答案 0 :(得分:0)

这是完全正常的,因为正常指标和验证指标是在不同的时间计算的。

名义指标是在新纪元期间进行计算的,因此您可以查看损失分数和来自训练的其他值。

验证指标用于查看在某个时期内计算得出的参数是否良好。这意味着在特定时期(您可以指定百分比)中使用的一些训练数据不会用于训练,但会被用于计算网络准确性。因此,当您具有特定的参数配置时,这些值将在结束时进行计算。