다소 혼란스러운 문제가 생기고 있습니다. 나는 눈이 멀었거나 뭔가를 놓쳤거나 재사용 변수를 놓쳤습니다. 동시에 False
및 True
으로 설정됩니다.ValueError : 변수 d_w1/Adam /이 존재하지 않거나 tf.get_variable()을 사용하여 생성되지 않았습니다.
이 내 모델 정의입니다 : 이것은 최적화/트레이너에 대한 내 정의
def discriminator(data, reuse=False):
if reuse:
tf.get_variable_scope().reuse_variables()
# Fully Connected 1
d_w1 = tf.get_variable('d_w1', [41, 1024], initializer=tf.truncated_normal_initializer(stddev=0.02))
d_b1 = tf.get_variable('d_b1', [1024], initializer=tf.constant_initializer(0))
d1 = tf.nn.relu(tf.matmul(data, d_w1) + d_b1)
# Fully Connected 2 Wide
d_w2 = tf.get_variable('d_w2', [1024, 6144], initializer=tf.truncated_normal_initializer(stddev=0.02))
d_b2 = tf.get_variable('d_b2', [6144], initializer=tf.constant_initializer(0))
d2 = tf.nn.relu(tf.matmul(d1, d_w2) + d_b2)
# Fully Connected 3 Choking
d_w3 = tf.get_variable('d_w3', [6144, 1024], initializer=tf.truncated_normal_initializer(stddev=0.02))
d_b3 = tf.get_variable('d_b3', [1024], initializer=tf.constant_initializer(0))
d3 = tf.nn.relu(tf.matmul(d2, d_w3) + d_b3)
d_w4 = tf.get_variable('d_w4', [1024, 1], initializer=tf.truncated_normal_initializer(stddev=0.02))
d_b4 = tf.get_variable('d_b4', [1], initializer=tf.constant_initializer(0))
output = tf.nn.sigmoid(tf.matmul(d3, d_w4) + d_b4)
return output
def generator(z, batch_size, z_dim):
# Input layer
g_w1 = tf.get_variable('g_w1', [z_dim, 41], dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.02))
g_b1 = tf.get_variable('g_b1', [41], initializer=tf.truncated_normal_initializer(stddev=0.02))
g1 = tf.matmul(z, g_w1) + g_b1
g1 = tf.reshape(g1, [-1, 41])
g1 = tf.contrib.layers.batch_norm(g1, epsilon=1e-5, scope='bn1')
g1 = tf.nn.relu(g1)
g_w2 = tf.get_variable('g_w2', [41, 1024], dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.02))
g_b2 = tf.get_variable('g_b2', [1024], initializer=tf.truncated_normal_initializer(stddev=0.02))
g2 = tf.matmul(g1, g_w2) + g_b2
g2 = tf.contrib.layers.batch_norm(g2, epsilon=1e-5, scope='bn2')
g2 = tf.nn.relu(g2)
g_w3 = tf.get_variable('g_w3', [1024, 5120], dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.02))
g_b3 = tf.get_variable('g_b3', [5120], initializer=tf.truncated_normal_initializer(stddev=0.02))
g3 = tf.matmul(g2, g_w3) + g_b3
g3 = tf.contrib.layers.batch_norm(g3, epsilon=1e-5, scope='bn3')
g3 = tf.nn.relu(g3)
g_w4 = tf.get_variable('g_w4', [5120, 41], dtype=tf.float32,
initializer=tf.truncated_normal_initializer(stddev=0.02))
g_b4 = tf.get_variable('g_b4', [41], initializer=tf.truncated_normal_initializer(stddev=0.02))
g4 = tf.matmul(g3, g_w4) + g_b4
g4 = tf.sigmoid(g4)
return g4
입니다 :
Traceback (most recent call last): File "C:/Users/FW/PycharmProjects/GAN IDS/GAN 2.py", line 151, in <module> ['d_w1:0', 'd_b1:0', 'd_w2:0', 'd_b2:0', 'd_w3:0', 'd_b3:0', 'd_w4:0', 'd_b4:0'] ['g_w1:0', 'g_b1:0', 'g_w2:0', 'g_b2:0', 'g_w3:0', 'g_b3:0', 'g_w4:0', 'g_b4:0'] reuse or not: True
assert tf.get_variable_scope().reuse == False, "Problems!" AssertionError: Problems!
:
batch_size = 50
tf.reset_default_graph()
sess = tf.Session()
z_placeholder = tf.placeholder(tf.float32, [None, z_dimensions], name='z_placeholder') # Hold my noise
x_placeholder = tf.placeholder(tf.float32, shape=[None, 41], name='x_placeholder') # Hold my data
Gz = generator(z_placeholder, batch_size, z_dimensions) # Hold my counterfeits
Dx = discriminator(x_placeholder) # Hold Predictions on the real data
Dg = discriminator(Gz, reuse=True) # Hold Predictions on the fake data
# Loss
d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=Dx, labels=tf.ones_like(Dx)))
d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=Dg, labels=tf.ones_like(Dg)))
g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=Dg, labels=tf.ones_like(Dg)))
# Trainable Vars
# Separate weights and biases via a name prefix basis, Thanks Jon Bruner and Adit Deshpande.
tvars = tf.trainable_variables()
d_vars = [var for var in tvars if 'd_' in var.name]
g_vars = [var for var in tvars if 'g_' in var.name]
print([v.name for v in d_vars])
print([v.name for v in g_vars])
# Optimizers!
with tf.variable_scope(tf.get_variable_scope(), reuse=False):
print("reuse or not: {}".format(tf.get_variable_scope().reuse))
assert tf.get_variable_scope().reuse == False, "Problems!"
d_trainer_fake = tf.train.AdamOptimizer(0.0003).minimize(d_loss_fake, var_list=d_vars)
d_trainer_real = tf.train.AdamOptimizer(0.0003).minimize(d_loss_real, var_list=d_vars)
g_trainer = tf.train.AdamOptimizer(0.0001).minimize(g_loss, var_list=g_vars)
내 코드를 실행하면 나는이 멋진 오류
자리에 잡기가 없으면 다음과 같이됩니다.
이 문제로 가장 일반적인 스레드를 찾았으므로 지금까지 해결 된 솔루션이 없으므로 어떤 문제가 있는지 잘 모릅니다.
내 모델이나 코드의 최적화 섹션에서 무언가 잘못되었다고 생각합니다.
그래, 그것을 고정 범위에 이름을 추가, 나는 항상 끔찍한 생각입니다 최신 Tensorflow에 레거시 가이드를 따라했습니다. 또한 최적화 도구를 분리하는 것이 중요한 아이디어이기 때문에 나중에 교육 할 때 문제가 발생하지 않습니다. 나는이 실수를 너무 늦게 보았 기 때문에 이미 그 실수를 저질렀다. 통찰력을 주셔서 감사합니다. 다른 누군가가이 조언을 접한다면, 여러분이 따라 다니는 가이드가있는 공식 문서 _along_을 읽으십시오. – SpiderStryder