I've been working on a large neural network code and a couple weeks ago 
this weird error started occurring. (I am running Spyder (Python 3.6) on 
Windows 10. )
If I make any change to the code, I have to (save, then) close Spyder and 
reopen it for the change to take effect, otherwise Spyder will just run the 
code as written when I opened Spyder. 

Worth noting is that this doesn't always happen, I can new code without 
having to close and reopen Spyder, this error seems restricted to the 
neural network code. (Attached is main .py file, although it probably won't 
function without the 5 other .py files and all of the imagenet images it 
uses to properly run the neural network). 

This error has wasted approximately 23.7% of my life, please send help. 

-- 
You received this message because you are subscribed to the Google Groups 
"spyder" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/spyderlib.
For more options, visit https://groups.google.com/d/optout.
"""
Written by Matteo Dunnhofer - 2017

models training on ImageNet
"""


import tensorflow as tf
from Myoptimizer import Myoptimizer
import sys
import os.path
import time
from models import johnnet
import train_util as tu
import numpy as np
import threading

def train(
        epochs, 
        batch_size, 
        learning_rate, 
        dropout, 
        momentum, 
        lmbda, 
        resume, 
        imagenet_path, 
        display_step, 
        test_step, 
        ckpt_path, 
        summary_path):
        
    train_img_path = os.path.join(imagenet_path, 'train\\')
    ts_size = tu.imagenet_size(train_img_path)
    num_batches = int(float(ts_size) / batch_size)
    
    with open (os.path.join(imagenet_path, 'wnids.txt')) as f:
      text = f.read()
      without_n = text.split('\n')
      wnid_labels = [number for number in without_n if number != '']
    x = tf.placeholder(tf.float32, [None, 224, 224, 3])
    y = tf.placeholder(tf.float32, [None, 1000])

    lr = tf.placeholder(tf.float32)
    keep_prob = tf.placeholder(tf.float32)

    # queue of examples being filled on the cpu
    with tf.device('/cpu:0'):
        q = tf.FIFOQueue(batch_size * 3, [tf.float32, tf.float32], shapes=[[224, 224, 3], [1000]])
        enqueue_op = q.enqueue_many([x, y])

        x_b, y_b = q.dequeue_many(batch_size)

    pred, _ = johnnet.classifier(x_b, keep_prob)

    # cross-entropy and weight decay
    with tf.name_scope('cross_entropy'):
        cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y_b, name='cross-entropy'))
    
    with tf.name_scope('l2_loss'):
        l2_loss = tf.reduce_sum(lmbda * tf.stack([tf.nn.l2_loss(v) for v in tf.get_collection('weights')]))
        tf.summary.scalar('l2_loss', l2_loss)
    
    with tf.name_scope('loss'):
        loss = cross_entropy + l2_loss
        tf.summary.scalar('loss', loss)

    # accuracy
    with tf.name_scope('accuracy'):
        correct = tf.equal(tf.argmax(pred, 1), tf.argmax(y_b, 1))
        accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))
        tf.summary.scalar('accuracy', accuracy)
    
    global_step = tf.Variable(0, trainable=False)
    epoch = tf.div(global_step, num_batches)
    
    # momentum optimizer
    with tf.name_scope('optimizer'):
        optimizer = tf.train.MomentumOptimizer(learning_rate=lr, momentum=momentum).minimize(loss, global_step=global_step)
        #optimizer = Myoptimizer(learning_rate=lr, momentum=momentum).minimize(loss, global_step=global_step)

    # merge summaries to write them to file
    merged = tf.summary.merge_all()

    # checkpoint saver
    saver = tf.train.Saver()

    coord = tf.train.Coordinator()

    #init = tf.initialize_all_variables()
    init = tf.global_variables_initializer()

    with tf.Session(config=tf.ConfigProto()) as sess:
        if resume:
            saver.restore(sess, os.path.join(ckpt_path, 'johnnet-cnn.ckpt'))
        else:
            sess.run(init)

        # enqueuing batches procedure
        def enqueue_batches():
            while not coord.should_stop():
                im, l = tu.read_batch(batch_size, train_img_path, wnid_labels)
                sess.run(enqueue_op, feed_dict={x: im,y: l})

        # creating and starting parallel threads to fill the queue
        num_threads = 3
        for i in range(num_threads):
            t = threading.Thread(target=enqueue_batches)
            t.setDaemon(True)
            t.start()
        
        # operation to write logs for tensorboard visualization
        train_writer = tf.summary.FileWriter(os.path.join(summary_path, 'train\\'), sess.graph)

        start_time = time.time()
        for e in range(sess.run(epoch), epochs):
            for i in range(num_batches):

                _, step = sess.run([optimizer, global_step], feed_dict={lr: learning_rate, keep_prob: dropout})
                #train_writer.add_summary(summary, step)

                # decaying learning rate
                if step == 170000 or step == 350000:
                    learning_rate /= 10

                # display current training informations
                if step % display_step == 0:
                    c, a = sess.run([loss, accuracy], feed_dict={lr: learning_rate, keep_prob: 1.0})
                    print ('Epoch: {:03d} Step/Batch: {:09d} --- Loss: {:.7f} Training accuracy: {:.8f}'.format(e, step, c, a))
                    
                    
                # make test and evaluate validation accuracy
      
        val_im, val_cls = tu.read_validation_batch(batch_size, os.path.join(imagenet_path, 'val\\images'), os.path.join(imagenet_path, 'val\\val_annotations.txt'), os.path.join(imagenet_path, 'wnids.txt'))
        v_a = sess.run(accuracy, feed_dict={x_b: val_im, y_b: val_cls, lr: learning_rate, keep_prob: 1.0})
        # intermediate time
        int_time = time.time()
        #print ('Elapsed time: {}'.format(tu.format_time(int_time - start_time)))
        print ('Validation accuracy: {:.04f}'.format(v_a))
        # save weights to file
        save_path = saver.save(sess, os.path.join(ckpt_path, 'johnnet-cnn.ckpt'))
        #print('Variables saved in file: %s' % save_path)
        
        end_time = time.time()
        toc = time.clock()
        elapsed_time = (toc-tic)/3600
        print('elapsed time:', elapsed_time, 'hours')
        #print ('Elapsed time: {}').format(tu.format_time(end_time - start_time))
        save_path = saver.save(sess, os.path.join(ckpt_path, 'johnnet-cnn.ckpt'))
        #print('Variables saved in file: %s' % save_path)
        
        coord.request_stop()


if __name__ == '__main__':
    DROPOUT = 0.4
    MOMENTUM = .9
    LAMBDA = 5e-06 # for weight decay
    LEARNING_RATE = 1e-03
    EPOCHS = 1
    BATCH_SIZE = 200
    CKPT_PATH = 'ckpt-johnnet'
    if not os.path.exists(CKPT_PATH):
        os.makedirs(CKPT_PATH)
    SUMMARY = 'summary'
    if not os.path.exists(SUMMARY):
        os.makedirs(SUMMARY)

    IMAGENET_PATH = 'tiny-imagenet-200'
    DISPLAY_STEP = 1
    TEST_STEP = 5
    tic = time.clock()

    train(
        EPOCHS, 
        BATCH_SIZE, 
        LEARNING_RATE, 
        DROPOUT, 
        MOMENTUM, 
        LAMBDA, 
        False, 
        IMAGENET_PATH, 
        DISPLAY_STEP, 
        TEST_STEP, 
        CKPT_PATH, 
        SUMMARY)
    

Reply via email to