Python tensorflow(tf)变量初始化形状错误?

Python tensorflow(tf)变量初始化形状错误?,python,tensorflow,neural-network,deep-learning,Python,Tensorflow,Neural Network,Deep Learning,下面的代码旨在通过while循环构建“sy_logprob_n”,并在每个循环中填充一行。但当我运行这个时,它说 ValueError:使用输入尺寸0索引超出范围;输入只有0 带输入的“while/stripped_slice_1”(op:“strippedslice”)的变暗 形状:[]、[1]、[1]、[1]和具有计算输入张量的形状:输入[3]= 有一件事是,当我将形状打印为print(tf.shape(sy_logprob_n),tf.shape(sy_ac_na))时,它们的两个形状是

下面的代码旨在通过while循环构建“sy_logprob_n”,并在每个循环中填充一行。但当我运行这个时,它说

ValueError:使用输入尺寸0索引超出范围;输入只有0 带输入的“while/stripped_slice_1”(op:“strippedslice”)的变暗 形状:[]、[1]、[1]、[1]和具有计算输入张量的形状:输入[3]=

有一件事是,当我将形状打印为
print(tf.shape(sy_logprob_n),tf.shape(sy_ac_na))
时,它们的两个形状是不同的:

张量(“形状2:0”,形状=(0,),数据类型=int32)张量(“形状3:0”, 形状=(2,),数据类型=int32)

但是“sy_logprob_n”是由“sy_ac_na”的形状初始化的

有人知道吗?提前感谢

sy_ac_na = tf.placeholder(shape=[None, ac_dim], name="ac", dtype=tf.float32) 
batch_size=tf.shape(sy_ob_no)[0]

  sy_mean = build_mlp(sy_ob_no, ac_dim, 'mean', n_layers, size) # shape (batch,ac_dim)
  sy_logstd = tf.Variable(initial_value=0,name='std',expected_shape=[ac_dim],dtype=tf.float32) # logstd should just be a trainable variable, not a network output.
  sy_sampled_ac=tf.random_normal(tf.shape(sy_ac_na),mean=sy_mean,stddev=tf.exp(sy_logstd),seed=seed) # shape(batch,ac_dim)
  sy_logprob_n=tf.Variable(initial_value=0,expected_shape=tf.shape(sy_ac_na),name='sy_logprob_n',dtype=tf.float32)
  print(tf.shape(sy_logprob_n),tf.shape(sy_ac_na))

  def cond(sy_logprob_n,i,sy_ac_na):
    return tf.less(i,batch_size)

  def body(sy_logprob_n,i,sy_ac_na):
    distribution=tf.distributions.Normal(sy_mean,tf.exp(sy_logstd))
    log_prob=distribution.log_prob(sy_ac_na[i,:])
    tf.assign(sy_logprob_n[i],log_prob)
    i+=1
    return sy_logprob_n

  sy_logprob_n = tf.squeeze(tf.while_loop(cond,body,[sy_logprob_n,0,sy_ac_na]))  # shape (batch,)  

即使您指定了
预期的\u形状
tf.变量
的形状将为
初始值
(此处为0)。似乎
expected_-shape
参数从v1.0.0开始就存在了。我不知道为什么它仍然用
tf.Variable
记录。我刚刚在Github上提交了一个问题。

非常感谢!这真令人困惑。顺便问一下,如果tf.Variable不起作用,你知道我如何实现它吗?@Billadsf我不太确定你的目的是什么,但一般都建议这样做。希望这就是你想要的答案。。。