为什么我的 h2o 自动编码器有这么多输入节点?

Why does my h2o auto-encoder have so many input nodes?

我正在尝试使用 h2o 在 R 中训练自动编码器模型以检测数据集中的异常:

这是我的代码:

df <- read.csv(file=inputFile) # extract dataframe

feature_names <- names(df)

train_df <- df # Use whole dataset for training for this example

# -- Now train auto-encoder model --
library(h2o)
localH2O = h2o.init()
h2o.removeAll() # Close clusters that were already running

train_h2o <- as.h2o(train_df) # Put data in h2o dataframe

# Create deep learning model
result_model = h2o.deeplearning(x = feature_names, training_frame = train_h2o,
                               autoencoder = TRUE,
                               hidden = c(6,5,6),
                               epochs = 50)

然后模型训练成功后,我输入result_model得到:

  layer units      type dropout       l1       l2 mean_rate rate_rms momentum
1     1   798     Input  0.00 %       NA       NA        NA       NA       NA
2     2     6 Rectifier  0.00 % 0.000000 0.000000  0.018308 0.110107 0.000000
3     3     5 Rectifier  0.00 % 0.000000 0.000000  0.002325 0.001377 0.000000
4     4     6 Rectifier  0.00 % 0.000000 0.000000  0.001975 0.001191 0.000000
5     5   798 Rectifier      NA 0.000000 0.000000  0.010888 0.064831 0.000000

层单位是: 798, 6, 5, 6, 798,尽管它应该有 7 个输入节点。

有人可以帮忙吗?将不胜感激。

DNN 中的第一层是输入层 -- 即您在训练集中拥有的变量(或编码变量)的数量。

总结以上评论,您的训练框架正在针对您拥有的任何分类列进行扩展(默认情况下,单热编码)。鉴于您的数据集的屏幕截图,您似乎几乎拥有所有分类列(并且它们的类别总数必须约为 798)。所以你看到的是合理的。由于它是一个自动编码器,输出层与输入层的大小相同,这就是为什么最后一层也是 798 个单位。