所以问题是,对于使用 AllenNLP 的自动调整(如 optuna),建议的做法是在 jsonnet 脚本中使用对环境变量的引用,然后建立一个研究来修改这些参数。
当值是整数或浮点时,这很好。对于整数,您使用std.parseInt(std.extVar(varname))
,对于浮点数,您使用std.parseJson(std.extVar(varname))
。
但是如果我想改变,比如我的测试中的优化技术在“adam”、“sparseadam”、“adamax”、adamw”等之间,或者改变我正在使用的 RNN 的类型,似乎并不容易方法来做到这一点。
在这种情况下,您似乎应该能够std.extVar(varname)
在不将其包装在parseJson()
or中的情况下执行此操作parseInt()
,但这会返回错误。有没有其他人遇到过这个问题,你是如何解决的?
除此之外,我正在尝试使用三个不同的字符串参数。这是第一个“bert_vocab”的 jsonnet:
local bert_vocab=std.extvar('bert_vocab');
错误信息:
486 ext_vars = {**_environment_variables(), **ext_vars}
487
--> 488 file_dict = json.loads(evaluate_file(params_file, ext_vars=ext_vars))
489
490 if isinstance(params_overrides, dict):
RuntimeError: RUNTIME ERROR: field does not exist: extvar
/bigdisk/lax/cox/jupyter/bert_config.jsonnet:28:18-28 thunk <bert_vocab>
/bigdisk/lax/cox/jupyter/bert_config.jsonnet:61:22-32 object <anonymous>
/bigdisk/lax/cox/jupyter/bert_config.jsonnet:(59:16)-(63:12) object <anonymous>
/bigdisk/lax/cox/jupyter/bert_config.jsonnet:(58:21)-(64:10) object <anonymous>
/bigdisk/lax/cox/jupyter/bert_config.jsonnet:(56:19)-(65:8) object <anonymous>
During manifestation
我还尝试了像这里这样的各种“字符串转义函数”(但字符串转义函数都不起作用:
local bert_vocab=std.escapeStringBash(std.extvar("bert_vocab"));
我可以执行以下操作来验证是否设置了 os 环境变量:
os.environ['bert_vocab']
返回'bert-base-uncased'