我有一个功能
init_from_checkpoint(
ckpt_dir_or_file,
assignment_map)
其中assignment_map
支持以下语法:
'checkpoint_scope_name /':'scope_name /' - 将从checkpoint_scope_name加载当前scope_name中具有匹配张量名称的所有变量。
例如,
init_from_checkpoint('/tmp/model.ckpt',
{'old_scope_1/var1': 'new_scope_1/var1',
'old_scope_1/var2': 'new_scope_1/var2'})
现在,我有两个清单
old_scope_1_list=[old_scope_1/var1, old_scope_1/var2, ...,old_scope_1/var100]
new_scope_1_list=[new_scope_1/var1, new_scope_1/var2, ...,new_scope_1/var100]
我如何使用init_from_checkpoint
和old_scope_1_list
调用函数new_scope_1_list
来在python中有效地调用函数?我目前的解决方案是在没有使用两个列表的情况下写下100行,但它看起来效果不佳
init_from_checkpoint('/tmp/model.ckpt',
{'old_scope_1/var1': 'new_scope_1/var1',
'old_scope_1/var2': 'new_scope_1/var2',
...
'old_scope_1/var100': 'new_scope_1/var100'})
您可以使用zip
function来生成old_scope_1_list和new_scope_1_list中的对列表。然后在这些对上使用dict
来创建您需要的映射。
In [67]: old_scope_1_list=['old_scope_1/var1',
'old_scope_1/var2','old_scope_1/var100']
...: new_scope_1_list=['new_scope_1/var1',
'new_scope_1/var2','new_scope_1/var100']
In [68]: zip(old_scope_1_list, new_scope_1_list)
Out[68]: <zip at 0x7f4dd084c748>
In [69]: x = zip(old_scope_1_list, new_scope_1_list)
In [70]: dict(x)
Out[70]:
{'old_scope_1/var1': 'new_scope_1/var1',
'old_scope_1/var100': 'new_scope_1/var100',
'old_scope_1/var2': 'new_scope_1/var2'}
所以在你的情况下,代码将是:
init_from_checkpoint('/tmp/model.ckpt', dict(zip(old_scope_1_list, new_scope_1_list)))