NLP(二十一)根据已有文本LSTM自动生成文本

根据已有文本LSTM自动生成文本

  • 原理
    与股票预测类似,用前面的n个字符预测下一个字符
    https://www.cnblogs.com/peng8098/p/keras_5.html
  • 代码
from __future__ import print_function
import numpy as np
import random
import syspath = r'shakespeare_final.txt'
text = open(path).read().lower() # 打开文档 读成字符串 然后都变小写
characters = sorted(list(set(text))) # 去掉重复字符 方便下面编码
print('corpus length:',len(text))
print('total chars:',len(characters))char2indices = dict((c,i) for i,c in enumerate(characters)) # 字符(字母等)=>索引(数字)
indices2char = dict((i,c) for i,c in enumerate(characters)) # 索引(数字)=>字符(字母等)maxlen = 40 # 40个字符长度预测下一个字符
step = 3 # 一次预测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('nb sentences:',len(sentences)) # 40个字符串作为特征句子的个数 即训练数据大小## 构造数据集 类似one-hot编码
X = np.zeros((len(sentences),maxlen,len(characters)),dtype=np.bool)
y = np.zeros((len(sentences),len(characters)),dtype=np.bool)
for i,sentence in enumerate(sentences):for t,char in enumerate(sentence):X[i,t,char2indices[char]] = 1y[i,char2indices[next_chars[i]]] = 1# 构建神经网路
from keras.models import Sequential
from keras.layers import Dense,LSTM,Activation,Dropout
from keras.optimizers import RMSprop
model = Sequential()
model.add(LSTM(128,input_shape=(maxlen,len(characters))))
model.add(Dense(len(characters)))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',optimizer=RMSprop(lr=0.01))
print(model.summary())def pred_indices(preds,metric=1.0):preds = np.asarray(preds).astype('float64')preds = np.log(preds) / metricexp_preds = np.exp(preds)preds = exp_preds / np.sum(exp_preds)probs = np.random.multinomial(1,preds,1)return np.argmax(probs)for iteration in range(1,30): # 便于观察每一轮的训练结构print('-' * 40)print('Iteration',iteration)model.fit(X,y,batch_size=128,epochs=1)start_index = random.randint(0,len(text)-maxlen-1)for diversity in [0.2,0.7,1.2]:print('\n----- diversity:',diversity)generated = ''sentence = text[start_index:start_index+maxlen]generated += sentenceprint('----- Generating with seed: "'+sentence+'"')sys.stdout.write(generated)for i in range(400):x = np.zeros((1,maxlen,len(characters)))for t,char in enumerate(sentence): # 数字索引=>字母x[0,t,char2indices[char]] = 1preds = model.predict(x,verbose=0)[0]next_index = pred_indices(preds,diversity)pred_char = indices2char[next_index]generated += pred_charsentence = sentence[1:] + pred_charsys.stdout.write(pred_char)sys.stdout.flush()print('\nOne combination completed \n')

输出:

corpus length: 581432
total chars: 61
nb sentences: 193798
Using TensorFlow backend.
WARNING:tensorflow:From D:\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 128)               97280     
_________________________________________________________________
dense_1 (Dense)              (None, 61)                7869      
_________________________________________________________________
activation_1 (Activation)    (None, 61)                0         
=================================================================
Total params: 105,149
Trainable params: 105,149
Non-trainable params: 0
_________________________________________________________________
None
----------------------------------------
Iteration 1
WARNING:tensorflow:From D:\Anaconda3\lib\site-packages\tensorflow\python\ops\math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.cast instead.
Epoch 1/1
2019-07-15 17:04:03.721908: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2019-07-15 17:04:04.438003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties: 
name: GeForce GTX 950M major: 5 minor: 0 memoryClockRate(GHz): 1.124
pciBusID: 0000:01:00.0
totalMemory: 2.00GiB freeMemory: 1.64GiB
2019-07-15 17:04:04.438676: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
2019-07-15 17:04:07.352274: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-07-15 17:04:07.352543: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990]      0 
2019-07-15 17:04:07.352701: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0:   N 
2019-07-15 17:04:07.357455: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1386 MB memory) -> physical GPU (device: 0, name: GeForce GTX 950M, pci bus id: 0000:01:00.0, compute capability: 5.0)
2019-07-15 17:04:08.415227: I tensorflow/stream_executor/dso_loader.cc:152] successfully opened CUDA library cublas64_100.dll locally128/193798 [..............................] - ETA: 2:16:56 - loss: 4.1095256/193798 [..............................] - ETA: 1:09:23 - loss: 3.6938384/193798 [..............................] - ETA: 46:52 - loss: 3.8312 。。。

转载于:https://www.cnblogs.com/peng8098/p/nlp_21.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

友盟小米收不到推送消息_Android 推送集成华为,小米,友盟

在小米推送运营平台创建应用,地址点这里, 获取到 AppID , AppKey把从小米下载的 jar 放到 libs 下在 AndroidManifest.xml 中添加权限配置推送服务需要的service和receiverandroid:enabled"true"android:process":pushservice"android:name&quo…

RHEL7单独安装图形X11

RHEL7 默认是最小化安装(Minimal Install),没有图形界面,我们应该选择Server with GUI。若已错过此步骤,我们采用以下方式补充安装GUI界面。 # yum group list Available Environment Groups:Minimal InstallCompute N…

485通讯线是几芯的_小令老师说门禁| 为什么485门禁必然会取代韦根?

韦根和485(RS485)是两种不同的通讯协议。通讯协议解决的是通讯双方数据如何传输和如何控制的问题。对于门禁而言,指的是读头和控制器之间的通讯。传统门禁很多采用韦根通讯方式,而现在485更为普及,大部分韦根门禁也完成…

【第57题】【062题库】2019年OCP认证062考试新题

57题、choose one Which statement is true about a database in ARCHIVELOG mode? A) Full database backups can be performed when the database is opened. B) A Fast Recovery Area (FRA) must be configured for the database. C) Online redo log files have to be mul…

epoll nio区别_大厂面试系列(二)::NIO和Netty

NIO和Netty面试题 NIO 阐述 NIO原理?BIO/NIO/AIO有什么区别?有那些实现?讲讲NIO的原理与实现?NIO用到了哪个经典技术思想?JDK1.8中NIO有做什么优化了解多路复用机制 常见问题 同步阻塞、同步非阻塞、异步的区别&#x…

【第58题】【062题库】2019年OCP认证062考试新题

58题、choose two Which two statements are true about Oracle network connections? A) A listener may listen on behalf of only one database instance at a time. B) A server process checks a users authentication credentials and creates a session if the credent…

树莓派不支持显示器_Raspberry Pi(树莓派)上安装Raspbian(无路由器,无显示器)...

一. 准备工作1. 树莓派主板型号:树莓派3 B型处理器:四核64位ARM Cortex-A53 CPU内核架构:ARMv82. 一张大于8G的TF卡(本人用的是32G的,也作为PiLFS用)3. 一台笔记本电脑,一根网线4. 点击此找到并下载 Raspbian 系统初学…

Google搜索:HTML5 金海龙

想找到我,记得Google搜索! 博客地址没必要记忆! Google一下,总能找到我! 我喜欢你们Google搜索:.net 金海龙 本站有关于HTML5 Canvas的技术文章都可以在国际网站“http://htmlcanvas.webgarden.com”上找到…

拦截地址栏参数_selenium操作chrome时的配置参数

参数说明:about:version - 显示当前版本about:memory - 显示本机浏览器内存使用状况about:plugins - 显示已安装插件about:histograms - 显示历史记录about:dns - 显示DNS状态about:cache - 显示缓存页面about:gpu -是否有硬件加速about:flags -开启一些插件 chrome…

MS Office VBA(包括Excel VBA、Word VBA、Access VBA等)资料下载汇总

VBA(Visual Basic for Application):OReilly VB & VBA 简明教程 Office VBA编程手册合集大全 (CHM) Microsoft Office VBA 语言参考 Microsoft Office 2007 System VBA 编程 Office VBA 编程高手 VBA 傻瓜书 第五版 Excel VBA:中文版Excel 2007高级VBA编程宝典Excel 2007与…

升级步骤linux_开发人员福音,在win10系统上安装linux子系统

对于软件开发人员来说,linux基本上是一个绕不过去的槛。 因为工作经常要用到linux,电脑用纯linux还是windows 虚拟机装linux,我一直纠结。因为我要使用docker的原因,所以就搜索到这文章了。如果装个纯linux,则一些win…

C++之父名著——C++程序设计原理与实践 英文原版

C之父名著——C程序设计原理与实践 英文原版转载于:https://www.cnblogs.com/gavinhughhu/archive/2010/08/18/1801986.html

curl put方法 测试http_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!

【导语】:Python实现的HTTP请求命令行客户端,我理解为curl的Python版本,但是提供了更友好,更易使用的命令及选项。简介HTTPie是使用Python实现的HTTP命令行工具,提供了更人性化、交互性更好的命令和选项,可…

python计算文件md5值

md5是一种常见不可逆加密算法,使用简单,计算速度快,在很多场景下都会用到,比如:给用户上传的文件命名,数据库中保存的用户密码,下载文件后检验文件是否正确等。下面讲解在python中如何使用md5算…

文件打开特别慢_“Origin进不去、下载慢”的解决办法合集

玩儿烂橘子的游戏,喜闻乐见会见到下面这句话:呃,发生了些意料之外的事情。其实,这还挺意料之中的。▌进不去方法①:挂加速器。加速器挂Steam或者Origin大厅一般是免费的,没效果就换一个节点、模式、加速器。…

关于使用CPU缓存的一个小栗子

一、背景知识 CPU缓存(Cache Memory),是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比…

输入快捷键显示未知命令_「干货」华为VRP基础和常用命令了解一下

华为VRP系统的理解手机里面是安卓系统,电脑里面windows系统在我们路由器、交换机、防护墙等网络设备中他们当中的系统就是VRP系统(通用路由平台)可以理解为华为的类型交换机,华为类型路由器以及防火墙他们之间的命令行几乎都是一样华为设备提供丰富的功能…

【第59题】【062题库】2019年OCP认证062考试新题

59题、choose three Which three statements are true about naming methods? A) In the Easy Connect method, clients can connect to a database server by using the host name of the database with an optional port and service name. B) The local naming method does…

jq获取页面高度_JQ获取窗口文档等等高度总结!

$(document).ready(function(){alert($(window).height()); //浏览器时下窗口可视区域高度alert($(document).height()); //浏览器时下窗口文档的高度alert($(document.body).height());//浏览器时下窗口文档body的高度alert($(document.body).outerHeight(true));//浏览器时下…

【第60题】【062题库】2019年OCP认证062考试新题

60题、choose one When does a database checkpoint occur? A) When there is an online redo log switch. B) When the SHUTDOWN ABORT command is issued. C) When a user session terminates abnormally. D) When a server process terminates abnorthally. Answer&#xf…