python - tf.concat 张量上的 tf.assign,删除张量的可变字符?

标签 python tensorflow concatenation assign

我正在尝试使用 Python API 为 Tensorflow 神经网络的权重和值设置特定值。为此,我将所有权重和偏差放置在一个公共(public)集合中,并进行适当的 reshape ,并对每层的张量使用tf.concat

在我的代码的某个阶段,我检索所述集合。然而,当我尝试对这些连接的张量tf.assign(使用相同形状的 tf.placeholder)以便从单个值向量设置所有权重/偏差时,例如坐在 feed_dict 中,然后我收到错误

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

我已将问题归结为最小工作示例(MWE),如下所示:

import tensorflow as tf

a=tf.Variable(tf.random_uniform([2], dtype=tf.float32))
b=tf.Variable(tf.random_uniform([2], dtype=tf.float32))
c=tf.concat([a,b], axis=0)

d_all=tf.placeholder(shape=[4], dtype=tf.float32)
d_single=tf.placeholder(shape=[2], dtype=tf.float32)

#e_all=tf.assign(c,d_all)
e_single=tf.assign(a,d_single)

sess=tf.Session()
sess.run(tf.global_variables_initializer())

print(a)
print(d_single)

sess.run(e_single, feed_dict={
    d_single: [1,2]
})

print(c)
print(d_all)

#sess.run(e_all, feed_dict={
#    d_all: [1,2,3,4]
#})

注释掉的行不起作用,并且会因相同的错误而失败。看来 tf.concat 产生的张量不再是变量,因此不具有分配属性。我发现了一个相关问题here ,但我的问题没有按照那里的建议通过 validate_shape 解决。

有什么想法吗?这是期望的行为吗?

最佳答案

是的,这是一种设计行为,因为c是一个操作,而不是一个变量。这是最简单的版本:

c = a + b
tf.assign(c, a)  # Does not work!

基本上,该图意味着节点 c 通过某些操作(连接、加法等)依赖于 ab。为 c 分配其他值与来自 ab 的值发生冲突,换句话说,它会破坏计算图。

您应该做的是将 d_all 拆分为形状 [2] 的张量,并分配底层 ab。这种方式是完全有效的。

关于python - tf.concat 张量上的 tf.assign,删除张量的可变字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699569/

相关文章:

python - 在 Tensorflow 中使用 InceptionV3 进行预测

postgresql - 通过变量路径访问 JSONB 元素

python - 访问哈希密码字典平均最快的方法是什么?

python离线绘图总是以默认文件名保存文件如何以不同的名称保存

python - JModelica:更改循环迭代变量而不重新编译

python - 如何使用机器学习从数据中检测英语单词

python - 如何在 scikit learn LinearSVC 中为 RandomizedSearchCV 仅选择有效参数

python - 如何将 TensorFlow 模型导出为 .tflite 文件?

python - 如何在没有字符串连接的情况下在 Python 中重复字符?

java - 为什么这段代码没有产生预期的结果?