前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于深度学习系列笔记三(射雕英雄传)

关于深度学习系列笔记三(射雕英雄传)

作者头像
python与大数据分析
发布2022-03-11 13:30:52
2490
发布2022-03-11 13:30:52
举报
文章被收录于专栏:python与大数据分析

在前系列笔记中已有了关于爱丽丝梦游仙境的例子,一直想进行中文方面的尝试,看看到底在无人干预的情况下,深度学习能够学习到很么程度,本文下载了射雕英雄传前5章,也尝试了一下简单神经网络SimpleRNN和LTSM长短期记忆网络,在完全无干预的情况下,可以做到文本自动输出,也有标点符号,部分内容也比较可观,但距离实用还有很大差距,后续得继续考虑引入分词、词的权重,剔除虚词等来提升文本可读性

代码示例

代码语言:javascript
复制
# -*- coding: utf-8 


from __future__ import print_function
from keras.callbacks import LambdaCallback
from keras.models import Sequential
from keras.layers import Dense, Activation,Dropout
from keras.layers.recurrent import SimpleRNN
from keras.layers import LSTM
from keras.optimizers import RMSprop
from keras.utils.data_utils import get_file
import numpy as np
import random
import sys
import io

#从网上获取射雕英雄传文本前几章
INPUT_FILE = "1.txt"

text=open(INPUT_FILE,encoding="utf8").read()
print(text)
print('corpus length:', len(text))
#27401
chars = sorted(list(set(text)))
print('chars=',chars)
#['\n', '.', '‘', '’', '“', '”', '…', '、', '。', '《', '》', '一', '丁',]
print('total chars:', len(chars))
#1898
char_indices = dict((c, i) for i, c in enumerate(chars))
print('char_indices=',char_indices)
#char_indices= {'\n': 0, '.': 1, '‘': 2, '’': 3, '“': 4, '”': 5, '…': 6, '、': 7, '。': 8, '《': 9, '》': 10,}
indices_char = dict((i, c) for i, c in enumerate(chars))
print('indices_char=',indices_char)
#Indices_char= {0: '\n', 1: '.', 2: '‘', 3: '’', 4: '“', 5: '”', 6: '…', 7: '、', 8: '。', 9: '《', 10: '》'}
# cut the text in semi-redundant sequences of maxlen characters
# 文本切分
maxlen = 40
step = 3
sentences = []
next_chars = []
for i in range(0, len(text) - maxlen, step):
    sentences.append(text[i: i + maxlen])
    next_chars.append(text[i + maxlen])
print('sentences=',sentences)
#四十个字一个句子,进行分割
print('next_chars=',next_chars)
#next_chars= ['十', '柏', '叶', '火', '红', '是', '天']
print('nb sequences:', len(sentences))
#nb sequences: 9121
print('Vectorization...')
x = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool)
y = np.zeros((len(sentences), len(chars)), dtype=np.bool)
print('x=',x)
print('y=',y)
for i, sentence in enumerate(sentences):
    for t, char in enumerate(sentence):
        x[i, t, char_indices[char]] = 1
    y[i, char_indices[next_chars[i]]] = 1
print('x=',x)
print('y=',y)


# --------------------基于LSTM模型----------------------
print('Build model...')
model = Sequential()
model.add(LSTM(400, input_shape=(maxlen, len(chars)),return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(400))
model.add(Dropout(0.2))
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
optimizer = RMSprop(lr=0.01)
model.compile(loss='categorical_crossentropy', optimizer=optimizer)
# --------------------基于LSTM模型----------------------

# --------------------基于SimpleRNN模型----------------------
model = Sequential()
#将RNN输出维度大小定义为128
#选择值太小,模型不具有生成较好文本的有效容量,会看到重复字符或重复词组的长时运行
#选择值太大,模型参数过多,需要很多数据才能有效训练
model.add(SimpleRNN(128, return_sequences=False,
                    input_shape=(maxlen, len(chars)),
                    unroll=True))
#创建一个全连接dense层,dense层有nb_chars个单元,为字典中每个字符发出评分
model.add(Dense(len(chars)))
#全连接层激活函数是softmax,把分数标准化为概率,概率最高的字符即成为预测字符。
model.add(Activation("softmax"))
#用分类输出中出色的分类交叉熵函数作为损失函数
model.compile(loss="categorical_crossentropy", optimizer="rmsprop")
# --------------------基于SimpleRNN模型----------------------

def sample(preds, temperature=1.0):
    # helper function to sample an index from a probability array
    # 帮助从概率数组中采样索引的辅助函数
    preds = np.asarray(preds).astype('float64')
    preds = np.log(preds) / temperature
    exp_preds = np.exp(preds)
    preds = exp_preds / np.sum(exp_preds)
    probas = np.random.multinomial(1, preds, 1)
    return np.argmax(probas)

def on_epoch_end(epoch, logs):
    # Function invoked at end of each epoch. Prints generated text.
    # 在每个周期的末尾调用函数。打印生成的文本。
    print()
    print('----- Generating text after Epoch: %d' % epoch)

    start_index = random.randint(0, len(text) - maxlen - 1)
    #for diversity in [0.2, 0.5, 1.0, 1.2]:
    for diversity in [ 1.0, 1.2]:
        print('----- diversity:', diversity)

        generated = ''
        sentence = text[start_index: start_index + maxlen]
        generated += sentence
        print('----- Generating with seed: "' + sentence + '"')
        sys.stdout.write(generated)

        for i in range(400):
            x_pred = np.zeros((1, maxlen, len(chars)))
            for t, char in enumerate(sentence):
                x_pred[0, t, char_indices[char]] = 1.

            preds = model.predict(x_pred, verbose=0)[0]
            next_index = sample(preds, diversity)
            next_char = indices_char[next_index]

            generated += next_char
            sentence = sentence[1:] + next_char

            sys.stdout.write(next_char)
            sys.stdout.flush()
        print()


print_callback = LambdaCallback(on_epoch_end=on_epoch_end)

model.fit(x, y,
          batch_size=128,
          epochs=60,
          callbacks=[print_callback])

关于深度学习SimpleRNN的文本输出

代码语言:javascript
复制
#SimpleRNN学习到43轮的输出
包惜弱道:“到哪里去呀鸡只是昏得兵听不了。”说着大半从心中一来,那时剑提到了大为的直事事重胆。”他说出声,着几个个命,有天上都白,刮得他连早出就,就好心中今家不及,那么?”

杨铁心问道:“这里是刀的,是一个他进一光下,金兵的能三脚令这里里但入了大污转三年,是个是费显是天好,却是不是在绿手腕…”郭啸天道:“好,先叫甚么个年去有了。

郭啸天与买了旺那个人大怒。把

杨铁心过去皇帝个夫人近的当下,算是他:“我大哥!”中铁心的出斗如家上一抓,好下那,不好,却是不是他脚如飞,这两兵名没放放,烘这里的边然传,敌,要是他身两个杨家枪法,这道是西了死吗?”

杨铁心相招你到好,却是无北一下,便把先时下慢,却好叹几人心,一个个女他痛骂去。

颜烈从并地回家,提不炽过?”说道人及笑:“这月小人无奈之后,只见他三个夫人都是,连是先江,心下虽然了个道:“正是!””颜烈了看尖运出来。官兵众大惊。杨铁心包惜弱待起身子,随一人,命觉

关于深度学习LTSM的文本输出

代码语言:javascript
复制
#LTSM学习到50轮的输出
伸手猛抓敌腕,左子拿向敌人肘部,这一手是“分筋错骨手”中的“壮士断腕”,只要敌好他”出他大突声他毒些:位靖成头己他江我那弟他我着他哪言了江他这:声便年这仇他之身头他下道现马,那这弟突声已哪向,动他这马,那是:头我他江见马,到道江他他声不哪柯突声对老好不是好道立他道洪之身,别声身突那他夫我不向都他首他道哪给,夫:头我拳,声他:他是
仇来哥,夫们镇是我他成柯道他生,身驹,,你围他那江,这跃江江道他是那向之知他年夫向他个个身手人声是柯江郭三:不身这:她木中命四这那夫突突突哪札那发他韩围我知大到一向哪来这那:江此见好柯必江郭好向他未身要来这们这他么他弟本之身不是人:头见史他道有之他古大四:弟柯好处这他他年己马““他己。不我弟哪对郭一弟仇子…处虽突地似我这时开突在突知:了声昆头入江时江道杀哪马突是是之江哪他见声这身他法史弟马马右韩头江,神高道对气郭在江
身来发你甚靖上“已:。”身是知明现弟江本金脚南一江不一,,这声这有人,哪弟铁身阵足,之身心知,忙:见我,那哪江经之但那起铁:
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档