Keras文本生成CNN实现

利用python制作词云图 词云图是一种为了文本数据的视觉表示,由词汇组成类似云的彩色图形,当需要统计文本中出现词汇的规模大小时,我们可以使用此类图形。本文将介绍如何用python代码制作词云图。 阅读详情

1、极简示例

"""
《长恨歌》——白居易
汉皇重色思倾国,御宇多年求不得。杨家有女初长成,养在深闺人未识。天生丽质难自弃,一朝选在君王侧。
回眸一笑百媚生,六宫粉黛无颜色。春寒赐浴华清池,温泉水滑洗凝脂。侍儿扶起娇无力,始是新承恩泽时。
云鬓花颜金步摇,芙蓉帐暖度春宵。春宵苦短日高起,从此君王不早朝。承欢侍宴无闲暇,春从春游夜专夜。
后宫佳丽三千人,三千宠爱在一身。金屋妆成娇侍夜,玉楼宴罢醉和春。姊妹弟兄皆列土,可怜光彩生门户。
遂令天下父母心,不重生男重生女。骊宫高处入青云,仙乐风飘处处闻。缓歌慢舞凝丝竹,尽日君王看不足。
渔阳鼙鼓动地来,惊破霓裳羽衣曲。九重城阙烟尘生,千乘万骑西南行。翠华摇摇行复止,西出都门百余里。
六军不发无奈何,宛转蛾眉马前死。花钿委地无人收,翠翘金雀玉搔头。君王掩面救不得,回看血泪相和流。
黄埃散漫风萧索,云栈萦纡登剑阁。峨嵋山下少人行,旌旗无光日色薄。蜀江水碧蜀山青,圣主朝朝暮暮情。
行宫见月伤心色,夜雨闻铃肠断声。天旋地转回龙驭,到此踌躇不能去。马嵬坡下泥土中,不见玉颜空死处。
君臣相顾尽沾衣,东望都门信马归。归来池苑皆依旧,太液芙蓉未央柳。芙蓉如面柳如眉,对此如何不泪垂。
春风桃李花开日,秋雨梧桐叶落时。西宫南内多秋草,落叶满阶红不扫。梨园弟子白发新,椒房阿监青娥老。
夕殿萤飞思悄然,孤灯挑尽未成眠。迟迟钟鼓初长夜,耿耿星河欲曙天。鸳鸯瓦冷霜华重,翡翠衾寒谁与共。
悠悠生死别经年,魂魄不曾来入梦。临邛道士鸿都客,能以精诚致魂魄。为感君王辗转思,遂教方士殷勤觅。
排空驭气奔如电,升天入地求之遍。上穷碧落下黄泉,两处茫茫皆不见。忽闻海上有仙山,山在虚无缥渺间。
楼阁玲珑五云起,其中绰约多仙子。中有一人字太真,雪肤花貌参差是。金阙西厢叩玉扃,转教小玉报双成。
闻道汉家天子使,九华帐里梦魂惊。揽衣推枕起徘徊,珠箔银屏迤逦开。云鬓半偏新睡觉,花冠不整下堂来。
风吹仙袂飘飖举,犹似霓裳羽衣舞。玉容寂寞泪阑干,梨花一枝春带雨。含情凝睇谢君王,一别音容两渺茫。
昭阳殿里恩爱绝,蓬莱宫中日月长。回头下望人寰处,不见长安见尘雾。惟将旧物表深情,钿合金钗寄将去。
钗留一股合一扇,钗擘黄金合分钿。但教心似金钿坚,天上人间会相见。临别殷勤重寄词,词中有誓两心知。
七月七日长生殿,夜半无人私语时。在天愿作比翼鸟,在地愿为连理枝。天长地久有时尽,此恨绵绵无绝期。
"""

import numpy as np
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Conv1D, MaxPool1D, GlobalMaxPool1D, Dense
from warnings import filterwarnings
filterwarnings('ignore')  # 不打印警告

"""配置"""
window = 32  # 滑窗大小
filters = 25  # 卷积录波器数量
kernel_size = 5  # 卷积核大小
times = 20  # 训练总次数
batch_size = 512
epochs = 100

"""语料加载"""
seq_chr = __doc__.replace('\n', '').replace('《长恨歌》——白居易', '')

"""数据预处理"""
len_seq = len(seq_chr)
chr_set = set(seq_chr)  # 字库
len_chr = len(chr_set)
print('语料长度', len_seq, '字汇量', len_chr)
chr2id = {c: i for i, c in enumerate(chr_set)}
id2chr = {i: c for c, i in chr2id.items()}
seq_id = [chr2id[c] for c in seq_chr]  # 文字序列 --> 索引序列

"""输入层和标签"""
reshape = lambda x: np.reshape(x, (-1, window, 1)) / len_chr
x = [seq_id[i: i + window] for i in range(len_seq - window)]
x = reshape(x)
y = [seq_id[i + window] for i in range(len_seq - window)]
y = to_categorical(y, num_classes=len_chr)
print('x.shape', x.shape, 'y.shape', y.shape)

"""建模"""
model = Sequential()
model.add(Conv1D(filters, kernel_size * 3, activation='relu'))
model.add(MaxPool1D())
model.add(Conv1D(filters * 2, kernel_size, activation='relu'))
model.add(GlobalMaxPool1D())
model.add(Dense(len_chr, activation='softmax'))
model.compile('adam', 'categorical_crossentropy')

"""随机采样"""
def draw_sample(predictions, temperature):
    pred = predictions.astype('float64')  # 提高精度防报错
    pred = np.log(pred) / temperature
    pred = np.exp(pred)
    pred = pred / np.sum(pred)
    pred = np.random.multinomial(1, pred, 1)
    return np.argmax(pred)

"""预测"""
def predict(t, pred=None):
    if pred is None:
        randint = np.random.randint(len_seq - window)
        pred = seq_id[randint: randint + window]
    if t:
        print('随机采样,温度:%.1f' % t)
        sample = draw_sample
    else:
        print('贪婪采样')
        sample = np.argmax
    for _ in range(window):
        x_pred = reshape(pred[-window:])
        y_pred = model.predict(x_pred)[0]
        i = sample(y_pred, t)
        pred.append(i)
    text = ''.join([id2chr[i] for i in pred[-window:]])
    print('\033[033m%s\033[0m' % text)

"""训练"""
for e in range(times):
    model.fit(x, y, batch_size, epochs, verbose=0)
    print(str(e + 1).center(window * 2, '-'))
    # 训练效果展示
    for t in (None, 1, 1.5, 2):
        predict(t)
print('complete'.center(window * 2, '-'))
for t in (None, 1, 1.5, 2):
    predict(t, seq_id[-window:])

2、网络结构

在这里插入图片描述

3、采样

贪婪采样(greedy sampling):选择概率最大的数
随机采样(stochastic sampling):按概率抽取

def draw_sample(predictions, temperature):
    pred = predictions.astype('float64')  # 提高精度防报错
    pred = np.log(pred) / temperature
    pred = np.exp(pred)
    pred = pred / np.sum(pred)
    pred = np.random.multinomial(1, pred, 1)
    return np.argmax(pred)

3.1、随机多项式分布采样

Draw samples from a multinomial distribution

import numpy as np
np.random.seed(0)
x = [.1, .2, .7]
print(np.random.multinomial(1, x, 1))

[[0 0 1]]

X = np.sum(np.random.multinomial(1, x, 1) for _ in range(1000))
print(X, np.sum(X), sep='\n')

[[119 208 673]]
1000

X = np.sum(np.random.multinomial(10, x, 1) for _ in range(1000))
print(X, np.sum(X), sep='\n')

[[ 980 2028 6992]]
10000

X = np.sum(np.random.multinomial(1, x, 2) for _ in range(1000))
print(X, np.sum(X), sep='\n')

[[ 87 179 734]
 [ 92 194 714]]
2000

3.2、对概率分布重新加权

引入softmax temperature:温度越高越随机

import numpy as np, matplotlib.pyplot as mp

def redistribute(distributuion, temperature):
    distribution = np.log(distributuion) / temperature
    distribution = np.exp(distribution)
    return distribution / np.sum(distribution)

ls_of_t = (1e-3, .5, 1, 2, 9)
d0 = (.1, .2, .7)
x = range(len(d0))
for e, t in enumerate(ls_of_t, 1):
    d1 = redistribute(d0, t)
    print(d1)
    mp.subplot(1, 5, e)
    mp.bar(x, d1, width=.2)
mp.show()

在这里插入图片描述

4、训练过程打印

起初

结束

5、完整代码+语料下载

https://gitee.com/arye/dl/tree/master/Keras/TextGeneration

Keras上实现卷积神经网络CNN 一、概述及完整代码 本例的代码主要来自Keras自带的example里的mnist_cnn模块,主要用到keras.layers中的Dense, Dropout, Activation, Flatten模块和keras.layers中的Convolution2D,MaxPooling2D。构建一个两层卷积层两层全连接层的简单卷积神经网络,12次循环后可以达到99.25%的准确率,课件CNN的预测 阅读详情

相关推荐

毕设:基于CNN卷积神经网络的猫狗识别、狗品种识别(Tensorflow、Keras、Kaggle竞赛)

基于卷积神经网络的图像识别算法及其应用研究 毕业快一年了,拿出来分享给大家,我和网上唯一的区别就是,我能够同时实现两个方案(猫狗识别和狗品种识别),我当时也是网上各种查,花了2,3个月的时间,一个萝卜一个坑走过来的,深度学习真的是深似海呀,不过结果还好,知道过程和原理是怎么来的了...

二八定律法则 1万+

长恨歌--白居易诗 戴敦邦插图(ZT)

汉皇重色思倾国,御宇多年求不得。杨家有女初长成,养在深闺人未识。天生丽质难自弃,一朝选在君王侧。回眸一笑百媚生,六宫粉黛无颜色。春寒赐浴华清池,温泉水滑洗凝脂。侍儿扶起娇无力,始是新承恩泽时。云鬓花颜金步摇,芙蓉帐暖度春宵。春宵苦短日高起,从此君王不早朝后宫佳丽三千人,三千宠爱在一身金屋妆成娇侍夜,玉楼宴罢醉和春姊妹弟兄皆列土,可怜光彩生门户。遂令天下父母心,不重生男重生女骊宫高处入青云,仙乐风飘

一辈子的孤单 2398

Keras 搭建图片分类 CNN (卷积神经网络)

1. 导入keras from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense 2. Conv2D 构建卷积层。用于从输入的高维数组中提取特征。卷积层的每个过滤器就是一个特征映射,用于提取某一个特征,过滤器的数量决定了卷积层输出特征个数,或者输出深度。因此,图...

青笔 6705

飘逸的python - 一段统计次数程序的进化

这段程序是从给定的列表中统计各个小伙伴以及他们的出现次数。 littlebuddys = ['jack','terry','john','rooney','ross','kzc','john','ross','ross'] 新手程序员 d = {} for buddy in littlebuddys: if buddy not in d: d[buddy

mattkang 4244

Keras深度学习应用1——基于卷积神经网络(CNN)的人脸识别(上)

基于CNN的人脸识别(上)一、 CNN概述1.1 CNN发展历程1.2 CNN基本结构二、 CNN算法原理2.1 CNN基本网络结构2.1.1输入层2.1.2卷积层2.1.3池化层2.1.4全连接层2.1.5 激励层 一、 CNN概述 1.1 CNN发展历程 卷积神经网络由生物学自然视觉认知机制启发而来。1962年,诺贝尔奖得主D.H.Hubel和T.N.Wiesel,这两位学者通过对猫脑部皮层中特定的神经元进行研究时,发现了其独特的网络结构。根据这个启发有学者提出了新识别机(recognition)的概念

1万+

深度学习:Keras实现卷积神经网络CNN

写在前面 刚刚开始学习keras,就在这里记录一下学习过程啦。 本文为使用卷积神经网络CNN进行mnist手写字符的识别,希望自己就此走进deep learning的大门吧。 keras文档:https://keras.io/zh/ 莫烦python bilibili链接:https://space.bilibili.com/243821484/video 一、代码 keras相关导入 impo...

慢慢慢慢曼 3328

Keras 文字生成系统

  同是深度学习“槛内人”,我怎么不知道这样高大上的文字生成对话系统  文字信息是存在最广泛的信息形式之一,而深度学习的序列模型(Sequential Model)在对文字生成建模(Generative Model)方面具备独特的优势。文字自动生成可应用于自然语言对话建模和自动文稿生成,极大地提高了零售客服、网络导购以及新闻业的生产效率。目前比较成熟的是单轮对话系统以及基于单轮对话系统的简单多轮对...

博文视点(北京)官方博客 1780

用keras搭建CNN卷积神经网络

CNN的架构 卷积神经网络CNN的结构一般包含这几个层: 1)输入层:用于数据的输入 2)卷积层:使用卷积核进行特征提取和特征映射------>可以多次重复使用 3)激励层:由于卷积也是一种线性运算,因此需要增加非线性映射(也就是激活函数) 4)池化层:进行下采样,对特征图稀疏处理,减少数据运算量----->可以多次重复使用 5)Flatten操作:将二维的向量,拉直为一维的向量,从而可以放入下一层的神经网络中 6)全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失----->D

罐罐罐子的博客 4305

python中的词云图

wordcloud 是什么?词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现词云图过滤掉大量的低频低质的文本信息使得浏览者只要一眼扫过文本就可领略文本的主旨。

m0_73282576的博客 9931

[Python人工智能] 十八.Keras搭建卷积神经网络及CNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras实现分类学习,以MNIST数字图片为例进行讲解。本篇文章详细讲解了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。基础性文章,希望对您有所帮助!

杨秀璋的专栏 1万+

卷积神经网络 (CNN) 原理详解与 Keras 实践

卷积神经网络 (Convolutional Neural Network, CNN) 的提出是为了解决传统神经网络的缺陷。即使对象位于图片中的不同位置或其在图像中具有不同占比,CNN 依旧能够正确的处理这些图像,因此在对象分类/检测任务中更加有效。在本节中,我们将使用 Keras 构建卷积神经网络模型进行图像分类,介绍 CNN 的基础知识,并构建 CNN 模型。

盼小辉丶的博客 4121

LSTM文本生成实战:从原理到Keras实现

长短期记忆网络(LSTM)作为循环神经网络(RNN)的改进架构,通过输入门、遗忘门和输出门的精巧设计,有效解决了自然语言处理中的长期依赖问题。在文本生成领域,LSTM能够学习序列数据的深层规律,生成语法合理的连贯文本。结合Keras深度学习框架,开发者可以快速构建包含嵌入层、双LSTM层和全连接层的生成模型。关键技术点包括文本预处理中的标记化与序列生成、温度参数调节控制输出创造性,以及使用CuDNNLSTM加速训练。这类技术在智能写作、聊天机器人等场景展现价值,而注意力机制和迁移学习的引入则能进一步提升生成

weixin_30443075的博客 328

Keras深度学习实战(7)——卷积神经网络详解与实现

传统深度前馈神经网络的局限性之一是它并不满足平移不变性,且容易受图像中对象大小的影响。卷积神经网络 (Convolutional Neural Network, CNN) 的提出正是用于解决传统神经网络的这些缺陷。即使对象位于图片中的不同位置或其在图像中具有不同占比,CNN 也能够正确的处理这些图像,因此在对象分类/检测任务中更加有效。本节详细介绍了 CNN 的基本概念与计算流程,同时使用 Keras 构建 CNN 模型识别手写数字。.........

盼小辉丶的博客 1万+

深度学习 | CNN原理及Keras实现

CNN原理及Keras实现1 前言2 什么叫卷积神经网络?2.1 应用场景2.2 CNN的网络结构2.2.1 卷积层2.2.2 池化层2.2.3 Flatten层 & Fully Connected Layer2.3 其余的问题3 keras简单介绍及实现简单三层神经网络3.1 导入相关的库3.2 读入数据3.3 搭建网络3.4 编译3.5 拟合模型3.6 绘制损失函数曲线图3.7 预测4...

RUC_Lee的博客 9452

cesium自定义指南针

项目需要一个指南针,用鼠标按住旋转指针,会让3d地图旋转,点击中心点重置方位。当然可以使用插件cesium-navigation-es6,但是样式不好修改,所以我自定义了一个指南针。

weixin_47017648的博客 751

免费升级哨兵2号分辨率!用SRCNN深度学习模型实现10米→2.5米超分重建

本文详细介绍了如何利用SRCNN深度学习模型,将哨兵2号遥感影像的分辨率从10米免费提升至2.5米。文章提供了从数据准备、模型训练到部署应用的全流程实战指南,旨在通过AI应用技术,为农业监测、城市规划等领域提供更高精度的影像数据支持。

coffee的博客 524

Keras构建CNN讲解及代码

Keras构建CNN 摘要:keras能够极其简单的构造出CNN网络 使用TensorFlow创建卷积神经网络(CNN)来对MNIST手写数字数据集进行分类的方法很经典。TensorFlow是一款精湛的工具,具有强大的功能和灵活性。然而,对于快速原型制作工作,可能显得有些麻烦。Keras是一个运行在TensorFlow或者Theano的更高级别的库,旨在流线化构建深度学习网络的过程。事实上,在Te...

NotPerfect的博客 1万+

GEE进行Theil-Sen Median斜率估计和Mann-Kendall检验

Python实现Theil-Sen Median斜率估计和Mann-Kendall检验// 定义时间范围//NDVI图像集合// 定义每年的开始和结束日期// 加载NDVI数据集,按日期过滤,并计算最大值.max()}));// 计算Sen斜率并剪裁// 可视化Sen斜率Map.addLayer(senSlope.select('slope'), vis, "Sen斜率 ");// MK检验// 创建一个列表,包含年度NDVI图像的list。

qq_44894692的博客 965

基于Tensorflow和Keras实现卷积神经网络CNN

文章目录一、环境的配置二、神经网络CNN的介绍三、数据集的准备四、猫狗分类的实例五、参考资料 一、环境的配置 安装Anaconda 详细步骤请参考下面链接: 配置TensorFlow、Keras ①创建一个新的 二、神经网络CNN的介绍 三、数据集的准备 四、猫狗分类的实例 五、参考资料 ...

Harriet的博客 6539

Python小白也能搞定!用you-get一键下载B站视频合集的保姆级教程

本文为Python新手提供了使用you-get工具一键下载B站视频合集的完整教程。从环境配置、基础下载操作到高级批量下载技巧,详细介绍了如何利用这个开源工具高效获取视频资源,包括解决常见问题和实用优化建议,帮助用户轻松实现离线学习。

weixin_42544663的博客 463

DeepSeek-V3本地Docker容器化部署

通过以上步骤,你可以在本地上成功通过容器化部署DeepSeek-V3。安装完成后,启动Docker Desktop。如果需要后台运行,可以加上。

u013302168的博客 2124

【深度学习】越来越卷,教你使用Python实现卷积神经网络(CNN)

@Author:Runsenhttps://blog.csdn.net/weixin_44510615/article/details/117409037卷积神经网络Yann LeCun ...

fengdu78的博客 2万+

【WorkBuddy专栏15】灵感被折叠到「更多」里,真的不重要了吗?——一个「被低估」功能的当下价值与未来演变

【WorkBuddy专栏15】灵感被折叠到「更多」里,真的不重要了吗?——一个「被低估」功能的当下价值与未来演变

AI人人懂 964

怎么用Keras实现CNN

//李宏毅视频官网:http://speech.ee.ntu.edu.tw/~tlkagk/courses.html点击此处返回总目录 //邱锡鹏《神经网络与深度学习》官网:https://nndl.github.io 下面秒讲一下怎么用Keras实现CNN。...

liupc的学习笔记 3472

【git】win 10 / win 11:git 首次拉取云效平台代码详细教程

git 首次拉取云效平台代码详细教程:Git 生成 SSH 公钥、云效工作台添加 SSH 公钥、git 使用 SSH / HTTP 链接拉取云效代码

顾三殇 —— 博客空间(软件测试) 4218

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+
上一篇: Python统计分布
下一篇: Keras反向网络生成图像
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值