R语言Keras如何在RStudio Viewer中展示模型训练相关变量
需求可行性结论
该需求完全可以实现。
你之前编写的回调无法在Viewer面板生成曲线的原因很直接:tf$print()只会把权重值打印到控制台输出流,没有把采集到的权重值接入Keras的训练日志记录体系,RStudio默认的训练可视化面板只会读取日志里的标量指标渲染曲线,自然捕获不到你打印的权重值。
落地方法
你不需要额外写独立绘图逻辑,只要调整回调的逻辑,把每个epoch提取到的权重值作为自定义指标写入训练日志,Viewer面板会自动识别这个指标,和损失、评估指标一样生成变化曲线:
- 编写自定义记录回调,代码如下:
record_target_weight <- callback_lambda( on_epoch_end = function(epoch, logs) { # 提取目标权重的数值,转为R环境下的标量 # 如果你要监控的是高维权重里的某一个值,在这里加索引取对应元素即可 w_val <- as.numeric(model$trainable_variables[[1]]$numpy()) # 将权重值写入训练日志,自定义指标名可自行修改 logs$tracked_weight <- w_val } )
- 在调用
fit训练模型时,把这个回调传入callbacks参数:
model %>% fit( # 填入你自己的训练数据、验证数据、训练轮次等原有参数 x = x_train, y = y_train, epochs = 30, validation_data = list(x_val, y_val), callbacks = list(record_target_weight) )
- 训练启动后打开RStudio Viewer的训练监控面板,指标列表里会自动出现你命名的
tracked_weight选项,勾选后就能看到该权重随训练轮次变化的曲线,操作逻辑和查看损失、准确率等默认指标完全一致。
提示:只要你写入logs的是单个数值(长度为1的数值型变量),面板就会识别为可绘制的标量;如果要监控多个权重,只要在回调里分别提取、分别给logs加对应命名的字段即可。
内容的提问来源于stack exchange,提问作者Philipp123
相关产品推荐
相关产品推荐

