gpt4 book ai didi

python - 如何为 tensorflow 常量分配新值?

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:37 29 4
gpt4 key购买 nike

我正在从 .pb 文件加载 TensorFlow 模型。我想改变所有层的权重。我能够提取权重,但无法更改权重。

我将 graph_def 模型转换为 TensorFlow 模型,但即便如此,我也无法为权重分配新值,因为权重存储在“Const”类型的张量中。

b = graph_tf.get_tensor_by_name("Variable_1:0")      
tf.assign(b, np.ones((1,1,64,64)))

我收到以下错误:

AttributeError: 'Tensor' object has no attribute 'assign'

请提供解决此问题的方法。提前致谢。

最佳答案

这是实现类似目标的一种方法。您希望用初始化为这些操作的值的变量替换某些常量操作,因此您可以首先提取这些常量值,然后使用初始化为这些操作的变量创建图形。请参阅下面的示例。

import tensorflow as tf

# Example graph
with tf.Graph().as_default():
inp = tf.placeholder(tf.float32, [None, 3], name='Input')
w = tf.constant([[1.], [2.], [3.]], tf.float32, name='W')
out = tf.squeeze(inp @ w, 1, name='Output')
gd = tf.get_default_graph().as_graph_def()

# Extract weight values
with tf.Graph().as_default():
w, = tf.graph_util.import_graph_def(gd, return_elements=['W:0'])
# Get the constant weight values
with tf.Session() as sess:
w_val = sess.run(w)
# Alternatively, since it is a constant,
# you can get the values from the operation attribute directly
w_val = tf.make_ndarray(w.op.get_attr('value'))

# Make new graph
with tf.Graph().as_default():
# Make variables initialized with stored values
w = tf.Variable(w_val, name='W')
init_op = tf.global_variables_initializer()
# Import graph
inp, out = tf.graph_util.import_graph_def(
gd, input_map={'W:0': w},
return_elements=['Input:0', 'Output:0'])
# Change value operation
w_upd = w[2].assign([5.])
# Test
with tf.Session() as sess:
sess.run(init_op)
print(sess.run(w))
# [[1.]
# [2.]
# [3.]]
sess.run(w_upd)
print(sess.run(w))
# [[1.]
# [2.]
# [5.]]

关于python - 如何为 tensorflow 常量分配新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57768685/

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