如何将终端输入参数直接传入keras.layers.LSTM作为bias_regularizer值
解决方案
方案1:白名单映射(最安全,推荐)
该方法完全规避代码注入风险,适合所有场景使用:
- 提前导入需要用到的正则化方法,建立字符串到对应函数的映射白名单
- 约定固定输入格式,解析用户输入后调用对应函数生成正则化对象
- 仅允许用户输入预设范围内的参数,全程可控
代码示例:
from keras.regularizers import l1, l2 import keras # 正则化方法映射白名单,可按需扩展 reg_map = { "l1": l1, "l2": l2 } # 终端输入约定格式:类型:系数,如输入 l1:0.01 input_str = input("输入正则化配置(格式:类型:系数):").strip() reg_type, reg_factor = input_str.split(":") reg_factor = float(reg_factor) # 生成正则化对象后传入LSTM bias_reg = reg_map[reg_type](reg_factor) lstm_layer = keras.layers.LSTM(bias_regularizer=bias_reg)
方案2:eval直接执行(仅适合本地调试用,存在安全风险)
如果需要完全匹配手写代码的输入体验,可以用eval函数直接执行用户输入的字符串,效果和硬编码完全一致。注意仅在你100%信任输入内容的场景下使用,公开服务使用该方法会存在严重的代码注入漏洞。
代码示例:
from keras.regularizers import l1, l2 import keras # 终端直接输入 l1(0.01) 即可 x = input('input parameter: ') bias_reg = eval(x) keras.layers.LSTM(bias_regularizer=bias_reg)
使用该方法需要提前导入所有可能用到的正则化方法,否则执行会报未定义错误。
内容的提问来源于stack exchange,提问作者victorsoeby
相关产品推荐
相关产品推荐

