3.3.2 模型训练可视化

RStudio提供了在Keras模型训练时的评估指标实时可视化,当训练模型时,可以在RStudio右下角的view窗口查看评估指标的实时变化曲线。具体实现代码如下,结果如图3-13所示。

library(keras)
library(caret)
# 数据预处理
X <- as.matrix(iris[,1:4])
X_scale <- scale(X)
dmy <- dummyVars(~Species,data = iris,levelsOnly = TRUE)
y <- as.matrix(data.frame(predict(dmy,newdata = iris)))
# 定义、编译及训练模型
model <- keras_model_sequential()
model %>%
    layer_dense(units = 4,activation = 'relu',input_shape = c(4)) %>%
    layer_dense(units = 6,activation = 'relu') %>%
    layer_dense(units = 3,activation = 'softmax')
model %>% compile(
    loss = 'categorical_crossentropy',
    optimizer = 'adam',
    metrics = c('accuracy')
)
history <- model %>% fit(
    x = X_scale,
    y = y,
    batch_size = 16,
    epochs = 100,
    validation_split = 0.1,
    verbose = 2
  )
078-2

图3-13 RStudio IDE实时查看评估指标

Keras的fit()函数返回一个对象,该对象包含训练历史记录。可以通过plot()函数绘制每个训练周期的评估指标,如图3-14所示。

plot(history)
079-1

图3-14 绘制每个训练周期的评估指标

图3-14的上部分绘制的是训练和验证数据的计算损失,下部分绘制的是训练和验证数据的准确率。乍一看,这个图有点混乱,接下来我们将拆分这个图,然后分别绘制两个图:一个用于模型损失,另一个用于模型准确率。运行以下程序代码,结果如图3-15所示。

> par(mfrow=c(1,2))
> # 绘制模型计算损失
> # 绘制训练数据的计算损失
> plot(history$metrics$loss, main="Model Loss", xlab = "epoch",
+      ylab="loss", col="purple", type="l",lty=1,lwd=2)
> # 绘制验证数据的计算损失
> lines(history$metrics$val_loss, col="seagreen",lty=2,lwd=2)
> # 增加图例
> legend("topright", c("train","test"), col=c("purple", "seagreen"),
+        lty=c(1,2),lwd=c(2,2))
> # 绘制模型准确率
> # 绘制训练数据的准确率
> plot(history$metrics$accuracy, main="Model Accuracy", xlab = "epoch",
+      ylab="loss", col="violetred", type="l",lty=1,lwd=2)
> # 绘制验证数据的准确率
> lines(history$metrics$val_accuracy, col="steelblue1",lty=2,lwd=2)
> # 增加图例
> legend("bottomright", c("train","test"), col=c("violetred", "steelblue1"),
+        lty=c(1,2),lwd=c(2,2))
> par(mfrow=c(1,1))
080-1

图3-15 自定义可视化

在图3-15中,损失和准确率各用一个图单独绘制,并且使用实线(训练数据)、虚线(验证数据)绘制,增加了不同样本曲线的区分度。