使用R的NeuralNetTools库绘制H2O深度神经网络的网络结构

时间:2018-07-19 22:58:00

标签: r ggplot2 h2o

我希望能够使用R的NeuralNetTools工具库来绘制水深神经网络的网络布局。下面是一个示例代码,该代码从神经网络包中绘制了模型的网络布局。

library(NeuralNetTools)
library(neuralnet)
data(neuraldat)
wts_in <- neuralnet(Y1 ~ X1 + X2 + X3, data = neuraldat, hidden = c(4), 
rep=1)
plotnet(wts_in)

我想做同样的事情,但是使用H2o深度神经模型。该代码显示了如何仅通过了解层数和权重结构来生成布局。

library(NeuralNetTools)
# B1-H11, I1-H11, I2-H11, B1-H12, I1-H12, I2-H12, B2-H21, H11-H21, H12-H21, 
# B2-H22, H11-H22, H12-H22, B3-O1, H21-O1, H22-O1 
wts_in <- c(1.12, 1.49, 0.16, -0.11, -0.19, -0.16, 0.5, 0.2, -0.12, -0.1, 
        0.89, 0.9, 0.56, -0.52, 0.81)
struct <- c(2, 2, 2, 1) # two inputs, two (two nodes each), one output
x_names<-c("No","Yes") #Input Variable Names
y_names<-c("maybe") #Output Variable Names
plotnet(wts_in, struct=struct)

下面是上面的神经网络模型,但我使用了H2o生成它。我对如何获取层数感到困惑。

library(h2o)
h2o.init()
neuraldat.hex <- as.h2o(neuraldat)
h2o_neural_model<-h2o.deeplearning(x = 1:4, y = 5,
             training_frame= neuraldat.hex, 
             hidden=c(2,3),
             epochs = 10, 
             model_id = NULL)

 h2o_neural_model@model

我可以使用权重#h2o.weights(object,matrix_id = 1)和偏差函数#h2o.biases(object,vector_id = 1)来构建结构,但是我需要它来确定数字层。我知道我可以在模型中指定层数,但有时我会编写代码来确定进入模型的层数,因此我需要一个函数来确定网络结构的层数和plotnet()的权重功能如下。

  plotnet(wts_in, struct=struct)

或者,如果我有一个ggplot2函数而不是plotnet()函数,那将是很好的选择。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我知道已经过去了8个月,很可能您已经知道了。但是,我会将解决方案发布给遇到相同问题的人员。

这里的重要性在于 h2o.deeplearning()的参数 export_weights_and_biases ;以及 h2o.weigths(neuralnet) h2o.biases(neuralnet)函数,它们提供了您要查找的参数。

剩下的就是对数据进行排序。

# Load your data
neuraldat.hex <- as.h2o(neuraldat)

h2o_neural_model <- h2o.deeplearning(x = 1:4, y = 5,
         training_frame= neuraldat.hex, 
         hidden = c(2,3),
         epochs = 10, 
         model_id = NULL,
         export_weights_and_biases = T) # notice this parameter!

# for each layer, starting from left hidden layer,
# append bias and weigths of each node in layer to
# numeric vector.
wts <- c()
for (l in 1:(length(dl1@allparameters$hidden)+1)){
    wts_in <- h2o.weights(h2o_neural_model, l)
    biases <- as.vector(h2o.biases(h2o_neural_model, l))
    for (i in 1:nrow(wts_in)){
        wts <- c(wts, biases[i], as.vector(wts_in[i,]))
    }
}
# generate struct from column 'units' in model_summary
struct <- h2o_neural_model@model$model_summary$units
# plot it
plotnet(wts, struct = struct)

深度学习功能返回的h2o对象非常复杂,可能会在documentation中丢失。