Пример #1
0
def get_create_inputs(dataset_name: str, is_train: bool, epochs: int):
    options = {
        'mnist': lambda: create_inputs_mnist(is_train),
        'fashion_mnist': lambda: create_inputs_mnist(is_train),
        'smallNORB': lambda: create_inputs_norb(is_train, epochs)
    }
    return options[dataset_name]
Пример #2
0
def get_create_inputs(dataset_name: str, is_train: bool, epochs: int):
    options = {'mnist': lambda: create_inputs_mnist(is_train),
               'asl': lambda: create_inputs_asl(is_train),
               'italy': lambda: create_inputs_italy(is_train),
               'fashion_mnist': lambda: create_inputs_mnist(is_train),
               'smallNORB': lambda: create_inputs_norb(is_train, epochs),
               'cifar10': lambda: create_inputs_cifar10(is_train)}
    return options[dataset_name]
Пример #3
0
def main(_):
    coord_add = [[[8., 8.], [12., 8.], [16., 8.]],
                 [[8., 12.], [12., 12.], [16., 12.]],
                 [[8., 16.], [12., 16.], [16., 16.]]]

    coord_add = np.array(coord_add, dtype=np.float32) / 28.

    with tf.Graph().as_default(), tf.device('/cpu:0'):
        global_step = tf.get_variable(
            'global_step', [], initializer=tf.constant_initializer(0), trainable=False)

        num_batches_per_epoch = int(60000 / cfg.batch_size)
        opt = tf.train.AdamOptimizer()

        batch_x, batch_labels = create_inputs_norb(is_train=True)
        # batch_y = tf.one_hot(batch_labels, depth=10, axis=1, dtype=tf.float32)

        m_op = tf.placeholder(dtype=tf.float32, shape=())
        with tf.device('/gpu:0'):
            with slim.arg_scope([slim.variable], device='/cpu:0'):
                output = net.build_arch(batch_x, coord_add, is_train=True)
                # loss = net.cross_ent_loss(output, batch_labels)
                loss = net.spread_loss(output, batch_labels, m_op)

            grad = opt.compute_gradients(loss)

        loss_name = 'spread_loss'

        summaries = []
        summaries.append(tf.summary.scalar(loss_name, loss))

        train_op = opt.apply_gradients(grad, global_step=global_step)

        sess = tf.Session(config=tf.ConfigProto(
            allow_soft_placement=True, log_device_placement=False))
        sess.run(tf.global_variables_initializer())

        saver = tf.train.Saver(tf.global_variables(), max_to_keep=cfg.epoch)

        # read snapshot
        # latest = os.path.join(cfg.logdir, 'model.ckpt-4680')
        # saver.restore(sess, latest)

        summary_op = tf.summary.merge(summaries)
        tf.train.start_queue_runners(sess=sess)

        summary_writer = tf.summary.FileWriter(cfg.logdir, graph=sess.graph)

        m = 0.2
        for step in range(cfg.epoch * num_batches_per_epoch):
            tic = time.time()
            _, loss_value = sess.run([train_op, loss], feed_dict={m_op: m})
            print('%d iteration is finished in ' % step + '%f second' % (time.time() - tic))
            # test1_v = sess.run(test2)

            # if np.isnan(loss_value):
            #     print('bbb')
            #  assert not np.isnan(np.any(test2_v[0])), 'a is nan'
            assert not np.isnan(loss_value), 'loss is nan'

            if step % 10 == 0:
                summary_str = sess.run(summary_op, feed_dict={m_op: m})
                summary_writer.add_summary(summary_str, step)

            if (step % num_batches_per_epoch) == 0:
                if step > 0:
                    m += (0.9 - 0.2) / (cfg.epoch * 0.6)
                    if m > 0.9:
                        m = 0.9

                ckpt_path = os.path.join(cfg.logdir, 'model.ckpt')
                saver.save(sess, ckpt_path, global_step=step)