kerasR包学习

安装

devtools::install_github("statsmaths/kerasR")

例子(波士顿住房数据)

Keras建立一个模型,首先构建一个空的Sequential模型。
library(kerasR)
## successfully loaded keras
mod <- Sequential()
Sequential的结果与kerasR提供的大多数功能一样,是一个python.builtin.object。这种从reticulate包定义的对象类型可以直接访问底层python类暴露的所有方法和属性。要访问这些,需要使用$运算符后跟方法名称,通过调用add方法添加层。此函数作为另一个python.builtin.object的输入,通常构造为另一个kerasR函数的输出。例如,要在我们的模型中添加一个dense 层,我们执行以下操作:
mod$add(Dense(units = 50, input_shape = 13))
我们现在已经添加了一个具有200个神经元的致密层。 第一层必须包含input_shape的规范,给出输入数据的维度。 这里我们设置输入变量的数量等于13.接下来在模型中,我们将添加relu激活到模型中:
mod$add(Activation("relu"))
现在,我们添加一个只有一个神经元的密集层作为输出层:
mod$add(Dense(units = 1))
一旦模型被完全定义,我们必须在拟合它的参数或使用它进行预测之前进行编译。编译模型可以使用方法compile来完成,但是它的一些可选参数在从R类型转换时会引起麻烦,所以我们提供了一个自定义的包装器keras_compile。 至少我们需要指定损失函数和优化器。损失可以用一个字符串来指定,但是我们将把另一个kerasR函数的输出作为优化器传递。 这里我们使用RMSprop优化器,因为它通常具有相当好的性能:
keras_compile(mod, loss = 'mse', optimizer = RMSprop())
现在我们可以从一些训练数据中将模型中的权重进行拟合,但是我们还没有从中训练的任何数据。我们使用load_boston_housing函数加载数据。 我们提供几种数据加载功能作为软件包的一部分,并且以相同的格式返回数据。这个例子中,矩阵进行归一化是有意义。虽然我们可以使用R函数进行归一化,在这里我们使用keras特定的函数进行归一化。 归一化的一个好处是不同纬度的测量可以统一,这是卷积和循环神经网络中的有用特征。
boston <- load_boston_housing()
X_train <- normalize(boston$X_train)
Y_train <- boston$Y_train
X_test <- normalize(boston$X_test)
Y_test <- boston$Y_test
现在,我们使用keras_fit从数据中拟合模型。与编译一样,有一种直接的方法,但是您可能会遇到直接调用它的数据类型转换问题。 相反,直接使用包装函数功能比较容易(如果您自己运行,您将看到Keras为跟踪模型的拟合提供了非常好的详细输出):
keras_fit(mod, X_train, Y_train,batch_size = 32, epochs = 200,verbose = 1, validation_split = 0.1)
请注意,该模型在这里并不特别好,这可能是由于在小数据集上产生了过度拟合。
pred <- keras_predict(mod, X_test)
sd(as.numeric(pred) - Y_test) / sd(Y_test)
## [1] 0.8261666

另外还有几个例子包含在包装Vignette RKeras Deep Learning Library中。

评论

此博客中的热门博文

V2ray websocket(ws)+tls+nginx分流

Rstudio 使用代理