コード例 #1
0
def predict(predict_files, saved_model):
    t0 = time.time()
    numOutputs = 2

    Xall, Yall = util.readData(train_files, 'xtcavimg', 'lasing', 'tf',
                               numOutputs)
    read_time = time.time() - t0
    minibatch_size = 64
    print("-- read %d samples for prediction" % len(Xall))
    sys.stdout.flush()

    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None, 363, 284, 1),
                                     name='img')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')

    model = TFModel.build_model(img_placeholder,
                                train_placeholder,
                                numOutputs=2)
    predict_op = tf.nn.softmax(model.final_logits)

    sess = tf.Session(
    )  #config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()

    sess.run(init)

    saver.restore(sess, saved_model)
    print("restored model from %s" % saved_model)
    sys.stdout.flush()

    # get decimal places needed to format confusion matrix
    fmtLen = int(math.ceil(math.log(minibatch_size, 10)))

    idx = -minibatch_size
    Ypred = np.zeros(Yall.shape, dtype=np.float32)
    while idx + minibatch_size < len(Xall):
        idx += minibatch_size
        X = Xall[idx:(idx + minibatch_size)]
        Y = Yall[idx:(idx + minibatch_size)]
        feed_dict = {img_placeholder: X, train_placeholder: False}
        Ypred[idx:(idx + minibatch_size)] = sess.run(predict_op,
                                                     feed_dict=feed_dict)

    cmat = util.get_confusion_matrix_one_hot(Ypred, Yall)

    acc, cmat_rows = util.get_acc_cmat_for_msg_from_cmat(cmat, 3)
    print("Ran predictions. Accuracy: %.2f %d samples" % (acc, len(Ypred)))
    for row in cmat_rows:
        print(row)
    sys.stdout.flush()
コード例 #2
0
def predict(predict_files, saved_model):
    t0 = time.time()
    numOutputs = 2

    Xall, Yall = util.readData(train_files, 'xtcavimg', 'lasing', 'tf', numOutputs)
    read_time = time.time()-t0
    minibatch_size = 64
    print("-- read %d samples for prediction" % len(Xall))
    sys.stdout.flush()

    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None,363,284,1),
                                     name='img')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')
    
    model = TFModel.build_model(img_placeholder, train_placeholder, numOutputs=2)    
    predict_op = tf.nn.softmax(model.final_logits)
    
    sess = tf.Session()#config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()
    
    sess.run(init)

    saver.restore(sess, saved_model)
    print("restored model from %s" % saved_model)
    sys.stdout.flush()

    # get decimal places needed to format confusion matrix
    fmtLen = int(math.ceil(math.log(minibatch_size,10)))

    idx = -minibatch_size
    Ypred = np.zeros(Yall.shape, dtype=np.float32)
    while idx + minibatch_size < len(Xall):
        idx += minibatch_size
        X=Xall[idx:(idx+minibatch_size)]
        Y=Yall[idx:(idx+minibatch_size)]
        feed_dict={img_placeholder:X,
                   train_placeholder:False}
        Ypred[idx:(idx+minibatch_size)] = sess.run(predict_op, feed_dict=feed_dict)

    cmat = util.get_confusion_matrix_one_hot(Ypred, Yall)

    acc, cmat_rows = util.get_acc_cmat_for_msg_from_cmat(cmat, 3)
    print("Ran predictions. Accuracy: %.2f %d samples" % (acc, len(Ypred)))
    for row in cmat_rows:
        print(row)
    sys.stdout.flush()
コード例 #3
0
def guided_backprop(saved_model):
    import matplotlib as mpl
    mpl.rcParams['backend'] = 'TkAgg'
    import matplotlib.pyplot as plt
    plt.ion()
    plt.figure()
    plt.show()

    numOutputs, Xall, Yall = util.read2ColorPredictData()
    print("-- read %d samples for guided backprop" % len(Xall))
    sys.stdout.flush()
    best_saved_model = saved_model + '_best'
    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None,363,284,1),
                                     name='img')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')
    
    model = TFModel.build_2color_model(img_placeholder, train_placeholder, numOutputs)    
    predict_op = tf.nn.softmax(model.final_logits)
    
    sess = tf.Session()#config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()
    
    sess.run(init)

    saver.restore(sess, best_saved_model)
    print("restored model from %s" % best_saved_model)
    sys.stdout.flush()

    guided = True  # set to False to see deriv w.r.t image
    no_colorbar_yet = True
    for idx in range(len(Xall)):
        X=Xall[idx:idx+1]
        Y=Yall[idx:idx+1]
        feed_dict={img_placeholder:X,
                   train_placeholder:False}
        Ypred = sess.run(predict_op, feed_dict=feed_dict)
        class_pred = np.argmax(Ypred)
        if class_pred != 3:
            continue
        backprop_img_predicted_label = model.guided_back_prop(sess, X, class_pred, guided)[:,:,0]
                
        plt.subplot(1,2,1)
        plt.imshow(X[0,:,:,0], interpolation='none', origin = 'lower')
        truth = np.argmax(Y[0,:])
        Ypred_str = map(lambda x: '%.2f'%x, Ypred[0,:])
        plt.title('raw img %d. pred=%s truth=%d' % (idx, Ypred_str, truth))

        plt.subplot(1,2,2)
        plt.imshow(backprop_img_predicted_label, interpolation='none', origin='lower')
        if no_colorbar_yet:
            plt.colorbar()
            no_colorbar_yet = False
        plt.title("guided backprop on predicted label")
        plt.pause(.1)
        if 'q' == raw_input("hit enter for next plot, or q to quit").lower():
            break
コード例 #4
0
def guided_backprop(predict_files, saved_model):
    import matplotlib as mpl
    mpl.rcParams['backend'] = 'TkAgg'
    import matplotlib.pyplot as plt
    plt.ion()
    plt.figure()
    plt.show()

    t0 = time.time()
    numOutputs = 2

    Xall, Yall = util.readData(predict_files, 'xtcavimg', 'lasing', 'tf', numOutputs)
    read_time = time.time()-t0
    print("-- read %d samples for prediction" % len(Xall))
    sys.stdout.flush()

    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None,363,284,1),
                                     name='img')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')
    
    model = TFModel.build_model(img_placeholder, train_placeholder, numOutputs=2)    
    predict_op = tf.nn.softmax(model.final_logits)
    
    sess = tf.Session()#config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()
    
    sess.run(init)

    saver.restore(sess, saved_model)
    print("restored model from %s" % saved_model)
    sys.stdout.flush()

    for idx in range(len(Xall)):
        X=Xall[idx:idx+1]
        Y=Yall[idx:idx+1]
        feed_dict={img_placeholder:X,
                   train_placeholder:False}
        Ypred = sess.run(predict_op, feed_dict=feed_dict)
        class_pred = np.argmax(Ypred)
        backprop_img_predicted_label = model.guided_back_prop(sess, X, class_pred)[:,:,0]
                
        plt.subplot(1,2,1)
        plt.imshow(X[0,:,:,0], interpolation='none', origin='lower')
        truth=0
        if Y[0,1]: truth=1
        plt.title('raw img %d. pred=%.2f %.2f truth=%d' % (idx, Ypred[0,0], Ypred[0,1], truth))

        plt.subplot(1,2,2)
        plt.imshow(backprop_img_predicted_label, interpolation='none', origin='lower')
        if idx == 0:
            plt.colorbar()
        plt.title("guided backprop on predicted label")
        plt.pause(.1)
コード例 #5
0
def getTrainData(mode='test'):
    t0 = time.time()
    Data = namedtuple('Data', 'numOutputs, training_X, training_Y, validation_X, validation_Y')
    numOutputs, training_X, training_Y, validation_X, validation_Y = \
        util.read2ColorLabelData(mode)
    print("Read %d samples in %.2f sec" % (len(training_X)+len(validation_X), time.time()-t0))
    return Data(numOutputs=numOutputs, 
                training_X=training_X, 
                training_Y=training_Y, 
                validation_X=validation_X, 
                validation_Y=validation_Y)
コード例 #6
0
ファイル: ex09_tensorboard.py プロジェクト: jw15/mlearntut
def getTrainData(mode='test'):
    t0 = time.time()
    Data = namedtuple(
        'Data',
        'numOutputs, training_X, training_Y, validation_X, validation_Y')
    numOutputs, training_X, training_Y, validation_X, validation_Y = \
        util.read2ColorLabelData(mode)
    print("Read %d samples in %.2f sec" %
          (len(training_X) + len(validation_X), time.time() - t0))
    return Data(numOutputs=numOutputs,
                training_X=training_X,
                training_Y=training_Y,
                validation_X=validation_X,
                validation_Y=validation_Y)
コード例 #7
0
ファイル: ex09_tensorboard.py プロジェクト: jw15/mlearntut
def train(saved_model, trainData=None):
    if trainData is None:
        trainData = getTrainData('test')
    numOutputs, training_X, training_Y, validation_X, validation_Y = \
        trainData.numOutputs, trainData.training_X, trainData.training_Y, \
        trainData.validation_X, trainData.validation_Y

    minibatch_size = 12
    batches_per_epoch = len(training_X) // minibatch_size
    print("batch size=%d gives %d batches per epoch" %
          (minibatch_size, batches_per_epoch))
    sys.stdout.flush()

    VALIDATION_SIZE = 128
    util.shuffle_data(validation_X, validation_Y)
    validation_X = validation_X[0:VALIDATION_SIZE]
    validation_Y = validation_Y[0:VALIDATION_SIZE]

    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None, 363, 284, 1),
                                     name='img')
    labels_placeholder = tf.placeholder(tf.float32,
                                        shape=(None, numOutputs),
                                        name='labels')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')

    model = TFModel.build_2color_model(img_placeholder, train_placeholder,
                                       numOutputs)

    predict_op = tf.nn.softmax(model.final_logits)

    train_op = model.createOptimizerAndGetMinimizationTrainingOp(
        labels_placeholder=labels_placeholder,
        learning_rate=0.002,
        optimizer_momentum=0.9)

    # have to do this after making the train_op which adds ops we want to summarize
    merged_summaries_op = attach_tensorboard_summaries(model)

    sess = tf.Session(
    )  #config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    train_writer = tf.train.SummaryWriter('tf_summaries_train', sess.graph)

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()

    sess.run(init)

    validation_feed_dict = {
        img_placeholder: validation_X,
        labels_placeholder: validation_Y,
        train_placeholder: False
    }

    step = -1
    steps_between_validations = 10

    # get decimal places needed to format confusion matrix
    fmtLen = int(math.ceil(math.log(max(minibatch_size, VALIDATION_SIZE), 10)))

    train_ops = [model.getModelLoss(),
                 model.getOptLoss(), train_op] + model.getTrainOps()
    train_ops.insert(0, merged_summaries_op)

    best_acc = 0.0
    print(
        " epoch batch  step tr.sec  mloss  oloss vl.sec tr.acc vl.acc vl.sec  tr.cmat vl.cmat"
    )
    sys.stdout.flush()
    for epoch in range(4):
        util.shuffle_data(training_X, training_Y)
        next_sample_idx = -minibatch_size
        for batch in range(batches_per_epoch):
            step += 1
            next_sample_idx += minibatch_size
            X = training_X[next_sample_idx:(next_sample_idx +
                                            minibatch_size), :]
            Y = training_Y[next_sample_idx:(next_sample_idx +
                                            minibatch_size), :]
            train_feed_dict = {
                img_placeholder: X,
                labels_placeholder: Y,
                train_placeholder: True
            }
            t0 = time.time()
            ndarr_train_ops = sess.run(train_ops, feed_dict=train_feed_dict)
            merged_summaries_ndarr, model_loss, opt_loss = ndarr_train_ops[0:3]
            train_writer.add_summary(merged_summaries_ndarr, step)

            train_time = time.time() - t0

            msg = " %5d %5d %5d %6.1f %6.3f %6.3f" % \
                  (epoch, batch, step, train_time, model_loss, opt_loss)

            if step % steps_between_validations == 0:
                t0 = time.time()
                train_acc, cmat_train_rows = util.get_acc_cmat_for_msg(
                    sess, predict_op, train_feed_dict, Y, fmtLen)
                valid_acc, cmat_valid_rows = util.get_acc_cmat_for_msg(
                    sess, predict_op, validation_feed_dict, validation_Y,
                    fmtLen)
                valid_time = time.time() - t0
                savemsg = ''
                if valid_acc > best_acc:
                    save_path = saver.save(sess, saved_model + '_best')
                    best_acc = valid_acc
                    savemsg = ' ** saved best in %s' % save_path
                print('-' * 80)
                print('%s %6.1f %5.1f%% %5.1f%% %6.1f | %s | %s | %s' %
                      (msg, valid_time, train_acc * 100.0, valid_acc * 100.0,
                       valid_time, cmat_train_rows[0], cmat_valid_rows[0],
                       savemsg))
                for row in range(1, len(cmat_train_rows)):
                    print('%s | %s | %s |' %
                          (' ' * (5 + 6 + 6 + 7 + 7 + 7 + 7 + 6 + 6 + 10),
                           cmat_train_rows[row], cmat_valid_rows[row]))
            else:
                print(msg)
            sys.stdout.flush()

    save_path = saver.save(sess, saved_model + '_final')
    print(' ** saved final model in %s' % save_path)
コード例 #8
0
ファイル: ex09_tensorboard.py プロジェクト: jw15/mlearntut
def guided_backprop(saved_model):
    import matplotlib as mpl
    mpl.rcParams['backend'] = 'TkAgg'
    import matplotlib.pyplot as plt
    plt.ion()
    plt.figure()
    plt.show()

    numOutputs, Xall, Yall = util.read2ColorPredictData()
    print("-- read %d samples for guided backprop" % len(Xall))
    sys.stdout.flush()
    best_saved_model = saved_model + '_best'
    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None, 363, 284, 1),
                                     name='img')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')

    model = TFModel.build_2color_model(img_placeholder, train_placeholder,
                                       numOutputs)
    predict_op = tf.nn.softmax(model.final_logits)

    sess = tf.Session(
    )  #config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()

    sess.run(init)

    saver.restore(sess, best_saved_model)
    print("restored model from %s" % best_saved_model)
    sys.stdout.flush()

    guided = True  # set to False to see deriv w.r.t image
    no_colorbar_yet = True
    for idx in range(len(Xall)):
        X = Xall[idx:idx + 1]
        Y = Yall[idx:idx + 1]
        feed_dict = {img_placeholder: X, train_placeholder: False}
        Ypred = sess.run(predict_op, feed_dict=feed_dict)
        class_pred = np.argmax(Ypred)
        if class_pred != 3:
            continue
        backprop_img_predicted_label = model.guided_back_prop(
            sess, X, class_pred, guided)[:, :, 0]

        plt.subplot(1, 2, 1)
        plt.imshow(X[0, :, :, 0], interpolation='none', origin='lower')
        truth = np.argmax(Y[0, :])
        Ypred_str = map(lambda x: '%.2f' % x, Ypred[0, :])
        plt.title('raw img %d. pred=%s truth=%d' % (idx, Ypred_str, truth))

        plt.subplot(1, 2, 2)
        plt.imshow(backprop_img_predicted_label,
                   interpolation='none',
                   origin='lower')
        if no_colorbar_yet:
            plt.colorbar()
            no_colorbar_yet = False
        plt.title("guided backprop on predicted label")
        plt.pause(.1)
        if 'q' == raw_input("hit enter for next plot, or q to quit").lower():
            break
コード例 #9
0
def train(train_files, validation_files, saved_model):
    t0 = time.time()
    numOutputs = 2
    training_X, training_Y = util.readData(train_files, 'xtcavimg', 'lasing', 'tf', numOutputs)
    validation_X, validation_Y = util.readData(validation_files, 'xtcavimg', 'lasing', 'tf', numOutputs)
    read_time = time.time()-t0
    minibatch_size = 24
    batches_per_epoch = len(training_X)//minibatch_size
    print("-- read %d samples in %.2fsec. batch_size=%d, %d batches per epoch" %
          (len(training_X)+len(validation_X), read_time, minibatch_size, batches_per_epoch))
    sys.stdout.flush()
    VALIDATION_SIZE = 80
    util.shuffle_data(validation_X, validation_Y)
    validation_X = validation_X[0:VALIDATION_SIZE]
    validation_Y = validation_Y[0:VALIDATION_SIZE]

    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None,363,284,1),
                                     name='img')
    labels_placeholder = tf.placeholder(tf.float32, 
                                        shape=(None, numOutputs),
                                        name='labels')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')
    
    model = TFModel.build_model(img_placeholder, train_placeholder, numOutputs=2)    
    predict_op = tf.nn.softmax(model.final_logits)
    
     ## loss 
    cross_entropy_loss_all = tf.nn.softmax_cross_entropy_with_logits(model.final_logits,
                                                                     labels_placeholder)
    cross_entropy_loss = tf.reduce_mean(cross_entropy_loss_all)

    loss = cross_entropy_loss
    
    ## training
    global_step = tf.Variable(0, trainable=False)
    lr = 0.002
    learning_rate = tf.train.exponential_decay(learning_rate=lr,
                                               global_step=global_step,
                                               decay_steps=100,
                                               decay_rate=0.96,
                                               staircase=True)

    optimizer = tf.train.MomentumOptimizer(learning_rate=learning_rate, momentum=0.9)
    train_op = optimizer.minimize(loss, global_step=global_step)

    sess = tf.Session()#config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()
    
    sess.run(init)
    
    validation_feed_dict = {img_placeholder:validation_X,
                            labels_placeholder:validation_Y,
                            train_placeholder:False}
    

    step = -1
    steps_between_validations = 10

    # get decimal places needed to format confusion matrix
    fmtLen = int(math.ceil(math.log(max(minibatch_size, VALIDATION_SIZE),10)))

    train_ops = [loss, train_op] + model.getTrainOps()
    best_acc = 0.0
    print(" epoch batch  step tr.sec  loss vl.sec tr.acc vl.acc vl.sec  tr.cmat vl.cmat")
    sys.stdout.flush()
    for epoch in range(3):
        util.shuffle_data(training_X, training_Y)
        next_sample_idx = -minibatch_size
        for batch in range(batches_per_epoch):
            step += 1
            next_sample_idx += minibatch_size
            X=training_X[next_sample_idx:(next_sample_idx+minibatch_size),:]
            Y=training_Y[next_sample_idx:(next_sample_idx+minibatch_size),:]
            train_feed_dict = {img_placeholder:X,
                               labels_placeholder:Y,
                               train_placeholder:True}
            t0 = time.time()
            ndarr_train_ops = sess.run(train_ops, feed_dict=train_feed_dict)
            train_loss = ndarr_train_ops[0]
            train_time = time.time()-t0

            msg = " %5d %5d %5d %6.1f %6.3f" % \
                  (epoch, batch, step, train_time, train_loss)

            if step % steps_between_validations == 0:
                t0 = time.time()
                train_acc, cmat_train_rows = util.get_acc_cmat_for_msg(sess, predict_op, train_feed_dict, Y, fmtLen)
                valid_acc, cmat_valid_rows = util.get_acc_cmat_for_msg(sess, predict_op, validation_feed_dict, validation_Y, fmtLen)
                valid_time = time.time()-t0
                savemsg = ''
                if valid_acc > best_acc:
                    save_path = saver.save(sess, saved_model)
                    best_acc = valid_acc
                    savemsg = ' ** saved in %s' % save_path
                print('-'*80)
                print('%s %6.1f %5.1f%% %5.1f%% %6.1f | %s | %s | %s' %
                      (msg, valid_time, train_acc*100.0, valid_acc*100.0, 
                       valid_time, cmat_train_rows[0], cmat_valid_rows[0], savemsg))
                for row in range(1,len(cmat_train_rows)):
                    print('%s | %s | %s |' %(' '*(5+6+6+7+7+7+6+6+10),
                                             cmat_train_rows[row],
                                             cmat_valid_rows[row]))
            else:
                print(msg)
            sys.stdout.flush()
コード例 #10
0
def guided_backprop(predict_files, saved_model):
    import matplotlib as mpl
    mpl.rcParams['backend'] = 'TkAgg'
    import matplotlib.pyplot as plt
    plt.ion()
    plt.figure()
    plt.show()

    t0 = time.time()
    numOutputs = 2

    Xall, Yall = util.readData(predict_files, 'xtcavimg', 'lasing', 'tf',
                               numOutputs)
    read_time = time.time() - t0
    print("-- read %d samples for prediction" % len(Xall))
    sys.stdout.flush()

    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None, 363, 284, 1),
                                     name='img')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')

    model = TFModel.build_model(img_placeholder,
                                train_placeholder,
                                numOutputs=2)
    predict_op = tf.nn.softmax(model.final_logits)

    sess = tf.Session(
    )  #config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()

    sess.run(init)

    saver.restore(sess, saved_model)
    print("restored model from %s" % saved_model)
    sys.stdout.flush()

    for idx in range(len(Xall)):
        X = Xall[idx:idx + 1]
        Y = Yall[idx:idx + 1]
        feed_dict = {img_placeholder: X, train_placeholder: False}
        Ypred = sess.run(predict_op, feed_dict=feed_dict)
        class_pred = np.argmax(Ypred)
        backprop_img_predicted_label = model.guided_back_prop(
            sess, X, class_pred)[:, :, 0]

        plt.subplot(1, 2, 1)
        plt.imshow(X[0, :, :, 0], interpolation='none', origin='lower')
        truth = 0
        if Y[0, 1]: truth = 1
        plt.title('raw img %d. pred=%.2f %.2f truth=%d' %
                  (idx, Ypred[0, 0], Ypred[0, 1], truth))

        plt.subplot(1, 2, 2)
        plt.imshow(backprop_img_predicted_label,
                   interpolation='none',
                   origin='lower')
        if idx == 0:
            plt.colorbar()
        plt.title("guided backprop on predicted label")
        plt.pause(.1)
コード例 #11
0
def train(train_files, validation_files, saved_model):
    t0 = time.time()
    numOutputs = 2
    training_X, training_Y = util.readData(train_files, 'xtcavimg', 'lasing',
                                           'tf', numOutputs)
    validation_X, validation_Y = util.readData(validation_files, 'xtcavimg',
                                               'lasing', 'tf', numOutputs)
    read_time = time.time() - t0
    minibatch_size = 24
    batches_per_epoch = len(training_X) // minibatch_size
    print(
        "-- read %d samples in %.2fsec. batch_size=%d, %d batches per epoch" %
        (len(training_X) + len(validation_X), read_time, minibatch_size,
         batches_per_epoch))
    sys.stdout.flush()
    VALIDATION_SIZE = 80
    util.shuffle_data(validation_X, validation_Y)
    validation_X = validation_X[0:VALIDATION_SIZE]
    validation_Y = validation_Y[0:VALIDATION_SIZE]

    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None, 363, 284, 1),
                                     name='img')
    labels_placeholder = tf.placeholder(tf.float32,
                                        shape=(None, numOutputs),
                                        name='labels')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')

    model = TFModel.build_model(img_placeholder,
                                train_placeholder,
                                numOutputs=2)
    predict_op = tf.nn.softmax(model.final_logits)

    ## loss
    cross_entropy_loss_all = tf.nn.softmax_cross_entropy_with_logits(
        model.final_logits, labels_placeholder)
    cross_entropy_loss = tf.reduce_mean(cross_entropy_loss_all)

    loss = cross_entropy_loss

    ## training
    global_step = tf.Variable(0, trainable=False)
    lr = 0.002
    learning_rate = tf.train.exponential_decay(learning_rate=lr,
                                               global_step=global_step,
                                               decay_steps=100,
                                               decay_rate=0.96,
                                               staircase=True)

    optimizer = tf.train.MomentumOptimizer(learning_rate=learning_rate,
                                           momentum=0.9)
    train_op = optimizer.minimize(loss, global_step=global_step)

    sess = tf.Session(
    )  #config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    init = tf.initialize_all_variables()

    saver = tf.train.Saver()

    sess.run(init)

    validation_feed_dict = {
        img_placeholder: validation_X,
        labels_placeholder: validation_Y,
        train_placeholder: False
    }

    step = -1
    steps_between_validations = 10

    # get decimal places needed to format confusion matrix
    fmtLen = int(math.ceil(math.log(max(minibatch_size, VALIDATION_SIZE), 10)))

    train_ops = [loss, train_op] + model.getTrainOps()
    best_acc = 0.0
    print(
        " epoch batch  step tr.sec  loss vl.sec tr.acc vl.acc vl.sec  tr.cmat vl.cmat"
    )
    sys.stdout.flush()
    for epoch in range(3):
        util.shuffle_data(training_X, training_Y)
        next_sample_idx = -minibatch_size
        for batch in range(batches_per_epoch):
            step += 1
            next_sample_idx += minibatch_size
            X = training_X[next_sample_idx:(next_sample_idx +
                                            minibatch_size), :]
            Y = training_Y[next_sample_idx:(next_sample_idx +
                                            minibatch_size), :]
            train_feed_dict = {
                img_placeholder: X,
                labels_placeholder: Y,
                train_placeholder: True
            }
            t0 = time.time()
            ndarr_train_ops = sess.run(train_ops, feed_dict=train_feed_dict)
            train_loss = ndarr_train_ops[0]
            train_time = time.time() - t0

            msg = " %5d %5d %5d %6.1f %6.3f" % \
                  (epoch, batch, step, train_time, train_loss)

            if step % steps_between_validations == 0:
                t0 = time.time()
                train_acc, cmat_train_rows = util.get_acc_cmat_for_msg(
                    sess, predict_op, train_feed_dict, Y, fmtLen)
                valid_acc, cmat_valid_rows = util.get_acc_cmat_for_msg(
                    sess, predict_op, validation_feed_dict, validation_Y,
                    fmtLen)
                valid_time = time.time() - t0
                savemsg = ''
                if valid_acc > best_acc:
                    save_path = saver.save(sess, saved_model)
                    best_acc = valid_acc
                    savemsg = ' ** saved in %s' % save_path
                print('-' * 80)
                print('%s %6.1f %5.1f%% %5.1f%% %6.1f | %s | %s | %s' %
                      (msg, valid_time, train_acc * 100.0, valid_acc * 100.0,
                       valid_time, cmat_train_rows[0], cmat_valid_rows[0],
                       savemsg))
                for row in range(1, len(cmat_train_rows)):
                    print('%s | %s | %s |' %
                          (' ' * (5 + 6 + 6 + 7 + 7 + 7 + 6 + 6 + 10),
                           cmat_train_rows[row], cmat_valid_rows[row]))
            else:
                print(msg)
            sys.stdout.flush()
コード例 #12
0
def train(saved_model, trainData=None):
    if trainData is None:
        trainData = getTrainData('test')
    numOutputs, training_X, training_Y, validation_X, validation_Y = \
        trainData.numOutputs, trainData.training_X, trainData.training_Y, \
        trainData.validation_X, trainData.validation_Y

    minibatch_size = 12  
    batches_per_epoch = len(training_X)//minibatch_size
    print("batch size=%d gives %d batches per epoch" % (minibatch_size, batches_per_epoch))
    sys.stdout.flush()

    VALIDATION_SIZE = 128
    util.shuffle_data(validation_X, validation_Y)
    validation_X = validation_X[0:VALIDATION_SIZE]
    validation_Y = validation_Y[0:VALIDATION_SIZE]

    img_placeholder = tf.placeholder(tf.int16,
                                     shape=(None,363,284,1),
                                     name='img')
    labels_placeholder = tf.placeholder(tf.float32, 
                                        shape=(None, numOutputs),
                                        name='labels')
    train_placeholder = tf.placeholder(tf.bool, name='trainflag')
    
    model = TFModel.build_2color_model(img_placeholder, train_placeholder, numOutputs)
    
    predict_op = tf.nn.softmax(model.final_logits)
                                                                    
    train_op = model.createOptimizerAndGetMinimizationTrainingOp(labels_placeholder=labels_placeholder,
                                                                 learning_rate=0.002, 
                                                                 optimizer_momentum=0.9)

    # have to do this after making the train_op which adds ops we want to summarize
    merged_summaries_op = attach_tensorboard_summaries(model)

    sess = tf.Session()#config=tf.ConfigProto(intra_op_parallelism_threads = 12))

    train_writer = tf.train.SummaryWriter('tf_summaries_train',
                                          sess.graph)
    
    init = tf.initialize_all_variables()

    saver = tf.train.Saver()
    
    sess.run(init)
    
    validation_feed_dict = {img_placeholder:validation_X,
                            labels_placeholder:validation_Y,
                            train_placeholder:False}
    

    step = -1
    steps_between_validations = 10

    # get decimal places needed to format confusion matrix
    fmtLen = int(math.ceil(math.log(max(minibatch_size, VALIDATION_SIZE),10)))

    train_ops = [model.getModelLoss(), model.getOptLoss(), train_op] + model.getTrainOps()
    train_ops.insert(0, merged_summaries_op)
    
    best_acc = 0.0
    print(" epoch batch  step tr.sec  mloss  oloss vl.sec tr.acc vl.acc vl.sec  tr.cmat vl.cmat")
    sys.stdout.flush()
    for epoch in range(4):
        util.shuffle_data(training_X, training_Y)
        next_sample_idx = -minibatch_size
        for batch in range(batches_per_epoch):
            step += 1
            next_sample_idx += minibatch_size
            X=training_X[next_sample_idx:(next_sample_idx+minibatch_size),:]
            Y=training_Y[next_sample_idx:(next_sample_idx+minibatch_size),:]
            train_feed_dict = {img_placeholder:X,
                               labels_placeholder:Y,
                               train_placeholder:True}
            t0 = time.time()
            ndarr_train_ops = sess.run(train_ops, feed_dict=train_feed_dict)
            merged_summaries_ndarr, model_loss, opt_loss = ndarr_train_ops[0:3]
            train_writer.add_summary(merged_summaries_ndarr, step)
            
            train_time = time.time()-t0

            msg = " %5d %5d %5d %6.1f %6.3f %6.3f" % \
                  (epoch, batch, step, train_time, model_loss, opt_loss)

            if step % steps_between_validations == 0:
                t0 = time.time()
                train_acc, cmat_train_rows = util.get_acc_cmat_for_msg(sess, predict_op, train_feed_dict, Y, fmtLen)
                valid_acc, cmat_valid_rows = util.get_acc_cmat_for_msg(sess, predict_op, validation_feed_dict, validation_Y, fmtLen)
                valid_time = time.time()-t0
                savemsg = ''
                if valid_acc > best_acc:
                    save_path = saver.save(sess, saved_model + '_best')
                    best_acc = valid_acc
                    savemsg = ' ** saved best in %s' % save_path
                print('-'*80)
                print('%s %6.1f %5.1f%% %5.1f%% %6.1f | %s | %s | %s' %
                      (msg, valid_time, train_acc*100.0, valid_acc*100.0, 
                       valid_time, cmat_train_rows[0], cmat_valid_rows[0], savemsg))
                for row in range(1,len(cmat_train_rows)):
                    print('%s | %s | %s |' %(' '*(5+6+6+7+7+7+7+6+6+10),
                                             cmat_train_rows[row],
                                             cmat_valid_rows[row]))
            else:
                print(msg)
            sys.stdout.flush()

    save_path = saver.save(sess, saved_model + '_final')
    print(' ** saved final model in %s' % save_path)