在Eclipse/StatET中使用R的Keras时plot()函数无法生成图像
我之前在Windows 10的StatET环境里也碰到过一模一样的问题——整段脚本跑下来就是没生成图像,但单独在命令行敲代码或者直接用R运行脚本就完全正常。结合你的场景,大概率是工作路径不匹配或者图形设备的执行时机出了问题,给你几个实用的排查和解决方向:
先确认工作路径是否正确
StatET运行脚本时的默认工作路径,和你手动在命令行执行时的路径可能不一样。你可以在脚本最开头加一行print(getwd()),看看输出的路径是不是包含figuras文件夹的那个目录。如果不对,直接在脚本开头用setwd("你的项目根路径")手动指定(比如setwd("D:/My_R_Projects/Keras_Test")),另外记得提前创建figuras文件夹,避免路径不存在导致保存失败:dir.create("figuras", recursive = TRUE, showWarnings = FALSE)给图形设备足够的渲染时间
有时候脚本执行速度太快,dev.off()可能在plot(history)完全渲染完成前就执行了,导致图像文件是空的或者根本没生成。你可以在绘图后加个短暂的延迟,或者换用更稳定的图形设备函数试试:history <- model %>% fit_generator(train_generator, steps_per_epoch = 100, epochs = 30, validation_data = validation_generator, validation_steps = 50) png(filename="figuras/history.png") # 换成png试试,兼容性更好 plot(history) Sys.sleep(1) # 给1秒渲染时间 dev.off()检查StatET的图形设备设置
打开Eclipse的Window > Preferences > StatET > R > Graphics,确认默认图形设备是windows(Windows系统下的原生图形设备),同时勾选“Enable interactive graphics”选项。如果之前设置成了其他设备,可能会导致脚本中无法正常初始化图形环境。拆分脚本逐块运行排查
把脚本分成两部分:先运行模型训练的代码,确认history对象正常生成(可以用str(history)查看结构),然后再单独运行绘图和保存的代码。有时候训练过程占用了大量资源,会导致后续的绘图代码无法正常执行,拆分后能快速定位问题。
内容的提问来源于stack exchange,提问作者FGS

