Python 在tf.concat张量上赋值,丢弃张量的变量特征?

Python 在tf.concat张量上赋值,丢弃张量的变量特征?,python,tensorflow,concat,assign,Python,Tensorflow,Concat,Assign,我试图使用Python API为Tensorflow神经网络的权重和值设置特定的值。为此,我将所有权重和偏差放置在一个公共集合中,并对每个层的张量进行适当的整形和使用tf.concat 在我的代码中的某个阶段,我检索所述集合。然而,当我尝试将tf.assign(使用相同形状的tf.placeholder)分配给这些连接的张量,以设置来自单个值向量的所有权重/偏差时,例如,坐在提要中,我得到了错误 AttributeError: 'Tensor' object has no attribute '

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

在我的代码中的某个阶段,我检索所述集合。然而,当我尝试将tf.assign(使用相同形状的tf.placeholder)分配给这些连接的张量,以设置来自单个值向量的所有权重/偏差时,例如,坐在提要中,我得到了错误

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产生的张量不再是变量,因此没有赋值属性。我发现了一个相关的问题,但我的问题并没有像上面建议的那样通过验证_形状来解决


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

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

c=a+b
tf.assign(c,a)#不起作用!
基本上,此图表示节点
c
通过特定操作(concat、addition等)依赖于
a
b
。将其他值分配给
c
与来自
a
b
的值冲突,换句话说,这会破坏计算图形


您应该做的是将
d\u all
拆分为形状张量
[2]
,并指定基础
a
b
。这种方式完全有效。

谢谢您的快速回复!我原以为在分配任务时concat会映射回变量。在这方面,它也完全不同于两个节点求和的例子。更接近的可能是,a=tf.Variable(tf.random_uniform(shape=[2,1])请编辑某人,花了我5分钟多。。。我的意思是:concat是一对一,a+b不是。因此,具有相同行为的tf.reforme将是一个更好的示例。