переменная tenorflow (tf) инициализирует ошибку формы? - PullRequest
0 голосов
/ 30 апреля 2018

Приведенный ниже код нацелен на создание "sy_logprob_n" в цикле while и заполнение одной строки диммируя каждый цикл. Но когда я запускаю это, он говорит

ValueError: Индекс вне диапазона, используя вход dim 0; вход имеет только 0 dims для 'while / strided_slice_1' (op: 'StridedSlice') с вводом формы: [], [1], [1], [1] и с вычисленными входными тензорами: input [3] = <1>.

И одна странность в том, что когда я распечатываю форму как print(tf.shape(sy_logprob_n),tf.shape(sy_ac_na)), их две формы различаются:

Тензор ("Shape_2: 0", shape = (0,), dtype = int32) Тензор ("Shape_3: 0", shape = (2,), dtype = 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,)  

1 Ответ

0 голосов
/ 01 мая 2018

Даже если вы указали expected_shape, tf.Variable примет форму initial_value (0 для вашего случая здесь) в качестве своей формы. Похоже, что аргумент expected_shape был устарел начиная с версии 1.0.0. Я не уверен, почему это все еще задокументировано с tf.Variable. Я только что подал вопрос на Github.

...