TensorFlow: начальное значение без формы - PullRequest
0 голосов
/ 30 апреля 2018

Я попытался реализовать следующий код.

import tensorflow as tf

a = tf.placeholder(tf.int32)
b = tf.placeholder(tf.int32)

def initw(a,b):
    tf.Variable(tf.sign(tf.random_uniform(shape=[a,b],minval=-1.0,maxval=1.0)))

bla = initw(a,b)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run([bla], feed_dict={a:2, b:2}))

Но я продолжаю получать сообщение об ошибке:

ValueError: initial_value must have a shape specified: Tensor("Sign:0",shape=(?, ?), dtype=float32)

Может кто-нибудь сказать мне, что я здесь не так делаю? Я действительно не вижу, что вызывает ошибку.

EDIT:

Я хочу использовать initw(a,b) для инициализации весов сети. Я хочу иметь возможность сделать что-то вроде:

weights = {
    "h1": tf.get_variable("h1", initializer=initw(a,b).initialized_value())
    }

Где a и b - высота и ширина матрицы.

1 Ответ

0 голосов
/ 30 апреля 2018

На мой взгляд, сообщение об ошибке на самом деле довольно точное. Но я понимаю ваше замешательство. Вы, наверное, не очень понимаете, как работает Tensorflow под капотом. Возможно, вы захотите начать читать здесь .

Форма вычислительного графа должна быть известна до выполнения. В каждой переменной или заполнителе может быть только одна ось, которая не указана во время компиляции, а во время выполнения она считается размерностью пакета.

В вашем случае вы пытаетесь использовать заполнители для указания размеров переменной, что невозможно, поскольку график не может быть скомпилирован таким образом.

Я не знаю, что вы пытаетесь сделать с этим, но я думаю, есть способ достичь того, что вам нужно. На самом деле вы можете динамически использовать длину размерности пакета, чтобы нарисовать равномерный вектор этого размера.

Редактировать : После того, как вы обновили вопрос, я чувствую, что был прав в отношении моего подозрения. Нет необходимости в a и b в качестве заполнителей, просто сделайте их переменными Python, например:

import tensorflow as tf

# Matrix shape must be known in advance, but can of course still be specified
# in some settings file or at the beginning of the python skript
A = 2
B = 2

W = tf.Variable(tf.sign(tf.random_uniform(shape=(A, B), minval=-1.0,
                                          maxval=1.0)))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    print(sess.run(W))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...