コード例 #1
0
def main():
    train_data, valid_data, test_data, _ = reader.ptb_raw_data(DATA_PATH)

    # 计算一个epoch需要训练的次数
    train_data_len = len(train_data)
    train_batch_len = train_data_len // TRAIN_BATCH_SIZE
    train_epoch_size = (train_batch_len - 1) // TRAIN_NUM_STEP

    valid_data_len = len(valid_data)
    valid_batch_len = valid_data_len // EVAL_BATCH_SIZE
    valid_epoch_size = (valid_batch_len - 1) // EVAL_NUM_STEP

    test_data_len = len(test_data)
    test_batch_len = test_data_len // EVAL_BATCH_SIZE
    test_epoch_size = (test_batch_len - 1) // EVAL_NUM_STEP

    initializer = tf.random_uniform_initializer(-0.05, 0.05)
    with tf.variable_scope("language_model",
                           reuse=None,
                           initializer=initializer):
        train_model = PTBModel(True, TRAIN_BATCH_SIZE, TRAIN_NUM_STEP)

    with tf.variable_scope("language_model",
                           reuse=True,
                           initializer=initializer):
        eval_model = PTBModel(False, EVAL_BATCH_SIZE, EVAL_NUM_STEP)

    # 训练模型。
    with tf.Session() as session:
        tf.global_variables_initializer().run()

        train_queue = reader.ptb_producer(train_data, train_model.batch_size,
                                          train_model.num_steps)
        eval_queue = reader.ptb_producer(valid_data, eval_model.batch_size,
                                         eval_model.num_steps)
        test_queue = reader.ptb_producer(test_data, eval_model.batch_size,
                                         eval_model.num_steps)

        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(sess=session, coord=coord)

        for i in range(NUM_EPOCH):
            print("In iteration: %d" % (i + 1))
            run_epoch(session, train_model, train_queue, train_model.train_op,
                      True, train_epoch_size)

            valid_perplexity = run_epoch(session, eval_model, eval_queue,
                                         tf.no_op(), False, valid_epoch_size)
            print("Epoch: %d Validation Perplexity: %.3f" %
                  (i + 1, valid_perplexity))

        test_perplexity = run_epoch(session, eval_model, test_queue,
                                    tf.no_op(), False, test_epoch_size)
        print("Test Perplexity: %.3f" % test_perplexity)

        coord.request_stop()
        coord.join(threads)
コード例 #2
0
ファイル: LSTM.py プロジェクト: InkCoderYmc/ML-baseAlgorithms
        cost = vals["cost"]
        state = vals["final_state"]

        costs += cost
        iters += model.input.num_steps

        if verbose and step % (model.input.epoch_size // 10) == 10:
            print("%.3f perplexity: %.3f speed: %.0f wps" %
                  (step * 1.0 / model.input.epoch_size, np.exp(
                      costs / iters), iters * model.input.batch_size /
                   (time.time() - start_time)))

    return np.exp(costs / iters)


raw_data = reader.ptb_raw_data('simple-examples/data/')
train_data, valid_data, test_data, _ = raw_data

config = Smallconfig()
eval_congfig = Smallconfig()
eval_congfig.batch_size = 1
eval_congfig.num_steps = 1

with tf.Graph().as_default():
    initializer = tf.random_uniform_initializer(-config.init_scale,
                                                config.init_scale)

    with tf.name_scope("Train"):
        train_input = PTBInput(config=config,
                               data=train_data,
                               name="TrainInput")
コード例 #3
0
            feed_dict[c], feed_dict[h] = state_list[i * 2:(i + 1) * 2]

        # fetch_list에 담긴 final_state의 결과를 state_list로
        cost, *state_list, _ = session.run(fetch_list, feed_dict)

        costs += cost
        iters += m.num_steps

        if is_training and step % (epoch_size // 10) == 10:
            print("%.3f perplecity: %.3f speed: %.0f wps" %
                  (step * 1.0 / epoch_size, np.exp(costs / iters),
                   iters * m.batch_size / (time.time() - start_time)))
    return np.exp(costs / iters)


raw_data = reader.ptb_raw_data('../simple-examples/data')
train_data, valid_data, test_data, _ = raw_data

with tf.Session() as session:

    initializer = tf.random_uniform_initializer(-config.init_scale,
                                                config.init_scale)
    # 학습, 검증, 테스트 모델
    with tf.variable_scope("model", reuse=None, initializer=initializer):
        m = PTBModel(config, is_training=True)
    with tf.variable_scope("model", reuse=True, initializer=initializer):
        mvalid = PTBModel(config)
        mtest = PTBModel(eval_config)

    tf.initialize_all_variables().run()
コード例 #4
0
                 embedding_size,
                 rnn_size,
                 batch_size,
                 learning_rate,
                 training_seq_len,
                 vocab_size,
                 infer_sample=False):
        self.embedding_size = embedding_size
        self.rnn_size = rnn_size
        self.vocab_size = vocab_size
        self.infer_sample = infer_sample
        self.learning_rate = learning_rate

        if infer_sample:
            self.batch_size = 1
            self.training_seq_len = 1
        else:
            self.batch_size = batch_size
            self.training_seq_len = training_seq_len

        self.lstm_cell = tf.contrib.rnn.B


if __name__ == "__main__":
    file = "./data/pg100.txt"
    s_text = open(file, mode="r").read().strip()
    s_text = s_text.replace('\r\n', '')
    s_text = s_text.replace('\n', '')
    print(len(s_text))
    train, valid, test, _ = reader.ptb_raw_data("./data/ptb/")
    print(_)
コード例 #5
0
        state = vals["final_state"]

        costs += cost  # 累加cost到costs
        iters += model.input.num_steps  # 累加num_steps到iters

        if verbose and step % (model.input.epoch_size // 10) == 10:  # 每完成约10%的epoch,就进行一次结果的展示
            # 一次展示当前epoch的进度,perplexity和训练速度
            # perplexity(即平均cost的自然常数指数,是语言模型中用来比较模型性能的重要指标,越低表示模型输出的概率分布在预测样本上越好)
            print("%.3f perplexity: %.3f speed: %.0f wps" %
                  (step * 1.0 / model.input.epoch_size, np.exp(costs / iters),
                   iters * model.input.batch_size / (time.time() - start_time)))

    return np.exp(costs / iters)  # 返回perplexity作为函数结果


raw_data = reader.ptb_raw_data('data/')  # 直接读取的数据
train_data, valid_data, test_data, _ = raw_data  # 得到训练数据,验证数据和测试数据

config = SmallConfig()  # 定义训练模型的配置为SmallConfig
eval_config = SmallConfig()  # 测试配置需和训练配置一致
eval_config.batch_size = 1  # 将测试配置的batch_size和num_steps修改为1
eval_config.num_steps = 1

# 创建默认的Graph
with tf.Graph().as_default():
    # 设置参数的初始化器,令参数范围在[-init_scale,init_scale]之间
    initializer = tf.random_uniform_initializer(-config.init_scale, config.init_scale)

    '''使用PTBInput和PTBModel创建一个用来训练的模型m,以及用来验证的模型mvalid和测试的模型mtest,
    其中训练和验证模型直接使用前面的config,测试模型使用前面的测试配置eval_config'''
    # 训练模型m
コード例 #6
0
    elif FLAGS.model == 'medium':
        return MediumConfig
    elif FLAGS.model == 'large':
        return LargeConfig
    elif FLAGS.mosel == 'test':
        return TestConfig
    else:
        raise ValueError('Invalid model: %s', FLAGS.model)


if __name__ == '__main__':
    if not FLAGS.data_path:
        raise ValueError('Must set --data_path to PTB data directory')
    print(FLAGS.data_path)

    raw_data = reader.ptb_raw_data(FLAGS.data_path)
    train_data, valid_data, test_data, _ = raw_data

    config = get_config()
    eval_config = get_config()
    eval_config.batch_size = 1
    eval_config.num_steps = 1

    with tf.Graph().as_default(), tf.Session() as session:
        initializer = tf.random_uniform_initializer(-config.init_scale,
                                                    config.init_scale)
        with tf.variable_scope('model', reuse=None, initializer=initializer):
            m = PTBModel(is_training=True, config=config)  #训练模型
        with tf.variable_scope('model', reuse=True, initializer=initializer):
            mvalid = PTBModel(is_training=False, config=config)  #交叉验证模型和测试模型
            mtest = PTBModel(is_training=False, config=eval_config)
コード例 #7
0
ファイル: LSTM.py プロジェクト: heruohan/RNN
        cost = vals['cost']
        state = vals['final_state']

        costs += cost
        iters += model.input.num_steps

        if (verbose and (step % (model.input.epoch_size // 10) == 0)):
            print('%.3f perplexity: %.3f speed: %.0f wps' % \
                  (step/model.input.epoch_size,np.exp(costs/iters),\
                   iters*model.input.batch_size/(time.time()-start_time)))

    return (np.exp(costs / iters))  #cost是平均过batch_size的.


##############解压PTB数据.
raw_data = reader.ptb_raw_data(r'E:\tensorflow\RNN\simple-examples\data')
train_data, valid_data, test_data, _ = raw_data

config = SmallConfig()

eval_config = SmallConfig()
eval_config.batch_size = 1
eval_config.num_steps = 1

###########创建默认Graph.
with tf.Graph().as_default():
    initializer=tf.random_uniform_initializer(-config.init_scale,\
                                              config.init_scale)

    ####
    with tf.name_scope('Train'):
コード例 #8
0
ファイル: ptb_word_lm.py プロジェクト: crystal0913/AI
def main(_):
    if not FLAGS.data_path:
        raise ValueError("Must set --data_path to PTB data directory")
    gpus = [
        x.name for x in device_lib.list_local_devices()
        if x.device_type == "GPU"
    ]
    if FLAGS.num_gpus > len(gpus):
        raise ValueError("Your machine has only %d gpus "
                         "which is less than the requested --num_gpus=%d." %
                         (len(gpus), FLAGS.num_gpus))

    raw_data = reader.ptb_raw_data(FLAGS.data_path)
    train_data, valid_data, test_data, _ = raw_data

    config = get_config()
    eval_config = get_config()
    eval_config.batch_size = 1
    eval_config.num_steps = 1

    with tf.Graph().as_default():
        initializer = tf.random_uniform_initializer(-config.init_scale,
                                                    config.init_scale)

        with tf.name_scope("Train"):
            train_input = PTBInput(config=config,
                                   data=train_data,
                                   name="TrainInput")
            with tf.variable_scope("Model",
                                   reuse=None,
                                   initializer=initializer):
                m = PTBModel(is_training=True,
                             config=config,
                             input_=train_input)
            tf.summary.scalar("Training Loss", m.cost)
            tf.summary.scalar("Learning Rate", m.lr)

        with tf.name_scope("Valid"):
            valid_input = PTBInput(config=config,
                                   data=valid_data,
                                   name="ValidInput")
            with tf.variable_scope("Model",
                                   reuse=True,
                                   initializer=initializer):
                mvalid = PTBModel(is_training=False,
                                  config=config,
                                  input_=valid_input)
            tf.summary.scalar("Validation Loss", mvalid.cost)

        with tf.name_scope("Test"):
            test_input = PTBInput(config=eval_config,
                                  data=test_data,
                                  name="TestInput")
            with tf.variable_scope("Model",
                                   reuse=True,
                                   initializer=initializer):
                mtest = PTBModel(is_training=False,
                                 config=eval_config,
                                 input_=test_input)

        models = {"Train": m, "Valid": mvalid, "Test": mtest}
        for name, model in models.items():
            model.export_ops(name)
        metagraph = tf.train.export_meta_graph()
        if tf.__version__ < "1.1.0" and FLAGS.num_gpus > 1:
            raise ValueError(
                "num_gpus > 1 is not supported for TensorFlow versions "
                "below 1.1.0")
        soft_placement = False
        if FLAGS.num_gpus > 1:
            soft_placement = True
            util.auto_parallel(metagraph, m)

    with tf.Graph().as_default():
        tf.train.import_meta_graph(metagraph)
        for model in models.values():
            model.import_ops()
        sv = tf.train.Supervisor(logdir=FLAGS.save_path)
        config_proto = tf.ConfigProto(allow_soft_placement=soft_placement)
        with sv.managed_session(config=config_proto) as session:
            for i in range(config.max_max_epoch):
                lr_decay = config.lr_decay**max(i + 1 - config.max_epoch, 0.0)
                m.assign_lr(session, config.learning_rate * lr_decay)

                print("Epoch: %d Learning rate: %.3f" %
                      (i + 1, session.run(m.lr)))
                train_perplexity = run_epoch(session,
                                             m,
                                             eval_op=m.train_op,
                                             verbose=True)
                print("Epoch: %d Train Perplexity: %.3f" %
                      (i + 1, train_perplexity))
                valid_perplexity = run_epoch(session, mvalid)
                print("Epoch: %d Valid Perplexity: %.3f" %
                      (i + 1, valid_perplexity))

            test_perplexity = run_epoch(session, mtest)
            print("Test Perplexity: %.3f" % test_perplexity)

            if FLAGS.save_path:
                print("Saving model to %s." % FLAGS.save_path)
                sv.saver.save(session,
                              FLAGS.save_path,
                              global_step=sv.global_step)
コード例 #9
0
def get_all_raw_data():
    raw_data = reader.ptb_raw_data('ptb_data')
    return raw_data
コード例 #10
0
def main(_):
    # 原始数据
    train_data, valid_data, test_data, _ = reader.ptb_raw_data(DATA_PATH)

    # 计算一个epoch需要训练的次数
    train_data_len = len(train_data)  # 数据集的大小
    train_batch_len = train_data_len // TRAIN_BATCH_SIZE  # batch的个数
    train_epoch_size = (train_batch_len - 1) // TRAIN_NUM_STEP  # 该epoch的训练次数

    valid_data_len = len(valid_data)
    valid_batch_len = valid_data_len // EVAL_BATCH_SIZE
    valid_epoch_size = (valid_batch_len - 1) // EVAL_NUM_STEP

    test_data_len = len(test_data)
    test_batch_len = test_data_len // EVAL_BATCH_SIZE
    test_epoch_size = (test_batch_len - 1) // EVAL_NUM_STEP

    # 定义初始化函数
    initializer = tf.random_uniform_initializer(-0.05, 0.05)

    # 定义训练用的模型
    with tf.variable_scope('language_model',
                           reuse=None,
                           initializer=initializer):
        train_model = PTBModel(True, TRAIN_BATCH_SIZE, TRAIN_NUM_STEP)

    # 定义评估用的模型
    with tf.variable_scope('language_model',
                           reuse=True,
                           initializer=initializer):
        eval_model = PTBModel(False, EVAL_BATCH_SIZE, EVAL_NUM_STEP)

    # 生成数据队列,必须放在开启多线程之前
    train_queue = reader.ptb_producer(train_data, train_model.batch_size,
                                      train_model.num_steps)
    valid_queue = reader.ptb_producer(valid_data, eval_model.batch_size,
                                      eval_model.num_steps)
    test_queue = reader.ptb_producer(test_data, eval_model.batch_size,
                                     eval_model.num_steps)

    with tf.Session() as sess:
        tf.global_variables_initializer().run()

        # 开启多线程从而支持ptb_producer()使用tf.train.range_input_producer()
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(sess=sess, coord=coord)

        # 使用训练数据训练模型
        for i in range(NUM_EPOCH):
            print('In iteration: %d' % (i + 1))
            run_epoch(sess, train_model, train_queue, train_model.train_op,
                      True, train_epoch_size)  # 训练模型
            valid_perplexity = run_epoch(sess, eval_model, valid_queue,
                                         tf.no_op(), False,
                                         valid_epoch_size)  # 使用验证数据评估模型
            print('Epoch: %d Validation Perplexity: %.3f' %
                  (i + 1, valid_perplexity))

        # 使用测试数据测试模型
        test_perplexity = run_epoch(sess, eval_model, test_queue, tf.no_op(),
                                    False, test_epoch_size)
        print('Test Perplexity: %.3f' % test_perplexity)

        saver = tf.train.Saver()
        saver.save(sess, "save_path/model2")
        # 停止所有线程
        coord.request_stop()
        coord.join(threads)
コード例 #11
0
            feed_dict[c] = state[i].c
            feed_dict[h] = state[i].h
        vals = session.run(fetches, feed_dict)
        cost = vals["cost"]
        state = vals["final_state"]
        costs += cost
        iters += model.input.num_steps

        if verbose and step % (model.input.epoch_size // 10) == 10:
            print("%.3f perplexity: %.3f speed: %.0f wps" % (step * 1.0 / model.input.epoch_size, np.exp(costs / iters),
                                                             iters * model.input.batch_size / (
                                                                     time.time() - start_time)))
    return np.exp(costs / iters)


raw_data = reader.ptb_raw_data(r'G:/PycharmWorkspace/tf/src/PTB_data/simple-examples/data/')
train_data, valid_data, test_data, _ = raw_data

config = SmallConfig()
eval_config = SmallConfig()
eval_config.batch_size = 1
eval_config.num_steps = 1

with tf.Graph().as_default():
    initializer = tf.random_uniform_initializer(-config.init_scale, config.init_scale)
    with tf.name_scope("Train"):
        train_input = PTBInput(config=config, data=train_data, name="TrainInput")
        with tf.variable_scope("Model", reuse=None, initializer=initializer):
            m = PTBModel(is_training=True, config=config, input_=train_input)

    with tf.name_scope("Valid"):
コード例 #12
0
ファイル: lstm_api_test.py プロジェクト: crystal0913/AI
    else:
        raise ValueError("Invalid model: %s", FLAGS.model)


# def main(_):
if __name__ == '__main__':
    if not FLAGS.data_path:
        raise ValueError("Must set --data_path to PTB data directory")
    print(FLAGS.data_path)

    config = get_config()
    eval_config = get_config()
    eval_config.batch_size = 1
    eval_config.num_steps = 1
    # 原始数据
    train_data, valid_data, test_data, _ = reader.ptb_raw_data(FLAGS.data_path)

    # 计算一个epoch需要训练的次数
    train_data_len = len(train_data)  # 数据集的大小
    train_batch_len = train_data_len // config.batch_size  # batch的个数
    train_epoch_size = (train_batch_len - 1) // config.num_steps  # 该epoch的训练次数

    valid_data_len = len(valid_data)
    valid_batch_len = valid_data_len // eval_config.batch_size
    valid_epoch_size = (valid_batch_len - 1) // eval_config.num_steps

    test_data_len = len(test_data)
    test_batch_len = test_data_len // eval_config.batch_size
    test_epoch_size = (test_batch_len - 1) // eval_config.num_steps

    # 生成数据队列,必须放在开启多线程之前
コード例 #13
0
ファイル: test.py プロジェクト: balabala312/project_hj
        costs += cost  # 累加cost到costs
        iters += model.input.num_steps  # 累加num_steps到iters

        if verbose and step % (model.input.epoch_size //
                               10) == 10:  # 每完成约10%的epoch,就进行一次结果的展示
            # 一次展示当前epoch的进度,perplexity和训练速度
            # perplexity(即平均cost的自然常数指数,是语言模型中用来比较模型性能的重要指标,越低表示模型输出的概率分布在预测样本上越好)
            print("%.3f perplexity: %.3f speed: %.0f wps" %
                  (step * 1.0 / model.input.epoch_size, np.exp(
                      costs / iters), iters * model.input.batch_size /
                   (time.time() - start_time)))

    return np.exp(costs / iters)  # 返回perplexity作为函数结果


raw_data = reader.ptb_raw_data(
    'F://研究生资料/data/simple-examples/data/')  # 直接读取解压后的数据
train_data, valid_data, test_data, _ = raw_data  # 得到训练数据,验证数据和测试数据

config = SmallConfig()  # 定义训练模型的配置为SmallConfig
eval_config = SmallConfig()  # 测试配置需和训练配置一致
eval_config.batch_size = 1  # 将测试配置的batch_size和num_steps修改为1
eval_config.num_steps = 1

# 创建默认的Graph
with tf.Graph().as_default():
    # 设置参数的初始化器,令参数范围在[-init_scale,init_scale]之间
    initializer = tf.random_uniform_initializer(-config.init_scale,
                                                config.init_scale)
    '''使用PTBInput和PTBModel创建一个用来训练的模型m,以及用来验证的模型mvalid和测试的模型mtest,
    其中训练和验证模型直接使用前面的config,测试模型使用前面的测试配置eval_config'''
    # 训练模型m