Ejemplo n.º 1
0
def DISP_ALPHA(storedir, graph, step, normalized_dataset=True,
               sample_num=0, invert_alpha=True, words=None, gamma=1, cmap='gist_gray', image=None, show_image=True):
    dtc.makeLogger(3, set_global=True)
    # Note: Good cmap values are: gist_gray, gist_yarg, gist_heat
    # Good values of gamma_correction are 1 and 2.2/2.3
    vs = VisualizeStep(VisualizeDir(storedir, normalized_dataset=normalized_dataset), graph, step)
    df_strs = vs.strs('y', 'predicted_ids', mingle=False, trim=True, wrap_strs=True, keys=['image_name'])
    if image:
        if not image.endswith('_basic.png'):
            image = image.replace('.png', '_basic.png')
        df_strs = df_strs[df_strs.image_name.isin([image])]
        assert sample_num == 0
    else:
        df_strs = df_strs.iloc[sample_num:sample_num+1]

    vs.alpha(sample_num, invert_alpha=invert_alpha, words=words, gamma_correction=gamma,
                    cmap=cmap, index=df_strs.index, show_image=show_image)

    # df_ = pd.DataFrame(data={
    #     '$\mathbf{\hat{y}}$': [df_strs.predicted_ids.iloc[0], df_strs.predicted_ids.iloc[0].strip('$')],
    #     '$\mathbf{\hat{y}}$_len': [df_strs.predicted_ids_len.iloc[0]]*2,
    #     '$\mathbf{y}$': [df_strs.y.iloc[0], df_strs.y.iloc[0].strip('$')] ,
    #     '$\mathbf{y}$_len': [df_strs.y_len.iloc[0]]*2
    #     })


    df_ = pd.DataFrame(data={
            'length': [df_strs.y_len.iloc[0], df_strs.predicted_ids_len.iloc[0]]*2 + [''],
            'value': [df_strs.y.iloc[0], df_strs.predicted_ids.iloc[0]] +
                     [verbatim(df_strs.y.iloc[0]), verbatim(df_strs.predicted_ids.iloc[0])] +
                     [df_strs.ed.iloc[0]],
        },
        index=['$\mathbf{y}$', '$\mathbf{\hat{y}}$', '$\mathbf{y}$_seq', '$\mathbf{\hat{y}}$_seq', 'edit distance'])

    display(df_[['value', 'length']])
Ejemplo n.º 2
0
def main():
    logger = dtc.makeLogger(set_global=True)

    parser = argparse.ArgumentParser(description='train model')
    parser.add_argument(
        "--num-steps",
        "-n",
        dest="num_steps",
        type=int,
        help=
        "Number of training steps to run. Defaults to -1 if unspecified, i.e. run to completion",
        default=-1)
    parser.add_argument(
        "--num-epochs",
        "-e",
        dest="num_epochs",
        type=int,
        help="Number of training epochs to run. Defaults to 10 if unspecified.",
        default=10)
    parser.add_argument(
        "--batch-size",
        "-b",
        dest="batch_size",
        type=int,
        help=
        "Batchsize per gpu. If unspecified, defaults to the default value in hyper_params",
        default=None)
    parser.add_argument(
        "--seq2seq-beam-width",
        "-w",
        dest="seq2seq_beam_width",
        type=int,
        help="seq2seq Beamwidth. If unspecified, defaults to 10",
        default=10)
    parser.add_argument("--ctc-beam-width",
                        dest="ctc_beam_width",
                        type=int,
                        help="CTC Beamwidth. If unspecified, defaults to 10",
                        default=10)
    parser.add_argument(
        "--print-steps",
        "-s",
        dest="print_steps",
        type=int,
        help=
        "Number of training steps after which to log results. Defaults to 100 if unspecified",
        default=100)
    parser.add_argument("--keep-prob",
                        "-k",
                        dest="keep_prob",
                        type=float,
                        help="Dropout 'keep' probability. Defaults to 0.5",
                        default=1.0)
    parser.add_argument(
        "--adam_alpha",
        "-a",
        dest="alpha",
        type=float,
        help="Alpha (step / learning-rate) value of adam optimizer.",
        default=0.0001)
    parser.add_argument(
        "--r-lambda",
        "-r",
        dest="rLambda",
        type=float,
        help=
        "Sets value of rLambda - lambda value used for regularization. Defaults to 0.00005.",
        default=0.00005)
    parser.add_argument(
        "--data-folder",
        "-d",
        dest="data_folder",
        type=str,
        help="Data folder. If unspecified, defaults to raw_data_folder/..",
        default=None)
    parser.add_argument("--raw-data-folder",
                        dest="raw_data_folder",
                        type=str,
                        help="Raw data folder. Must be specified.",
                        default=None)
    parser.add_argument(
        "--vgg16-folder",
        dest="vgg16_folder",
        type=str,
        help=
        "vgg16 data folder. If unspecified, defaults to data_folder/vgg16_features",
        default=None)
    parser.add_argument(
        "--image-folder",
        dest="image_folder",
        type=str,
        help=
        "image folder. If unspecified, defaults to data_folder/formula_images",
        default=None)
    parser.add_argument(
        "--partial-batch",
        "-p",
        dest="partial_batch",
        action='store_true',
        help=
        "Sets assert_whole_batch hyper param to False. Default value for this option is False "
        " (i.e. assert_whole_batch=True)",
        default=False)
    parser.add_argument(
        "--queue-capacity",
        "-q",
        dest="queue_capacity",
        type=int,
        help=
        "Capacity of input queue. Defaults to hyperparam defaults if unspecified.",
        default=None)
    parser.add_argument(
        "--logging-level",
        "-l",
        dest="logging_level",
        type=int,
        choices=range(1, 6),
        help=
        "Logging verbosity level from 1 to 5 in increasing order of verbosity.",
        default=4)
    parser.add_argument(
        "--valid-frac",
        "-f",
        dest="valid_frac",
        type=float,
        help="Fraction of samples to use for validation. Defaults to 0.05",
        default=0.05)
    parser.add_argument(
        "--validation-epochs",
        "-v",
        dest="valid_epochs",
        type=float,
        help=
        """Number (or fraction) of epochs after which to run a full validation cycle. For this
                             behaviour, the number should be greater than 0. A value less <= 0 on the other hand,
                             implies 'smart' validation - which will result in selectively 
                             capturing snapshots around max_scoring peaks (based on training/bleu2).""",
        default=1.0)
    parser.add_argument(
        "--save-all-eval",
        dest="save_all_eval",
        action='store_true',
        help=
        "(Boolean): False => Save only one random validation/testing batch, True = > Save all validation/testing batches",
        default=False)
    parser.add_argument(
        "--build-image-context",
        "-i",
        dest="build_image_context",
        type=int,
        help=
        "Sets value of hyper.build_image_context. Default is 2 => build my own convnet.",
        default=2)
    parser.add_argument(
        "--swap-memory",
        dest="swap_memory",
        action='store_true',
        help="swap_memory option of tf.scan and tf.while_loop. Default to False."
        " Enabling allows training larger mini-batches at the cost of speed.",
        default=False)
    parser.add_argument(
        "--restore",
        dest="restore_logdir",
        type=str,
        help=
        "restore from checkpoint. Provide logdir path as argument. Don't specify the --logdir argument.",
        default=None)
    parser.add_argument(
        "--logdir",
        dest="logdir",
        type=str,
        help=
        "(optional) Sets TensorboardParams.tb_logdir. Can't specify the --restore argument along with this.",
        default=None)
    parser.add_argument(
        "--logdir-tag",
        dest="logdir_tag",
        type=str,
        help=
        "(optional) Sets TensorboardParams.logdir_tab. Can't specify the --restore argument along with this.",
        default=None)
    # parser.add_argument("--use-ctc-loss", dest="use_ctc_loss", action='store_true',
    #                     help="Sets the use_ctc_loss hyper parameter. Defaults to False.",
    #                     default=False)
    parser.add_argument(
        "--validate",
        dest="doValidate",
        action='store_true',
        help=
        "Run validation cycle only. --restore option should be provided along with this.",
        default=False)
    parser.add_argument(
        "--test",
        dest="doTest",
        action='store_true',
        help=
        "Run test cycle only but with training dataset. --restore option should be provided along with this.",
        default=False)
    parser.add_argument(
        "--squash-input-seq",
        dest="squash_input_seq",
        action='store_true',
        help=
        "(boolean) Set value of squash_input_seq hyper param. Defaults to True.",
        default=True)
    parser.add_argument(
        "--num-snapshots",
        dest="num_snapshots",
        type=int,
        help=
        "Number of latest snapshots to save. Defaults to 100 if unspecified",
        default=100)

    args = parser.parse_args()

    raw_data_folder = args.raw_data_folder
    if args.data_folder:
        data_folder = args.data_folder
    else:
        data_folder = os.path.join(raw_data_folder, '..')

    if args.image_folder:
        image_folder = args.image_folder
    else:
        image_folder = os.path.join(data_folder, 'formula_images')

    if args.vgg16_folder:
        vgg16_folder = args.vgg16_folder
    else:
        vgg16_folder = os.path.join(data_folder, 'vgg16_features')

    if args.restore_logdir is not None:
        assert args.logdir is None, 'Only one of --restore-logdir and --logdir can be specified.'
        assert args.logdir_tag is None, "--logdir-tag can't be specified alongside --logdir"
        tb = tfc.TensorboardParams({
            'tb_logdir':
            os.path.dirname(args.restore_logdir)
        }).freeze()
    elif args.logdir is not None:
        tb = tfc.TensorboardParams({
            'tb_logdir': args.logdir,
            'logdir_tag': args.logdir_tag
        }).freeze()
    else:
        tb = tfc.TensorboardParams({
            'tb_logdir': './tb_metrics',
            'logdir_tag': args.logdir_tag
        }).freeze()

    if args.doValidate:
        assert args.restore_logdir is not None, 'Please specify --restore option along with --validate'
        assert not args.doTest, '--test and --validate cannot be given together'

    if args.doTest:
        assert args.restore_logdir is not None, 'Please specify --restore option along with --test'
        assert not args.doValidate, '--test and --validate cannot be given together'

    globalParams = dlc.Properties({
        'raw_data_dir':
        raw_data_folder,
        'assert_whole_batch':
        not args.partial_batch,
        'logger':
        logger,
        'tb':
        tb,
        'print_steps':
        args.print_steps,
        'num_steps':
        args.num_steps,
        'num_epochs':
        args.num_epochs,
        'num_snapshots':
        args.num_snapshots,
        'data_dir':
        data_folder,
        'generated_data_dir':
        data_folder,
        'image_dir':
        image_folder,
        'ctc_beam_width':
        args.ctc_beam_width,
        'seq2seq_beam_width':
        args.seq2seq_beam_width,
        'valid_frac':
        args.valid_frac,
        'valid_epochs':
        args.valid_epochs,
        'save_all_eval':
        args.save_all_eval,
        'build_image_context':
        args.build_image_context,
        'sum_logloss':
        False,  # setting to true equalizes ctc_loss and log_loss if y_s == squashed_seq
        'dropout':
        None if args.keep_prob >= 1.0 else tfc.DropoutParams({
            'keep_prob':
            args.keep_prob
        }).freeze(),
        'MeanSumAlphaEquals1':
        False,
        'rLambda':
        args.rLambda,  # 0.0005, 0.00005
        'make_training_accuracy_graph':
        False,
        # 'use_ctc_loss': args.use_ctc_loss,
        "swap_memory":
        args.swap_memory,
        'tf_session_allow_growth':
        False,
        'restore_from_checkpoint':
        args.restore_logdir is not None,
        'num_gpus':
        2,
        'towers_per_gpu':
        1,
        'beamsearch_length_penalty':
        1.0,
        'doValidate':
        args.doValidate,
        'doTest':
        args.doTest,
        'doTrain':
        not (args.doValidate or args.doTest),
        'squash_input_seq':
        args.squash_input_seq,
        'att_model':
        'MLP_full',  # '1x1_conv', 'MLP_shared', 'MLP_full'
        'weights_regularizer':
        tf.contrib.layers.l2_regularizer(scale=1.0, scope='L2_Regularizer'),
        # 'embeddings_regularizer': None,
        # 'outputMLP_skip_connections': False,
        'output_reuse_embeddings':
        False,
        'REGROUP_IMAGE': (4, 1),  # None  # (4,1)
        'build_att_modulator':
        False,  # turn off beta-MLP
        'build_scanning_RNN':
        False,
        'init_model_input_transform':
        'full',
        'build_init_model':
        True,
        'adam_beta1':
        0.5,
        'adam_beta2':
        0.9,
        'pLambda':
        0.0
    })

    if args.batch_size is not None:
        globalParams.B = args.batch_size

    if args.queue_capacity is not None:
        globalParams.input_queue_capacity = args.queue_capacity
    if args.alpha is not None:
        globalParams.adam_alpha = args.alpha

    if args.restore_logdir is not None:
        globalParams.logdir = args.restore_logdir
    else:
        globalParams.logdir = dtc.makeTBDir(tb.tb_logdir, tb.logdir_tag)

    # args
    globalParams.storedir = dtc.makeLogDir(globalParams.logdir, 'store')
    globalParams.dump(dtc.makeLogfileName(globalParams.storedir, 'args.pkl'))

    # Hyper Params
    hyper = hyper_params.make_hyper(globalParams, freeze=False)
    if args.restore_logdir is not None:
        hyper.dump(dtc.makeLogfileName(globalParams.storedir, 'hyper.pkl'))
    else:
        hyper.dump(globalParams.storedir, 'hyper.pkl')

    # Logger
    fh = logging.FileHandler(
        dtc.makeLogfileName(globalParams.storedir, 'training.log'))
    fh.setFormatter(dtc.makeFormatter())
    logger.addHandler(fh)
    dtc.setLogLevel(logger, args.logging_level)

    logger.info(' '.join(sys.argv))
    logger.info(
        '\n#################### Default Param Overrides: ####################\n%s',
        globalParams.pformat())
    logger.info(
        '##################################################################\n')
    logger.info(
        '\n#########################  Hyper-params: #########################\n%s',
        hyper.pformat())
    logger.info(
        '##################################################################\n')

    train_multi_gpu.main(raw_data_folder, vgg16_folder, globalParams,
                         hyper.freeze())
Ejemplo n.º 3
0
def main():
    _data_folder = '../data/dataset3'

    parser = arg.ArgumentParser(description='train model')
    parser.add_argument(
        "--num-steps",
        "-n",
        dest="num_steps",
        type=int,
        help=
        "Number of training steps to run. Defaults to -1 if unspecified, i.e. run to completion",
        default=-1)
    parser.add_argument(
        "--num-epochs",
        "-e",
        dest="num_epochs",
        type=int,
        help="Number of training steps to run. Defaults to 1 if unspecified.",
        default=1)
    parser.add_argument(
        "--batch-size",
        "-b",
        dest="batch_size",
        type=int,
        help=
        "Batchsize. If unspecified, defaults to the default value in hyper_params",
        default=None)
    parser.add_argument(
        "--print-steps",
        "-s",
        dest="print_steps",
        type=int,
        help=
        "Number of training steps after which to log results. Defaults to 10 if unspecified",
        default=100)
    parser.add_argument("--data-folder",
                        "-d",
                        dest="data_folder",
                        type=str,
                        help="Data folder. If unspecified, defaults to " +
                        _data_folder,
                        default=_data_folder)
    parser.add_argument(
        "--raw-data-folder",
        dest="raw_data_folder",
        type=str,
        help=
        "Raw data folder. If unspecified, defaults to data_folder/training",
        default=None)
    parser.add_argument(
        "--vgg16-folder",
        dest="vgg16_folder",
        type=str,
        help=
        "vgg16 data folder. If unspecified, defaults to data_folder/vgg16_features",
        default=None)
    parser.add_argument(
        "--image-folder",
        dest="image_folder",
        type=str,
        help=
        "image folder. If unspecified, defaults to data_folder/formula_images",
        default=None)
    parser.add_argument(
        "--partial-batch",
        "-p",
        dest="partial_batch",
        action='store_true',
        help=
        "Sets assert_whole_batch hyper param to False. Default hyper_param value will be used if unspecified"
    )
    parser.add_argument(
        "--logging-level",
        "-l",
        dest="logging_level",
        type=int,
        help=
        "Logging verbosity level from 1 to 5 in increasing order of verbosity.",
        default=4)

    args = parser.parse_args()
    data_folder = args.data_folder
    params = dlc.Properties({
        'num_steps':
        args.num_steps,
        'print_steps':
        args.print_steps,
        'num_epochs':
        args.num_epochs,
        'logger':
        dtc.makeLogger(args.logging_level, set_global=True),
        'build_image_context':
        1,
        'weights_regularizer':
        None,
        'num_gpus':
        1,
        'tb':
        tfc.TensorboardParams({
            'tb_logdir': 'tb_metrics_convnet'
        }).freeze()
    })
    if args.image_folder:
        params.image_folder = args.image_folder
    else:
        params.image_folder = os.path.join(data_folder, 'formula_images')

    if args.raw_data_folder:
        params.raw_data_folder = args.raw_data_folder
    else:
        params.raw_data_folder = os.path.join(data_folder, 'training')
    params.raw_data_dir = params.raw_data_folder

    if args.vgg16_folder:
        params.vgg16_folder = args.vgg16_folder
    else:
        params.vgg16_folder = os.path.join(data_folder, 'vgg16_features')

    if args.batch_size is not None:
        params.B = args.batch_size
    if args.partial_batch:
        params.assert_whole_batch = False

    data_props = dtc.load(params.raw_data_folder, 'data_props.pkl')
    params.image_shape = (data_props['padded_image_dim']['height'],
                          data_props['padded_image_dim']['width'], 3)
    run_convnet(params)