【问题标题】:How to speedup loss calculation, which is done one by one如何加快损失计算,这是一一做的
【发布时间】:2020-01-29 22:22:32
【问题描述】:

我正在构建一个自动编码器,并验证模型的进度 - 对于验证集中的每个条目,我在每个纪元之后计算 MSE 和 MAE:

for validation_sample in x_pred:
   prediction = autoencoder.predict(validation_sample)
   current_validation_mae.append(keras.backend.eval(keras.losses.mean_absolute_error(validation_sample, prediction)))
   current_validation_mse.append(keras.backend.eval(keras.losses.mean_squared_error(validation_sample, prediction)))

之后,我将该数组除以验证中的 num 个样本,从而得到真正的 MAE/MSE。

我的数据是基因表达数据。 1 个样本有 17000 个特征,每个特征有 1 个数据点。总共 5000 个样本。

使用 10 个样本验证时的性能(在超级计算机上):

预测创建时间:0.019748687744140625 秒。

MAE 耗时:1.1507933139801025 秒。

MSE 耗时:1.1251187324523926 秒。

有什么可以改进的?

【问题讨论】:

  • 你为什么要一个接一个地做,而不是一次做整个批次?
  • 当我将整个 x_pred 放入 autoencoder.predict(x_pred) 时 - 即使有很多样本,它也会输出 1 个样本。这就是为什么我想我需要一个一个地做。

标签: python performance keras autoencoder mse


【解决方案1】:

原来 .preedit() 确实返回了与输入相同的形状,所以没有必要循环它:

        predictions = autoencoder.predict(x_pred)
        current_validation_mae = np.mean(keras.backend.eval(keras.losses.mean_absolute_error(x_pred, predictions)))
        current_validation_mse = np.mean(keras.backend.eval(keras.losses.mean_squared_error(x_pred, predictions)))

Loss 也是针对整个批次计算的。

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    相关资源
    最近更新 更多