2017-07-10 2 views
0

Dans mon code, j'essaie de m'entraîner à utiliser la fonction tr.train.batch. Dans sess.run([optimizer]) ligne, il ne retourne rien et il est juste gelé. Pouvez-vous s'il vous plaît trouver mon erreur?tensorflow autoencoder ne peut pas apprendre à l'entraînement

tensors = tf.convert_to_tensor(x_train, dtype=tf.float32) 
tensors = tf.reshape(tensors, shape=x_train.shape) 
batch = tf.train.batch([tensors], batch_size=BATCH_SIZE, enqueue_many=True) 

# Weights and biases to hidden layer 
Wh = tf.Variable(tf.random_normal([COLUMN-2, UNITS_OF_HIDDEN_LAYER], mean=0.0, stddev=0.05)) 
bh = tf.Variable(tf.zeros([UNITS_OF_HIDDEN_LAYER])) 
h = tf.nn.tanh(tf.matmul(batch, Wh) + bh) 
# Weights and biases to output layer 
Wo = tf.transpose(Wh) # tied weights 
bo = tf.Variable(tf.zeros([COLUMN-2])) 
y = tf.nn.tanh(tf.matmul(h, Wo) + bo) 

# Objective functions 
mean_sqr = tf.reduce_mean(tf.pow(batch - y, 2)) 
optimizer = tf.train.AdamOptimizer(LEARNING_RATE).minimize(mean_sqr) 
init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init) 

for j in range(TRAINING_EPOCHS): 
    sess.run([optimizer]) 
    print("optimizer: ") 

Répondre

0

Le tf.train.batch est une file d'attente, vous devez donc commencer les files d'attente dans la session en utilisant tf.train.start_queue_runners. Vous pouvez en apprendre plus à ce sujet dans threading and Queues guide de tensorflow.

Effectuez les modifications suivantes:

with tf.Session() as sess: 
sess.run(init_op) 
coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(coord=coord) 
try: 
    # Training loop 
    for j in range(TRAINING_EPOCHS): 
     if coord.should_stop(): 
      break 
     sess.run([optimizer]) 
     print("optimizer: ") 

except Exception, e: 
    # When done, ask the threads to stop. 
    coord.request_stop(e) 

finally: 
    coord.request_stop() 
    # Wait for threads to finish. 
coord.join(threads)