- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 tf.Variable 创建了一个 tensorflow 变量。我想知道为什么如果我使用相同的名称调用 tf.get_variable 不会引发异常,并且会创建一个名称递增的新变量?
import tensorflow as tf
class QuestionTest(tf.test.TestCase):
def test_version(self):
self.assertEqual(tf.__version__, '1.10.1')
def test_variable(self):
a = tf.Variable(0., trainable=False, name='test')
self.assertEqual(a.name, "test:0")
b = tf.get_variable('test', shape=(), trainable=False)
self.assertEqual(b.name, "test_1:0")
self.assertNotEqual(a, b, msg='`a` is not `b`')
with self.assertRaises(ValueError) as ecm:
tf.get_variable('test', shape=(), trainable=False)
exception = ecm.exception
self.assertStartsWith(str(exception), "Variable test already exists, disallowed.")
最佳答案
这是因为 tf.Variable
是一种低级方法,它将创建的变量存储在 GLOBALS(或 LOCALS)集合中,而 tf.get_variable
则记录它所拥有的变量通过将它们存储在变量存储中来创建。
当您第一次调用tf.Variable
时,创建的变量不会添加到变量存储中,让我们认为尚未创建名为“test”
的变量。
因此,当您稍后调用 tf.get_variable("test")
时,它将查看变量存储,发现名称为 "test"
的变量不存在它。
因此,它将调用 tf.Variable
,这将创建一个具有递增名称 "test_1"
的变量,该变量存储在变量存储中的键 "test"
.
import tensorflow as tf
class AnswerTest(tf.test.TestCase):
def test_version(self):
self.assertEqual(tf.__version__, '1.10.1')
def test_variable_answer(self):
"""Using the default variable scope"""
# Let first check the __variable_store and the GLOBALS collections.
self.assertListEqual(tf.get_collection(("__variable_store",)), [],
"No variable store.")
self.assertListEqual(tf.global_variables(), [],
"No global variables")
a = tf.Variable(0., trainable=False, name='test')
self.assertEqual(a.name, "test:0")
self.assertListEqual(tf.get_collection(("__variable_store",)), [],
"No variable store.")
self.assertListEqual(tf.global_variables(), [a],
"but `a` is in global variables.")
b = tf.get_variable('test', shape=(), trainable=False)
self.assertNotEqual(a, b, msg='`a` is not `b`')
self.assertEqual(b.name, "test_1:0", msg="`b`'s name is not 'test'.")
self.assertTrue(len(tf.get_collection(("__variable_store",))) > 0,
"There is now a variable store.")
var_store = tf.get_collection(("__variable_store",))[0]
self.assertDictEqual(var_store._vars, {"test": b},
"and variable `b` is in it.")
self.assertListEqual(tf.global_variables(), [a, b],
"while `a` and `b` are in global variables.")
with self.assertRaises(ValueError) as exception_context_manager:
tf.get_variable('test', shape=(), trainable=False)
exception = exception_context_manager.exception
self.assertStartsWith(str(exception),
"Variable test already exists, disallowed.")
使用显式变量作用域时也是如此。
def test_variable_answer_with_variable_scope(self):
"""Using now a variable scope"""
self.assertListEqual(tf.get_collection(("__variable_store",)), [],
"No variable store.")
with tf.variable_scope("my_scope") as scope:
self.assertTrue(len(tf.get_collection(("__variable_store",))) > 0,
"There is now a variable store.")
var_store = tf.get_collection(("__variable_store",))[0]
self.assertDictEqual(var_store._vars, {},
"but with variable in it.")
a = tf.Variable(0., trainable=False, name='test')
self.assertEqual(a.name, "my_scope/test:0")
var_store = tf.get_collection(("__variable_store",))[0]
self.assertDictEqual(var_store._vars, {},
"Still no variable in the store.")
b = tf.get_variable('test', shape=(), trainable=False)
self.assertEqual(b.name, "my_scope/test_1:0")
var_store = tf.get_collection(("__variable_store",))[0]
self.assertDictEqual(
var_store._vars, {"my_scope/test": b},
"`b` is in the store, but notice the difference between its name and its key in the store.")
with self.assertRaises(ValueError) as exception_context_manager:
tf.get_variable('test', shape=(), trainable=False)
exception = exception_context_manager.exception
self.assertStartsWith(str(exception),
"Variable my_scope/test already exists, disallowed.")
关于python - 为什么 tf.get_variable ('test' ) 返回名为 test_1 的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52535493/
我正在阅读 LevelDB 中的代码,并且不断遇到所使用的 TEST_ 前缀。我希望 TEST_ 表明此方法用于测试,以便能够对不会公开的内部结构进行操作。因此,我预计这些都不会出现在任何关键路径中。
如何在 phpMyAdmin 中运行命令,该命令将删除数据库中具有前缀 test_ 的所有列。 最佳答案 要从表中删除列,请使用以下语法: alter table drop column 要查找数
我如何在 phpMyAdmin 中运行一条命令,该命令将删除数据库中前缀为 test_ 的所有列。 最佳答案 要从表中删除列,请使用语法: alter table drop column 要查找数
当我为框架创建测试时,我开始注意到以下模式: class SomeTestCase(unittest.TestCase): def test_feat_true(self):
我刚刚将 tests.py 文件移动到一个名为tests的新目录,然后我在其中添加了__init__.py文件,但是当我运行测试时python manage.py test 它说在 0.000 秒内运
我正在使用 Python 3.4.1 和单元测试模块来验证另一个软件。 需要运行另一个软件,并且其输出必须由 python 脚本解析以进行验证。输出文件是一个包含未知数量元素的 XML 文件。 目前,
我的包中有多个模块。 package/ |--mod1.py |--mod2.py 每个模块都包含一些函数和一个用于测试模块的test_function。 我正在使用sphinx-apidoc为pac
这是 unittest and metaclass: automatic test_* method generation 的后续问题: 对于这个(固定的)unittest.TestCase 布局:
我喜欢将测试程序的输出记录到带有时间戳的日志文件中。 我创建了以下 Makefile,但它不起作用。 “make”似乎在最后一刻根据需要计算 LOGFILE。 生成文件 LOGFILE=`date +
我是一名优秀的程序员,十分优秀!