예제 #1
0
파일: 1000bet.py 프로젝트: DoLNw/PythonSSQ
def test():
    batch_size = 1
    print('## loading model from %s...' % model_dir)

    input_data = tf.placeholder(tf.int32, [batch_size, 7])
    end_points = rnn_model(model='lstm', input_data=input_data, output_data=None, vocab_size=33+16,
                            rnn_size=128, output_num=7,input_num=7,num_layers=7, batch_size=batch_size, learning_rate=0.01)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        checkpoint = tf.train.latest_checkpoint(model_dir)
        saver.restore(sess, checkpoint)
        ssqdata = get_datas_from_database()

        predict = sess.run(end_points['prediction'], feed_dict={input_data: [ssqdata[2223]]})
        predict_result, aa = get_correct(predict)
        print("概率最大的一组: {}".format(predict_result))

        for c in range(2, 11):
            j = -1
            for i in aa:
                j += 1
                predict[j][i] -= 1
            predict_result, aa = get_correct(predict)
            print("概率第{}大的一组: {}".format(c, predict_result))
예제 #2
0
def gen_poem():
    batch_size = 1
    print('## loading model from %s' % model_dir)

    input_data = tf.placeholder(tf.int32, [batch_size, None])

    end_points = rnn_model(model='lstm',
                           input_data=input_data,
                           output_data=None,
                           vocab_size=33 + 16,
                           rnn_size=128,
                           output_num=7,
                           num_layers=7,
                           batch_size=1,
                           learning_rate=0.01)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        checkpoint = tf.train.latest_checkpoint(model_dir)
        saver.restore(sess, checkpoint)
        ssqdata = get_exl_data()
        # x = np.array([list(map(word_int_map.get, start_token))])
        x = [ssqdata[len(ssqdata) - 1]]
        print("input: %s" % (x + np.asarray([1, 1, 1, 1, 1, 1, -32])))
        [predict, last_state
         ] = sess.run([end_points['prediction'], end_points['last_state']],
                      feed_dict={input_data: x})
        poem_ = np.argmax(np.array(predict), axis=1)
        results = poem_ + np.asarray([1, 1, 1, 1, 1, 1, -32])
        print("output:" % results)
        return poem_
예제 #3
0
파일: train.py 프로젝트: lawenliu/algorithm
def run_training():
    if not os.path.exists(FLAGS.model_dir):
        os.makedirs(FLAGS.model_dir)

    poems_vector, word_to_int, vocabularies = process_poems(FLAGS.file_path)
    batches_inputs, batches_outputs = generate_batch(FLAGS.batch_size,
                                                     poems_vector, word_to_int)

    input_data = tf.placeholder(tf.int32, [FLAGS.batch_size, None])
    output_targets = tf.placeholder(tf.int32, [FLAGS.batch_size, None])

    end_points = rnn_model(model='lstm',
                           input_data=input_data,
                           output_data=output_targets,
                           vocab_size=len(vocabularies),
                           rnn_size=128,
                           num_layers=2,
                           batch_size=64,
                           learning_rate=FLAGS.learning_rate)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        # sess = tf_debug.LocalCLIDebugWrapperSession(sess=sess)
        # sess.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan)
        sess.run(init_op)

        start_epoch = 0
        checkpoint = tf.train.latest_checkpoint(FLAGS.model_dir)
        if checkpoint:
            saver.restore(sess, checkpoint)
            print("## restore from the checkpoint {0}".format(checkpoint))
            start_epoch += int(checkpoint.split('-')[-1])
        print('## start training...')
        try:
            for epoch in range(start_epoch, FLAGS.epochs):
                n = 0
                n_chunk = len(poems_vector) // FLAGS.batch_size
                #for batch in range(n_chunk):
                #    loss, _, _ = sess.run([
                #        end_points['total_loss'],
                #        end_points['last_state'],
                #        end_points['train_op']
                #    ], feed_dict={input_data: batches_inputs[n], output_targets: batches_outputs[n]})
                #    n += 1
                #    print('Epoch: %d, batch: %d, training loss: %.6f' % (epoch, batch, loss))
                if epoch % 6 == 0:
                    saver.save(sess,
                               os.path.join(FLAGS.model_dir,
                                            FLAGS.model_prefix),
                               global_step=epoch)
        except KeyboardInterrupt:
            print('## Interrupt manually, try saving checkpoint for now...')
            saver.save(sess,
                       os.path.join(FLAGS.model_dir, FLAGS.model_prefix),
                       global_step=epoch)
            print(
                '## Last epoch were saved, next time will start from epoch {}.'
                .format(epoch))
예제 #4
0
def run_training():
    if not os.path.exists(FLAGS.model_dir):
        os.makedirs(FLAGS.model_dir)

    ssqdata = get_datas_from_database()
    trainnum = 2206
    batches_inputs = ssqdata[0:trainnum - 1]
    batches_outputs = ssqdata[1:trainnum]
    FLAGS.batch_size = trainnum - 1
    del ssqdata

    input_data = tf.placeholder(tf.int32, [FLAGS.batch_size, 7])
    output_targets = tf.placeholder(tf.int32, [FLAGS.batch_size, 7])
    end_points = rnn_model(model='lstm',
                           input_data=input_data,
                           output_data=output_targets,
                           vocab_size=33 + 16,
                           output_num=7,
                           input_num=7,
                           rnn_size=128,
                           num_layers=7,
                           batch_size=FLAGS.batch_size,
                           learning_rate=FLAGS.learning_rate)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        start_epoch = 0

        checkpoint = tf.train.latest_checkpoint(FLAGS.model_dir)
        if checkpoint:
            saver.restore(sess, checkpoint)
            print("## restore from the checkpoint {0}".format(checkpoint))
            start_epoch += int(checkpoint.split('-')[-1])
        print('## start training...')

        for epoch in range(start_epoch, FLAGS.epochs):
            loss, _, _ = sess.run([
                end_points['total_loss'], end_points['last_state'],
                end_points['train_op']
            ],
                                  feed_dict={
                                      input_data: batches_inputs,
                                      output_targets: batches_outputs
                                  })

            print('Epoch: %d, training loss: %.6f' % (epoch, loss))
            if epoch % 10 == 0:
                saver.save(sess,
                           os.path.join(FLAGS.model_dir, FLAGS.model_prefix),
                           global_step=epoch)
예제 #5
0
def gen_poem(begin_word):
    batch_size = 1
    print('## loading corpus from %s' % model_dir)
    poems_vector, word_int_map, vocabularies = process_poems(corpus_file)

    input_data = tf.placeholder(tf.int32, [batch_size, None])

    end_points = rnn_model(model='lstm',
                           input_data=input_data,
                           output_data=None,
                           vocab_size=len(vocabularies),
                           rnn_size=128,
                           num_layers=2,
                           batch_size=64,
                           learning_rate=lr)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        checkpoint = tf.train.latest_checkpoint(model_dir)
        saver.restore(sess, checkpoint)

        x = np.array([list(map(word_int_map.get, start_token))])

        [predict, last_state
         ] = sess.run([end_points['prediction'], end_points['last_state']],
                      feed_dict={input_data: x})
        if begin_word:
            word = begin_word
        else:
            word = to_word(predict, vocabularies)
        poem_ = ''

        i = 0
        while word != end_token:
            poem_ += word
            i += 1
            if i >= 24:
                break
            x = np.zeros((1, 1))
            x[0, 0] = word_int_map[word]
            [predict, last_state
             ] = sess.run([end_points['prediction'], end_points['last_state']],
                          feed_dict={
                              input_data: x,
                              end_points['initial_state']: last_state
                          })
            word = to_word(predict, vocabularies)

        return poem_
예제 #6
0
def gen_poem():
    batch_size = 1
    print('## loading model from %s' % model_dir)
    input_data = tf.compat.v1.placeholder(tf.float32, [1, 10, 7 + 8, 1])
    logits = inference(input_data, 1, reuse=False, output_num=128)

    # print(tf.shape(input_data))
    output_targets = tf.compat.v1.placeholder(tf.int32, [1, None])
    end_points = rnn_model(model='lstm',
                           input_data=logits,
                           output_data=output_targets,
                           vocab_size=33 + 16,
                           output_num=7,
                           rnn_size=128,
                           num_layers=7,
                           batch_size=1,
                           learning_rate=0.001)

    # input_data = tf.placeholder(tf.int32, [batch_size, None])
    #
    # end_points = rnn_model(model='lstm', input_data=input_data, output_data=None, vocab_size=33,
    #                        rnn_size=128, num_layers=7, batch_size=0, learning_rate=0.01)

    saver = tf.compat.v1.train.Saver(tf.compat.v1.global_variables())
    init_op = tf.group(tf.compat.v1.global_variables_initializer(),
                       tf.compat.v1.local_variables_initializer())
    with tf.compat.v1.Session() as sess:
        sess.run(init_op)

        checkpoint = tf.train.latest_checkpoint('./model4all_v4/')
        saver.restore(sess, checkpoint)
        # saver.restore(sess, "E:/workplace/tensorflow_poems-master/model4all/poems-208368")
        # ssqdata = get_exl_data(random_order=True,use_resnet=True)
        # ssqdata = get_exl_data_v3(random_order=True, use_resnet=True)
        ssqdata = get_exl_data_by_period(random_order=False,
                                         use_resnet=True,
                                         times=10)
        x = [ssqdata[len(ssqdata) - 1]]
        print("input: %s" %
              (x + np.asarray([[[[0], [0], [0], [0], [0], [0], [-33], [0], [0],
                                 [0], [0], [0], [0], [0], [0]]]])))
        [predict, last_state
         ] = sess.run([end_points['prediction'], end_points['last_state']],
                      feed_dict={input_data: x})
        poem_ = np.argmax(np.array(predict), axis=1)
        sorted_result = np.argsort(np.array(predict), axis=1)
        results = poem_ + np.asarray([0, 0, 0, 0, 0, 0, -33])
        print(sorted_result)
        print("output: %s" % results)
        return poem_
예제 #7
0
def gen_poem():
    batch_size = 1
    print('## loading model from %s' % model_dir)
    input_data = tf.placeholder(tf.float32, [1, 1, 7, 1])
    logits = inference(input_data, 10, reuse=False, output_num=128)

    # print(tf.shape(input_data))
    output_targets = tf.placeholder(tf.int32, [1, None])
    end_points = rnn_model(model='lstm',
                           input_data=logits,
                           output_data=output_targets,
                           vocab_size=33 + 16,
                           output_num=7,
                           rnn_size=128,
                           num_layers=7,
                           batch_size=1,
                           learning_rate=0.01)

    # input_data = tf.placeholder(tf.int32, [batch_size, None])
    #
    # end_points = rnn_model(model='lstm', input_data=input_data, output_data=None, vocab_size=33,
    #                        rnn_size=128, num_layers=7, batch_size=1, learning_rate=0.01)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        # checkpoint = tf.train.latest_checkpoint('./model4all/')
        # saver.restore(sess, checkpoint)
        saver.restore(sess,
                      "F:/tensorflow_poems-master/model4all/poems-401713")
        ssqdata = get_exl_data(random_order=True, use_resnet=True)
        # x = np.array([list(map(word_int_map.get, start_token))])
        x = [ssqdata[len(ssqdata) - 1]]
        print("input: %s" %
              (x + np.asarray([[[[1], [1], [1], [1], [1], [1], [-32]]]])))
        [predict, last_state
         ] = sess.run([end_points['prediction'], end_points['last_state']],
                      feed_dict={input_data: x})
        poem_ = np.argmax(np.array(predict), axis=1)
        sorted_result = np.argsort(np.array(predict), axis=1)
        results = poem_ + np.asarray([1, 1, 1, 1, 1, 1, -32])
        print(sorted_result)
        print("output: %s" % results)
        poem_ = np.argmin(np.array(predict), axis=1)
        results = poem_ + np.asarray([1, 1, 1, 1, 1, 1, -32])
        print("min output:%s" % results)
        return poem_
예제 #8
0
def run_training():
    if not os.path.exists(FLAGS.model_dir):
        os.makedirs(FLAGS.model_dir)

    poems_vector, word_to_int, vocabularies = process_poems(FLAGS.file_path)
    batches_inputs, batches_outputs = generate_batch(FLAGS.batch_size, poems_vector, word_to_int)

    input_data = tf.placeholder(tf.int32, [FLAGS.batch_size, None])
    output_targets = tf.placeholder(tf.int32, [FLAGS.batch_size, None])

    end_points = rnn_model(model='lstm', input_data=input_data, output_data=output_targets, vocab_size=len(
        vocabularies), rnn_size=128, num_layers=2, batch_size=64, learning_rate=FLAGS.learning_rate)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    with tf.Session() as sess:
        # sess = tf_debug.LocalCLIDebugWrapperSession(sess=sess)
        # sess.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan)
        sess.run(init_op)

        start_epoch = 0
        checkpoint = tf.train.latest_checkpoint(FLAGS.model_dir)
        if checkpoint:
            saver.restore(sess, checkpoint)
            print("## restore from the checkpoint {0}".format(checkpoint))
            start_epoch += int(checkpoint.split('-')[-1])
        print('## start training...')
        try:
            for epoch in range(start_epoch, FLAGS.epochs):
                n = 0
                n_chunk = len(poems_vector) // FLAGS.batch_size
                for batch in range(n_chunk):
                    loss, _, _ = sess.run([
                        end_points['total_loss'],
                        end_points['last_state'],
                        end_points['train_op']
                    ], feed_dict={input_data: batches_inputs[n], output_targets: batches_outputs[n]})
                    n += 1
                    print('Epoch: %d, batch: %d, training loss: %.6f' % (epoch, batch, loss))
                if epoch % 6 == 0:
                    saver.save(sess, os.path.join(FLAGS.model_dir, FLAGS.model_prefix), global_step=epoch)
        except KeyboardInterrupt:
            print('## Interrupt manually, try saving checkpoint for now...')
            saver.save(sess, os.path.join(FLAGS.model_dir, FLAGS.model_prefix), global_step=epoch)
            print('## Last epoch were saved, next time will start from epoch {}.'.format(epoch))
예제 #9
0
def gen_poem(begin_word):
    batch_size = 1
    print('## loading corpus from %s' % model_dir)
    poems_vector, word_int_map, vocabularies = process_poems(corpus_fileh)

    input_data = tf.placeholder(tf.int32, [batch_size, None])

    end_points = rnn_model(model='lstm', input_data=input_data, output_data=None, vocab_size=len(
        vocabularies), rnn_size=128, num_layers=2, batch_size=64, learning_rate=FLAGS.learning_rate)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        checkpoint = tf.train.latest_checkpoint(model_dir)
        saver.restore(sess, checkpoint)

        x = np.array([list(map(word_int_map.get, start_token))])

        [predict, last_state] = sess.run([end_points['prediction'], end_points['last_state']],
                                         feed_dict={input_data: x})
        if begin_word:
            word = begin_word
        else:
            word = to_word(predict, vocabularies)
        poem_ = ''

        i = 0
        while word != end_token:
            poem_ += word
            i += 1
            if i >= 24:
                break
            x = np.zeros((1, 1))
            x[0, 0] = word_int_map[word]
            [predict, last_state] = sess.run([end_points['prediction'], end_points['last_state']],
                                             feed_dict={input_data: x, end_points['initial_state']: last_state})
            word = to_word(predict, vocabularies)

        return poem_
예제 #10
0
 def __init__(self, s_word):
     self.begin_word = s_word
     self.start_token = 'B'
     self.end_token = 'E'
     self.model_dir = './model/'
     self.corpus_file = './data/poems.txt'
     self.lr = 0.0002
     self.RATE = 0.008
     self.max_len = 78
     self.poems_vector, self.word_int_map, self.vocabs = process_poems(
         self.corpus_file)
     self.input_data = tf.placeholder(tf.int32, [1, None])
     self.end_points = rnn_model(model='lstm',
                                 input_data=self.input_data,
                                 output_data=None,
                                 vocab_size=len(self.vocabs),
                                 rnn_size=128,
                                 num_layers=2,
                                 batch_size=64,
                                 learning_rate=self.lr)
     self._parse_input()
예제 #11
0
파일: test.py 프로젝트: DoLNw/PythonSSQ
def test():
    batch_size = 1
    print('## loading model from %s...' % model_dir)

    input_data = tf.placeholder(tf.int32, [batch_size, 7])
    end_points = rnn_model(model='lstm',
                           input_data=input_data,
                           output_data=None,
                           vocab_size=33 + 16,
                           rnn_size=128,
                           output_num=7,
                           input_num=7,
                           num_layers=7,
                           batch_size=batch_size,
                           learning_rate=0.01)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        checkpoint = tf.train.latest_checkpoint(model_dir)
        saver.restore(sess, checkpoint)
        ssqdata = get_datas_from_database()

        accuracy = 0
        for i in range(2206, 2224):
            predict = sess.run(end_points['prediction'],
                               feed_dict={input_data: [ssqdata[i]]})
            correct_result = np.asarray(ssqdata[i + 1]) + np.asarray(
                [1, 1, 1, 1, 1, 1, 1])
            predict_result = get_correct(predict)
            matches = match(correct_result, predict_result)
            print("组{}正确率: {}".format(i, reduce(sum, matches) / 8))
            accuracy += reduce(sum, matches) / 8
        accuracy /= 18
        print("模型准确率: {}".format(accuracy))
예제 #12
0
def predict():
    batch_size = 1
    print('## loading model from %s...' % model_dir)
    input_data = tf.placeholder(tf.int32, [batch_size, None])

    end_points = rnn_model(model='lstm',
                           input_data=input_data,
                           output_data=None,
                           vocab_size=33 + 16,
                           rnn_size=128,
                           output_num=7,
                           input_num=7,
                           num_layers=7,
                           batch_size=1,
                           learning_rate=0.01)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        checkpoint = tf.train.latest_checkpoint(model_dir)
        saver.restore(sess, checkpoint)
        ssqdata = get_datas_from_database()

        x = ssqdata[len(ssqdata) - 1]
        print("input: %s" % (x + np.asarray([1, 1, 1, 1, 1, 1, 1])))
        [predict, last_state
         ] = sess.run([end_points['prediction'], end_points['last_state']],
                      feed_dict={input_data: [x]})
        results = get_correct(predict)
        print("output:%s" % results)
        print("预测下一组双色球结果:红 {} {} {} {} {} {}, 蓝 {}".format(
            results[0], results[1], results[2], results[3], results[4],
            results[5], results[6]))
예제 #13
0
def run_training():
    # dir to save model

    if os.path.exists(FLAGS.model_dir):
        os.mkdir(FLAGS.model_dir)

    poems_vector, word_to_int, vocabularies = process_poems(FLAGS.file_path)
    batches_input, batches_outputs = generate_batch(FLAGS.batch_size,
                                                    poems_vector, word_to_int)

    # print(word_to_int)
    # print(batches_input[0][0])
    # print(batches_outputs[0][1])
    # print(batches_outputs)
    # time.sleep(10000)

    input_data = tf.placeholder(tf.int32, [FLAGS.batch_size, None])
    output_targets = tf.placeholder(tf.int32, [FLAGS.batch_size, None])

    end_points = rnn_model(model="lstm",
                           input_data=input_data,
                           output_data=output_targets,
                           vocab_size=len(vocabularies),
                           rnn_size=128,
                           num_layers=2,
                           batch_size=64,
                           learning_rate=FLAGS.learning_rate)

    saver = tf.train.Saver(tf.global_variables())

    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())

    with tf.Session() as sess:

        # 初始化所有的变量
        sess.run(init_op)

        start_epoch = 0
        checkpoint = tf.train.latest_checkpoint(FLAGS.model_dir)

        if checkpoint:
            saver.restore(sess, checkpoint)
            print("### restore from the checkpoint {0}".format(checkpoint))
            start_epoch += int(checkpoint.split('-')[-1])

        print(' ## start training... ')

        try:

            for epoch in range(start_epoch, FLAGS.epochs):
                n = 0
                n_chunk = len(poems_vector) // FLAGS.batch_size
                for batch in range(n_chunk):
                    loss, _, _ = sess.run(
                        [
                            end_points['total_loss'], end_points['last_state'],
                            end_points['train_op']
                        ],
                        feed_dict={
                            input_data: batches_input[n],
                            output_targets: batches_outputs[n]
                        })
                    n += 1
                    print('Epoch: %d, batch: %d, training loss: %.6f' %
                          (epoch, batch, loss))

                if epoch % 6:
                    saver.save(sess,
                               os.path.join(FLAGS.model_dir,
                                            FLAGS.model_prefix),
                               global_step=epoch)
        except KeyboardInterrupt:
            print('## Interrupt manually, try saving checkpoint for now...')
            saver.save(sess,
                       os.path.join(FLAGS.model_dir, FLAGS.model_prefix),
                       global_step=epoch)
            print(
                '## Last epoch were saved, next time will start from epoch {}.'
                .format(epoch))
예제 #14
0
def gen_poem(begin_word):
    # 根据首个汉字作诗
    # 作诗时, batch_size设为1
    batch_size = 1
    print('## loading corpus from %s' % model_dir)

    # 读取诗集文件
    # 依次得到数字ID表示的诗句、汉字-ID的映射map、所有的汉字的列表
    poems_vector, word_int_map, vocabularies = process_poems(corpus_file)
    # 声明输入的占位符
    input_data = tf.placeholder(tf.int32, [batch_size, None])
    # 通过rnn模型得到结果状态集
    end_points = rnn_model(model='lstm', input_data=input_data, output_data=None, vocab_size=len(
        vocabularies), rnn_size=128, num_layers=2, batch_size=64, learning_rate=lr)
    # 初始化saver和session
    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)
        # 加载上次的模型参数
        checkpoint = tf.train.latest_checkpoint(model_dir)

        # 注: 无模型参数时, 该步直接crash, 强制有训练好的模型参数
        saver.restore(sess, checkpoint)
        # 取出诗文前缀(G)对应的索引值所谓初始输入
        x = np.array([list(map(word_int_map.get, start_token))])
        # 得出预测值和rnn的当前状态
        [predict, last_state] = sess.run([end_points['prediction'], end_points['last_state']],
                                         feed_dict={input_data: x})
        if begin_word:
            # 用户输入值赋值给word
            word = begin_word
        else:
            # 若未输入, 则取初始预测值的词向量
            word = to_word(predict, vocabularies)

        # 初始化作诗结果变量
        poem_ = ''

        i = 0
        # 未到结束符时, 一直预测下一个词
        while word != end_token:
            # 没预测一个则追加到结果上
            poem_ += word
            i += 1
            if i >= 24:
                break
            # 初始化输入为[[0]]
            x = np.zeros((1, 1))

            # 赋值为当前word对应的索引值
            x[0, 0] = word_int_map[word]

            # 根据当前词和当前的上下文状态(last_state)进行预测
            # 返回的结果是预测值和最新的上下文状态
            [predict, last_state] = sess.run([end_points['prediction'], end_points['last_state']],
                                             feed_dict={input_data: x, end_points['initial_state']: last_state})

            # 根据预测值得出词向量
            word = to_word(predict, vocabularies)

        return poem_
예제 #15
0
def run_training():
    if not os.path.exists(model_dir):
        os.makedirs(model_dir)

    if not os.path.exists(log_dir):
        os.makedirs(log_dir)

    poems_vector, word_to_int, vocabularies = process_poems(corpus_path)
    batches_inputs, batches_outputs = generate_batch(FLAGS.batch_size,
                                                     poems_vector, word_to_int)

    print("## top ten vocabularies: %s" % str(vocabularies[:10]))
    print("## tail ten vocabularies: %s" % str(vocabularies[-10:]))
    print("## len(first vector)=%d, first vector[:50]: %s" %
          (len(poems_vector[0]), poems_vector[0][:50]))
    print("## len(last vector)=%d, second vector[:50]: %s" %
          (len(poems_vector[-1]), poems_vector[-1][:50]))

    input_data = tf.placeholder(tf.int32, [FLAGS.batch_size, None])
    output_targets = tf.placeholder(tf.int32, [FLAGS.batch_size, None])

    end_points = rnn_model(model='lstm',
                           input_data=input_data,
                           output_data=output_targets,
                           vocab_size=len(vocabularies),
                           rnn_size=128,
                           num_layers=2,
                           batch_size=FLAGS.batch_size,
                           learning_rate=FLAGS.learning_rate)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    summary_op = tf.summary.merge_all()
    with tf.Session() as sess:

        train_writer = tf.summary.FileWriter(os.path.join(log_dir, "train"),
                                             sess.graph)

        sess.run(init_op)

        start_epoch = 0
        checkpoint = tf.train.latest_checkpoint(model_dir)
        if checkpoint:
            saver.restore(sess, checkpoint)
            print("## restore from the checkpoint {0}".format(checkpoint),
                  flush=True)
            start_epoch += int(checkpoint.split('-')[-1]) + 1
        print('## start training...', flush=True)

        n_chunk = len(poems_vector) // FLAGS.batch_size

        try:
            for epoch in range(start_epoch, FLAGS.epochs):
                n = 0

                for batch in range(n_chunk):
                    step = epoch * n_chunk + batch
                    if step % FLAGS.print_every_steps == 0:
                        loss, _, _, train_summary = sess.run(
                            [
                                end_points['total_loss'],
                                end_points['last_state'],
                                end_points['train_op'], summary_op
                            ],
                            feed_dict={
                                input_data: batches_inputs[n],
                                output_targets: batches_outputs[n]
                            })
                        train_writer.add_summary(train_summary,
                                                 global_step=step)
                        print(
                            '[%s] Step: %d, Epoch: %d, batch: %d, training loss: %.6f'
                            % (time.strftime('%Y-%m-%d %H:%M:%S'), step, epoch,
                               batch, loss),
                            flush=True)
                    else:
                        _, _ = sess.run(
                            [end_points['last_state'], end_points['train_op']],
                            feed_dict={
                                input_data: batches_inputs[n],
                                output_targets: batches_outputs[n]
                            })
                    n += 1
                    step += 1
                if epoch % FLAGS.save_every_epoch == 0:
                    saver.save(sess, model_file, global_step=epoch)
                    print("[%s] Saving checkpoint for epoch %d" %
                          (time.strftime('%Y-%m-%d %H:%M:%S'), epoch),
                          flush=True)
        except KeyboardInterrupt:
            print('## Interrupt manually, try saving checkpoint for now...')
            saver.save(sess, model_file, global_step=epoch)
            print(
                '## Last epoch were saved, next time will start from epoch {}.'
                .format(epoch),
                flush=True)
예제 #16
0
tf.app.flags.DEFINE_integer('epochs', 50, 'train how many epochs.')

FLAGS = tf.app.flags.FLAGS


def run_training():
    if not os.path.exists(FLAGS.model_dir):  //没有路径
        os.makedirs(FLAGS.model_dir)  //创造路径

    poems_vector, word_to_int, vocabularies = process_poems(FLAGS.file_path)  //前置处理,生成词向量
    batches_inputs, batches_outputs = generate_batch(FLAGS.batch_size, poems_vector, word_to_int) //分成batch

    input_data = tf.placeholder(tf.int32, [FLAGS.batch_size, None])
    output_targets = tf.placeholder(tf.int32, [FLAGS.batch_size, None])

    end_points = rnn_model(model='lstm', input_data=input_data, output_data=output_targets, vocab_size=len(
        vocabularies), rnn_size=128, num_layers=2, batch_size=64, learning_rate=FLAGS.learning_rate)  //建立RNN模型

    saver = tf.train.Saver(tf.global_variables())  //
    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    with tf.Session() as sess:
        # sess = tf_debug.LocalCLIDebugWrapperSession(sess=sess)
        # sess.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan)
        sess.run(init_op)

        start_epoch = 0
        checkpoint = tf.train.latest_checkpoint(FLAGS.model_dir)
        if checkpoint:
            saver.restore(sess, checkpoint)
            print("## restore from the checkpoint {0}".format(checkpoint))
            start_epoch += int(checkpoint.split('-')[-1])
        print('## start training...')
예제 #17
0
    def run(self):
        batch_size = 1
        begin_word = None
        print('## loading corpus from %s' % model_dir)
        poems_vector, word_int_map, vocabularies = process_poems(corpus_file)

        input_data = tf.placeholder(tf.int32, [batch_size, None])

        end_points = rnn_model(model='lstm',
                               input_data=input_data,
                               output_data=None,
                               vocab_size=len(vocabularies),
                               rnn_size=128,
                               num_layers=2,
                               batch_size=64,
                               learning_rate=lr)

        saver = tf.train.Saver(tf.global_variables())
        init_op = tf.group(tf.global_variables_initializer(),
                           tf.local_variables_initializer())
        with tf.Session() as sess:
            sess.run(init_op)

            checkpoint = tf.train.latest_checkpoint(model_dir)
            saver.restore(sess, checkpoint)

            x = np.array([list(map(word_int_map.get, start_token))])
            while True:
                if 100 > len(poemList):
                    lock = False
                    try:
                        [predict,
                         last_state] = sess.run([
                             end_points['prediction'], end_points['last_state']
                         ],
                                                feed_dict={input_data: x})
                        word = begin_word or to_word(predict, vocabularies)
                        poem_ = ''

                        i = 0
                        poem_ = ''
                        while word != end_token:
                            poem_ += word
                            i += 1
                            if i > 40:
                                break
                            x = np.array([[word_int_map[word]]])
                            [predict, last_state] = sess.run(
                                [
                                    end_points['prediction'],
                                    end_points['last_state']
                                ],
                                feed_dict={
                                    input_data: x,
                                    end_points['initial_state']: last_state
                                })
                            word = to_word(predict, vocabularies)

                        poem = pretty_print_poem(poem_)
                        if "" != poem and "                                         。" != poem:
                            lock = True
                            mutex.acquire()
                            poemList.append(poem)
                    finally:
                        if lock:
                            mutex.release()
                else:
                    time.sleep(1)
예제 #18
0
def run_training():
    # if not os.path.exists(FLAGS.model_dir):
    #     os.makedirs(FLAGS.model_dir)
    #
    # poems_vector, word_to_int, vocabularies = process_poems(FLAGS.file_path)
    # batches_inputs, batches_outputs = generate_batch(FLAGS.batch_size, poems_vector, word_to_int)
    # ssqdata=get_exl_data(random_order=False,use_resnet=True)
    # # print(ssqdata[len(ssqdata)-1])
    # batches_inputs=ssqdata[0:(len(ssqdata)-1)]
    # ssqdata=get_exl_data(random_order=False,use_resnet=False)
    ssqdata = get_dlt_data(random_order=False, use_resnet=True)
    # print(ssqdata[len(ssqdata)-1])
    batches_inputs = ssqdata[0:(len(ssqdata) - 1)]
    ssqdata = get_dlt_data(random_order=False, use_resnet=False)
    batches_outputs = ssqdata[1:(len(ssqdata))]
    FLAGS.batch_size = len(batches_inputs)
    # print(np.shape(batches_outputs))
    # data=batches_outputs[1:7]
    # print(len(data))
    del ssqdata
    input_data = tf.placeholder(tf.float32, [FLAGS.batch_size, 1, 7, 1])
    logits = inference(input_data, 1, reuse=False, output_num=128)

    # print(tf.shape(input_data))
    output_targets = tf.placeholder(tf.int32, [FLAGS.batch_size, None])
    end_points = rnn_model(model='lstm',
                           input_data=logits,
                           output_data=output_targets,
                           vocab_size=35 + 12,
                           output_num=7,
                           rnn_size=128,
                           num_layers=7,
                           batch_size=FLAGS.batch_size,
                           learning_rate=FLAGS.learning_rate)
    # end_points = rnn_model(model='lstm', input_data=input_data, output_data=output_targets, vocab_size=len(
    #     vocabularies), rnn_size=128, num_layers=2, batch_size=64, learning_rate=FLAGS.learning_rate)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        # sess = tf_debug.LocalCLIDebugWrapperSession(sess=sess)
        # sess.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan)
        sess.run(init_op)

        start_epoch = 0
        # saver.restore(sess, "D:/tensorflow_poems-master/model4all/poems-207261")
        checkpoint = tf.train.latest_checkpoint(FLAGS.model_dir)
        if checkpoint:
            saver.restore(sess, checkpoint)
            print("## restore from the checkpoint {0}".format(checkpoint))
            start_epoch += int(checkpoint.split('-')[-1])
        print('## start training...')
        try:
            for epoch in range(start_epoch, FLAGS.epochs):
                n = 0
                # n_chunk = len(poems_vector) // FLAGS.batch_size
                # n_chunk = len(batches_inputs) // FLAGS.batch_size
                n_chunk = math.ceil(len(batches_inputs) / FLAGS.batch_size)
                for batch in range(n_chunk):
                    left = (batch + 1) * FLAGS.batch_size - len(batches_inputs)
                    if left < 0:
                        inputdata = batches_inputs[(batch * FLAGS.batch_size):(
                            (batch + 1) * FLAGS.batch_size)]
                        outputdata = batches_outputs[(
                            batch * FLAGS.batch_size):((batch + 1) *
                                                       FLAGS.batch_size)]
                    else:
                        # temp=batches_inputs[batch*FLAGS.batch_size:len(batches_inputs) ]
                        # temp.extend(batches_inputs[0:left])
                        inputdata = batches_inputs[
                            len(batches_inputs) -
                            FLAGS.batch_size:len(batches_inputs)]
                        # temp=batches_outputs[batch*FLAGS.batch_size:len(batches_inputs) ]
                        # temp.extend(batches_outputs[0:left])
                        outputdata = batches_outputs[
                            len(batches_outputs) -
                            FLAGS.batch_size:len(batches_outputs)]
                    # print(len(inputdata))
                    loss, _, _ = sess.run([
                        end_points['total_loss'], end_points['last_state'],
                        end_points['train_op']
                    ],
                                          feed_dict={
                                              input_data: inputdata,
                                              output_targets: outputdata
                                          })
                    # ], feed_dict={input_data: batches_inputs, output_targets: batches_outputs})
                    n += 1
                if epoch % 1000 == 0:
                    print('Epoch: %d, batch: %d, training loss: %.6f' %
                          (epoch, batch, loss))
                if epoch % 50000 == 0:
                    saver.save(sess,
                               os.path.join(FLAGS.model_dir,
                                            FLAGS.model_prefix),
                               global_step=epoch)
        except KeyboardInterrupt:
            print('## Interrupt manually, try saving checkpoint for now...')
            saver.save(sess,
                       os.path.join(FLAGS.model_dir, FLAGS.model_prefix),
                       global_step=epoch)
            print(
                '## Last epoch were saved, next time will start from epoch {}.'
                .format(epoch))
        saver.save(sess,
                   os.path.join(FLAGS.model_dir, FLAGS.model_prefix),
                   global_step=epoch)
예제 #19
0
def gen_poem():
    batch_size = 1

    poems_vector, word_int_map, vocabularies = process_poems(corpus_path)

    input_data = tf.placeholder(tf.int32, [batch_size, None])

    end_points = rnn_model(model='lstm',
                           input_data=input_data,
                           output_data=None,
                           vocab_size=len(vocabularies),
                           rnn_size=128,
                           num_layers=2,
                           batch_size=64,
                           learning_rate=lr)

    saver = tf.train.Saver(tf.global_variables())
    init_op = tf.group(tf.global_variables_initializer(),
                       tf.local_variables_initializer())
    with tf.Session() as sess:
        sess.run(init_op)

        checkpoint = tf.train.latest_checkpoint(model_dir)
        print('## loading corpus from %s' % checkpoint)
        saver.restore(sess, checkpoint)

        while True:

            # start_token=vocabularies[np.random.randint(len(vocabularies))]
            # x = np.array([list(map(word_int_map.get, start_token))])
            # [predict, last_state] = sess.run([end_points['prediction'], end_points['last_state']],
            #                                  feed_dict={input_data: x})
            begin_word = input('## please input the first character:')
            if begin_word and begin_word in vocabularies:
                word = begin_word
            else:
                word = vocabularies[np.random.randint(len(vocabularies))]
                print(
                    '## begin word not in vocabularies, use random begin word:'
                    + word)

            poem_ = word

            x = np.array([list(map(word_int_map.get, word))])
            [predict, last_state
             ] = sess.run([end_points['prediction'], end_points['last_state']],
                          feed_dict={input_data: x})
            # second word
            word = to_word(predict, vocabularies)

            i = 1
            while i < FLAGS.gen_sequence_len:
                poem_ += word
                i += 1
                x = np.zeros((1, 1))
                x[0, 0] = word_int_map[word]
                [predict, last_state] = sess.run(
                    [end_points['prediction'], end_points['last_state']],
                    feed_dict={
                        input_data: x,
                        end_points['initial_state']: last_state
                    })
                word = to_word(predict, vocabularies)

            print(poem_, flush=True)