【问题标题】:Questions regarding to a simple autoencoder implementation关于简单自动编码器实现的问题
【发布时间】:2020-06-05 21:04:03
【问题描述】:

我创建了以下简单的自动编码器,用作数据的降维。输入data 包含10K 个integer 值样本,其中类为01

import numpy as np
import pandas as pd
from keras import Model, Input
from keras.layers import Dense
from sklearn.model_selection import train_test_split


def construct_network(X_train):
    input_dim = X_train.shape[1]
    neurons = 64
    input_layer = Input(shape=(input_dim,))
    encoded1 = Dense(neurons, activation='relu')(input_layer)
    encoded = Dense(int(neurons / 2), activation='relu')(encoded1)
    decoded1 = Dense(neurons, activation='relu')(encoded)
    output_layer = Dense(input_dim, activation='linear')(decoded1)

    autoencoder = Model(inputs=input_layer, outputs=output_layer)
    return autoencoder

data, labels = read_data('/Users/A/datasets/data.csv')
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2)
autoencoder = construct_network(X_train)
autoencoder.compile(optimizer='adam', loss='mse', metrics=['acc'])
history = autoencoder.fit(X_train, X_train,
                          epochs=100,
                          batch_size=64,
                          validation_split=0.2,
                          use_multiprocessing=True)
y_pred = autoencoder.predict(X_test, use_multiprocessing=True)
mse_per_sample = np.mean(np.power(X_test - y_pred, 2), axis=1)
error = pd.DataFrame({'error': mse_per_sample, 'true_label': y_test})
print(error)

我有两个问题:

  1. 选择loss='mse' 适合这个问题吗?
  2. 如何计算最后一行error = pd.DataFrame({'error': mse_per_sample, 'true_label': y_test})mse_per_sampley_test 之间的校正预测值的百分比@

谢谢

【问题讨论】:

    标签: machine-learning keras deep-learning data-mining autoencoder


    【解决方案1】:

    我将从第二个问题开始,并用它来解释第一个问题。 自动编码器尝试获取输入值的张量,降低它们的维数,然后用它留下的信息再次逼近输入。由于它试图逼近定量目标而不是定性标签,因此它需要回归这些值。

    这意味着我们不能简单地将事物分组到“正确”和“不正确”的桶中,而是我们可以看到我们的值与目标值的匹配程度。如果我们只有“正确”和“错误”,我们就不会知道我们有多接近正确——因为22 目标21.9631.236 一样错误。此外,您的回归值很少会落在正确值的前面,因此您没有很好地捕捉模型的性能。

    那么如果没有简单的对错,我们如何衡量模型的性能呢?我们查看预测值和实际值之间的距离,并使用它来计算测量的误差。取误差的平均值为我们提供了第一个指标 - 平均绝对误差 (MAE)。这是一个 L1 测量,但它通常很不稳定,所以我们想要一个更平滑的测量。通过对值进行平方,我们得到 均方误差 (MSE),它的行为更具可预测性,并且是标准回归损失函数。 (荣幸地提到 Mean Squared log Error(MSLE 或 MSLogE),它对错误的日志进行平方。)

    MSE 是您的首选,但需要高斯分布。 MSLogE 是相同的,但更好地处理大目标值,MAE 可以处理半高斯分布。话虽如此,如果您正在对输入进行标准化或规范化,您通常应该有一个高斯分布。

    如果您必须拥有“准确度”统计信息,请确定可接受的错误级别,并在您的数据框中为高于和低于该阈值的值创建一个过滤器掩码。然后就是简单地计算低于阈值的值的数量与总值的数量。

    【讨论】:

      猜你喜欢
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多