年过完了,快回来把诗写完(三)

共 2283字,需浏览 5分钟

 ·

2021-02-20 08:04


在前面的训练中,如果你仔细寻找,会发现测试代码隐藏在回调函数中,但是生成的诗句是随机生成的,下面我们就一起来完成随机生成诗句、藏头诗、以及给出首句的方式来测试生成诗句的效果。

 

首先导入依赖库,然后加载模型:

import tensorflow.keras as k# import keras as kimport jsonfrom load_data import words_dicimport randomimport  numpy as npfrom LoadData import get_data,gen_data,one_hostmodel=k.models.load_model('www.h5')


预测函数

SPRING

接着,我们定义一个peridct()函数,由于后面需要频繁地使用到,所以我们把它封装起来:

# 预测函数def peridct(char):    # 数据处理    xdata = one_host(char, 5552, 1)    xdata = xdata.reshape(-1, 6, 5552)    p = model.predict(xdata)    # 返回预测的中文    return wordlist[p.argmax()]


藏头诗

SPRING

然后,我们定义一个acrostic()函数,用来生成藏头诗:

# 藏头诗def acrostic(random_char,char):    '''    :param random_char: 随机生成的首句 如:由来称独立    :param char: 藏头的部分    :return: 去掉首句后生成的诗。    '''    random_char+='。'  #使首句长度为6    # 循环藏头的部分    for i in char:        random_char += i        # 依次迭代,每次将一个藏头放到句首        for j in range(5):            x_data=random_char[-6:]            cont_index = [wordlist.index(i)                          if i in wordlist else wordlist.index('z')                          for i in x_data]            next_=peridct([cont_index])            random_char+=next_    return random_char[6:]



随机生成诗句

SPRING


# 随机生成def random_gan(random_char,model,key):    random_char+=','    for i in range(18):        x_data=random_char[-6:]        next_=peridct(model,x_data,key)        random_char+=next_    return random_char



给出首句生成诗句

SPRING

# 给第一句def give_first(first_char):    first_char+=','    for i in range(18):        x_data = first_char[-6:]        cont_index = [wordlist.index(i) if i in wordlist else wordlist.index('z') for i in x_data]        # print(x_data)        next_ = peridct([cont_index])        first_char += next_    return first_char


最后,在main函数中写入如下代码,就可以生成三种不同的诗句了:

if __name__ == '__main__':    cont,wordlist=get_data()    ranint=random.randint(1,20000)    words=cont[ranint].split(',')[0]    char=acrostic(words,'你好再见')    print(char)    print('\n-----------------------------')    char = random_gan(words)    print(char)    print('\n-----------------------------')    char = give_first('由来称独立')    print(char)


生成的结果如下:


本章中,我们使用了RNN进行诗词的生成,涉及的技术包括:文本处理,字典生成,词向量生成等。当然,同学们有兴趣的话,可以将我们的RNN换成LSTM或者GRU等算法,看看最终生成的结果是否更加有意境。



浏览 41
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报