我正在尝试使用张量流中的以下代码初始化多层神经网络的权重 .
def initialize_parameters(layers_dims):
parameters = {}
tf.set_random_seed(1)
L = len(layers_dims)
for l in range(1, L):
parameters['W' + str(l)] = tf.get_variable("parameters['W' + str(l)]", [layers_dims[l],layers_dims[l-1]], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
parameters['b' + str(l)] = tf.get_variable("parameters['b' + str(l)]", [layers_dims[l],1], initializer = tf.zeros_initializer())
return parameters
以及我调用此函数的方式是
layers_dims = [100,1]
tf.reset_default_graph()
with tf.Session() as sess:
parameters = initialize_parameters(layers_dims)
我收到一个错误,指出 tf.get.variable
无法将变量的名称作为 parameters['W' + str(l)]
. 相反,当我使用像 W1
或 b1
这样的名称时,它可以正常工作 .
我的目标是初始化我的“L”层神经网络并将参数存储在名为parameters的字典中 .
它有什么办法吗?
2 回答
您将python需要执行的代码放入字符串中 . 只是解决这个问题,你会没事的 .
在这里,您将在python变量
parameters['W' + str(l)]
(该python正确计算为parameters["W1"], parameters["W2"]
等等)上分配名为"parameters['b' + str(l)]"
的tensorflow变量 . 如您所见,名称是一个常量字符串 .相反,你必须让python评估
parameters['b' + str(l)]
语句 .因此,只需删除双引号,使字符串
"parameters['b' + str(l)]"
成为python解释器将执行的连接操作 . 您还必须删除parameters
字典查找,因为它还没有出现's wrong (you are looking into a dictionary for a certain key that it') .TLDR :您的变量名称无效,因为TensorFlow会检查它是否是有效名称 .
你得到的错误是这样的:
如果你再次追溯它,你会发现它引发了一个错误:
然后,您可以检查主TensorFlow代码库on line 3603 here . 如果您阅读此函数并进一步向下滚动到line 3671,您会看到导致此错误的正则表达式:
这就是“W1”或“b1”的原因 .