Я пытаюсь обучить вариационный автоэнкодер, и я хочу тренировать его каждый раз с разным количеством скрытых измерений пространства, используя цикл 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