在R Studio中获取Keras/TensorFlow训练模型的激活函数及超参数
一、查看各层的激活函数
summary()确实只展示模型的基本结构框架,要查看每一层的激活函数,你需要遍历模型的每一层,提取层的配置细节。这里分两种常见情况处理:
层内置激活函数(比如Dense层里的activation参数)
可以用lapply遍历模型的layers集合,提取每个层的$config$activation属性:# 遍历每一层,输出层名称和对应的激活函数 lapply(my_model$layers, function(layer) { list( 层名称 = layer$name, 激活函数 = layer$config$activation ) })要是某层没有内置激活函数(比如单独使用Activation层的情况),这里会返回
NULL,方便你区分。单独的Activation层
对于单独定义的layer_activation()层,上面的代码同样能捕获到它的激活函数,因为这类层的核心配置就是激活函数名。
如果想让结果更规整,也可以转成数据框格式:
activation_df <- do.call(rbind, lapply(my_model$layers, function(layer) { data.frame( 层名称 = layer$name, 激活函数 = ifelse(is.null(layer$config$activation), "无", layer$config$activation), stringsAsFactors = FALSE ) })) print(activation_df)
二、查看训练时的epoch数、batch size等超参数
很可惜,默认情况下Keras的.h5模型文件不会自动保存训练时的epoch、batch size这类超参数——模型文件主要存储层结构、权重和优化器状态(如果保存时指定了的话),但训练过程的超参数不属于模型本身的结构,不会被记录。
不过有两种方式可以获取这些信息:
如果训练时保存了history对象
要是你训练模型时把结果存在了history变量里(比如history <- fit(my_model, x_train, y_train, epochs = 50, batch_size = 32)),那直接从history里提取就行:# 获取训练用的总epoch数 total_epochs <- length(history$epoch) # 获取训练时使用的batch size training_batch_size <- history$params$batch_size哪怕当时没手动指定batch_size,Keras的默认值(一般是32)也会被记录在history的params里。
如果没保存history,只能提前做补救措施
这种情况下没法从已有的.h5模型里恢复这些超参数,建议以后训练时:- 手动把超参数存到单独的RData文件:
# 定义并保存训练超参数 training_params <- list( epochs = 50, batch_size = 32, learning_rate = 0.001 ) save(training_params, file = "training_params.RData") - 或者把超参数添加到模型的自定义属性后再保存:
下次加载模型后,直接用# 给模型添加自定义超参数属性 my_model$training_params <- list(epochs = 50, batch_size = 32) # 保存带超参数的模型 save_model_hdf5(my_model, "my_model_with_params.h5")my_model$training_params就能查看这些超参数了。
- 手动把超参数存到单独的RData文件:
内容的提问来源于stack exchange,提问作者Strickland

