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
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)
sd(as.numeric(pred) - Y_test) / sd(Y_test)
##
[1] 0.8261666
另外还有几个例子包含在包装Vignette
R与Keras Deep Learning Library中。
评论
发表评论