gpt4 book ai didi

python - tensorflow 变量名称中允许使用哪些字符?

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:07 25 4
gpt4 key购买 nike

在为 tensorflow 变量选择名称时,可以这样做:

>> tf.Variable(2, name='a')

<tf.Variable 'finegrained_1/decoder/unreadable/a:0' shape=() dtype=int32_ref>

然而,这不是:

>> tf.Variable(2, name='a:b')

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
~/mm/appy-finegrained/sign_classification/model_finegrained.py in <module>()
----> 1 tf.Variable(2, name='a:b')

~/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/variables.py in __init__(self, initial_value, trainable, collections, validate_shape, caching_device, name, variable_def, dtype, expected_shape, import_scope, constraint)
211 dtype=dtype,
212 expected_shape=expected_shape,
--> 213 constraint=constraint)
214
215 def __repr__(self):

~/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/variables.py in _init_from_args(self, initial_value, trainable, collections, validate_shape, caching_device, name, dtype, expected_shape, constraint)
287 with ops.control_dependencies(None):
288 with ops.name_scope(name, "Variable", [] if init_from_fn else
--> 289 [initial_value]) as name:
290
291 if init_from_fn:

~/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in __enter__(self)
4930 self._g_manager.__enter__()
4931 self._name_scope = g.name_scope(self._name)
-> 4932 return self._name_scope.__enter__()
4933
4934 def __exit__(self, type_arg, value_arg, traceback_arg):

~/anaconda3/lib/python3.6/contextlib.py in __enter__(self)
79 def __enter__(self):
80 try:
---> 81 return next(self.gen)
82 except StopIteration:
83 raise RuntimeError("generator didn't yield") from None

~/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in name_scope(self, name)
3512 # (viz. '-', '\', '/', and '_').
3513 if not _VALID_SCOPE_NAME_REGEX.match(name):
-> 3514 raise ValueError("'%s' is not a valid scope name" % name)
3515 else:
3516 # Scopes created in the root must match the more restrictive

ValueError: 'a:b' is not a valid scope name

允许将 / 放在名称中,但它可能会破坏一些作用域:

>> tf.Variable(2, name='a/b')

<tf.Variable 'finegrained_1/decoder/unreadable/a/b:0' shape=() dtype=int32_ref>

对于变量名称中允许使用的字符集是否有任何定义的规则?

并且(关于 a/b 名称)对于不应使用的内容是否有任何额外的指导方针?

最佳答案

关于 ops 命名,参见 tf.Operation文档:

NOTE: This constructor validates the name of the Operation (passed as node_def.name). Valid Operation names match the following regular expression:

[A-Za-z0-9.][A-Za-z0-9_.\\-/]*

每个变量被翻译成一些操作,并且它的名字被放入作用域,命名规则非常相似(参见python/framework/ops.py):

_VALID_OP_NAME_REGEX = re.compile("^[A-Za-z0-9.][A-Za-z0-9_.\\-/]*$")
_VALID_SCOPE_NAME_REGEX = re.compile("^[A-Za-z0-9_.\\-/]*$")

当然,名称中不允许使用 '/'':',因为它们用于内部 tensorflow 目的:

  • '/' 是嵌套范围的分隔符(正则表达式允许,但这意味着在单个声明中使用多个范围);
  • ':' 是张量名称和输出索引的分隔符(详见 this question)。

关于python - tensorflow 变量名称中允许使用哪些字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49237889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com