Ошибка значения в области видимости переменной тензорного потока в Python - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь обучить вариационный автоэнкодер, и я хочу тренировать его каждый раз с разным количеством скрытых измерений пространства, используя цикл for.Внутри этого цикла у меня есть другой цикл для итерации по разным коэффициентам для параметра KL, поэтому мне пришлось установить все флаги повторного использования как True.Это нормально, когда я запускаю код только с одним измерением скрытого пространства, но когда я записываю цикл for поверх него, я получаю эту ошибку:

ValueError: Попытка поделиться переменной gaussian_MLP_encoder / wo, но с указанной формой(500, 8) и найденную форму (500, 4).

Также может быть полезно знать, что n_hidden, который является числом скрытых единиц в моих слоях кодера и декодера, равен 500,и цикл for, который вызывает ошибку:

    dim_z = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
    for s in range(len(dim_z)):

Вот мой код, где получить эту ошибку для:

wo = tf.get_variable('wo', [h1.get_shape()[1], n_output * 2], initializer=w_init)

in:

def gaussian_MLP_encoder(x, n_hidden, n_output, keep_prob):
    with tf.variable_scope("gaussian_MLP_encoder", reuse=tf.AUTO_REUSE):
        # initializers
        w_init = tf.contrib.layers.variance_scaling_initializer()
        b_init = tf.constant_initializer(0.)

        # 1st hidden layer
        w0 = tf.get_variable('w0', [x.get_shape()[1], n_hidden], initializer=w_init)
        b0 = tf.get_variable('b0', [n_hidden], initializer=b_init)
        h0 = tf.matmul(x, w0) + b0
        h0 = tf.nn.elu(h0)
        h0 = tf.nn.dropout(h0, keep_prob)

        # 2nd hidden layer
        w1 = tf.get_variable('w1', [h0.get_shape()[1], n_hidden], initializer=w_init)
        b1 = tf.get_variable('b1', [n_hidden], initializer=b_init)
        h1 = tf.matmul(h0, w1) + b1
        h1 = tf.nn.tanh(h1)
        h1 = tf.nn.dropout(h1, keep_prob)

        # output layer
        # borrowed from https: // github.com / altosaar / vae / blob / master / vae.py
        wo = tf.get_variable('wo', [h1.get_shape()[1], n_output * 2], initializer=w_init)
        bo = tf.get_variable('bo', [n_output * 2], initializer=b_init)
        gaussian_params = tf.matmul(h1, wo) + bo

        # The mean parameter is unconstrained
        mean = gaussian_params[:, :n_output]
        # The standard deviation must be positive. Parametrize with a softplus and
        # add a small epsilon for numerical stability
        stddev = 1e-6 + tf.nn.softplus(gaussian_params[:, n_output:])

    return mean, stddev
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...