Tensorflow не удается инициализировать tf.переменную для динамического размера пакета

#tensorflow

#tensorflow

Вопрос:

Я попытался создать tf.Variable с динамической формой. Ниже изложена проблема.

Это работает.

 init_bias = tf.random_uniform(shape=[self.config.hidden_layer_size, tf.shape(self.question_inputs)[0]])
 

Однако, когда я пытаюсь это сделать:

 init_bias = tf.Variable(init_bias)
 

Он выдает ошибку ValueError: у initial_value должна быть указана форма: Tensor(«random_uniform:0», shape=(?, ?), dtype=float32)

Просто введите контекст (ввод вопроса — это заполнитель, какой динамический пакет):

 self.question_inputs = tf.placeholder(tf.int32, shape=[None, self.config.qmax])
 

Похоже, что ввод динамического значения в случайную форму дает shape=(?,?), что выдает ошибку с tf.Variable.

Спасибо и ценю любую помощь!

Ответ №1:

Это должно сработать:

 init_bias = tf.Variable(init_bias,validate_shape=False)
 

Если validate_shape имеет значение False, tensorflow позволяет инициализировать переменную значением неизвестной формы.

Однако то, что вы делаете, кажется мне немного странным. В tensorflow переменные обычно используются для хранения весов нейронной сети, форма которой остается фиксированной независимо от размера пакета. Переменный размер пакета обрабатывается путем передачи тензора переменной длины в график (и умножения / добавления его с фиксированной переменной смещения формы).

Комментарии:

1. Я нашел вариант использования при предварительной загрузке данных: tensorflow.org/programmers_guide/reading_data#preloaded_data . Возможно, вам захочется передать разные наборы данных разных размеров.

2. Я все еще получаю сообщение об ошибке InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder' with dtype int32 [[Node: Placeholder = Placeholder[dtype=DT_INT32, shape=[], device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]