本文以短问答为背景,串联几个keras下常用的函数

0:keras.preprocessing

该模块是对数据的预处理模块
https://blog.csdn.net/winter_python/article/details/108615737

由于keras只能接受相等长度的序列,因此在将数据输入之前,要将所有的句子缩放成等长

input_length=10
keras.preprocessing.sequence.pad_sequences(sentence, maxlen=input_length, value=0.0)

分割后的句子长度为10,超过10的将被直接截断,小于10的将被value进行填充,直到所有的句子均被转化成等长的序列。

1:Embedding

嵌入层也作为模型搭建的第一层,将所有的字典词训练出一个词的嵌入矩阵,该矩阵的行维度会很高==字典词的个数,然后用ont-hot乘该矩阵即可。对于词向量的输出维度可以进行设置,一般为128维度
https://blog.csdn.net/buchidanhuang/article/details/99186395

keras.layers.Embedding(input_dim=word_num, output_dim=input_dimension)

这里要注意输入的维度是整个词典的个数

2:双向LSTM

搭建一个双向的lstm模型:LSTM模型可以减弱长期依赖的影响,可以较好的理解语义和语序

keras.layers.Bidirectional(keras.layers.LSTM(int(lstm_dim / 2), return_sequences=True))

return_sequences=False表示最后的结果只输出一个
return_sequences=True表示输出每个时间T的结果,在NLP来说就是每个词(可以把一个词看成一个T)的结果都输出,而不只是输出最后的整体结果

由于是双向模型,为了维持最后输出的模型维度,将int(lstm_dim / 2),最后的模型实际上是将向前计算的序列1与向后计算的序列2进行拼接,两个lstm_dim / 2拼接后的维度是lstm_dim,也是隐含层参数的个数

lstm输出的第一个维度就是时间维度【T,sequence_length,output_dim】,也可以认为是词的个数10

3:TimeDistributed

将lstm的结果再过一个全链接层,这里有一个TimeDistributed,可以理解成将dence层过Time次。如果放在NLP下面,就是将lstm输出的每个词向量(10个)分别过dence层

TimeDistributed(Dense(lstm_dim, activation="relu"))(lstm)

ReLu的使用,使得网络可以自行引入稀疏性。这一做法,等效于无监督学习的预训练

4:GlobalMaxPooling1D()

先计算匹配的相似度,在steps维度中求解feature全局最大值(batch_size, steps, features),最后输出一个(batch_size, features)。也就是看成匹配出相同batch_size大小的句子

GlobalMaxPooling1D()(q_out)

5:Dense

将问答进行拼接后太长,过一个dense层进行降维,然后再过有个sigmoid函数判断其是否适合

out = keras.layers.concatenate([q_out, a_out], axis=1)
out = Dense(50, activation="relu")(out)
out = Dense(1, activation="sigmoid")(out)

简单的梳理了下思路,理解有误的地方还请各位大侠指出~~~~~

keras 中的keras.preprocessing、Embedding、GlobalMaxPooling1D()、 TimeDistributed相关推荐

  1. keras中的keras.utils.to_categorical方法

    to_categorical(y, num_classes=None, dtype='float32') 将整型标签转为onehot.y为int数组,num_classes为标签类别总数,大于max( ...

  2. python的matmul_浅谈keras中的batch_dot,dot方法和TensorFlow的matmul

    概述 在使用keras中的keras.backend.batch_dot和tf.matmul实现功能其实是一样的智能矩阵乘法,比如A,B,C,D,E,F,G,H,I,J,K,L都是二维矩阵,中间点表示 ...

  3. Keras vs tf.keras: 在TensorFlow 2.0中有什么区别?

    导读 在本文中,您将发现Keras和tf.keras之间的区别,包括TensorFlow 2.0中的新增功能. 万众期待的TensorFlow 2.0于9月30日正式发布. 虽然肯定是值得庆祝的时刻, ...

  4. Keras与tf.keras:TensorFlow 2.0有什么区别?

      在本教程的第一部分中,我们将讨论Keras和TensorFlow之间相互交织的历史,包括他们共同的受欢迎程度如何相互滋养,相互促进和滋养,使我们走向今天.   然后,我将讨论为什么您应该在以后的所 ...

  5. Keras vs. tf.keras: 在TensorFlow 2.0中有什么区别?

    在本教程中,您将发现Keras和tf.keras之间的区别,包括TensorFlow 2.0中的新增功能. Keras vs. tf.keras: 在TensorFlow 2.0中有什么区别? htt ...

  6. 【小白学习keras教程】十一、Keras中文本处理Text preprocessing

    @Author:Runsen 文章目录 Text preprocessing Tokenization of a sentence One-hot encoding Padding sequences ...

  7. keras中lstm参数_如何使用Keras为自定义NER构建深度神经网络

    在这篇文章中,我们将学习如何使用Keras创建一个简单的神经网络来从非结构化文本数据中提取信息(NER). 模型架构 在这里,我们将使用BILSTM + CRF层.LSTM层用于过滤不需要的信息,将仅 ...

  8. Tensorflow Keras中的masking与padding的学习笔记

    Tensorflow Keras中的masking与padding 1. 背景 2. padding填充序列数据例子 3. 遮盖(masking ) 3.1 添加一个 keras.layers.Mas ...

  9. 详解keras中的Mask机制

    文章目录 一. Mask背景 1.2 例子1 1.2 例子2 二. 原理 三. 方式 3.1 配置keras.layers.Embedding 层 3.2 添加keras.layers.Masking ...

最新文章

  1. 几张图片总结我的2015年
  2. CSS布局(五) 网页布局方式
  3. 解决 c3p0 和 MySQL 集成情况下,连接长时间闲置后重新使用时报错的问题
  4. 一年级学情分析计算机,小学一年级语文学情分析范文
  5. 曲线相似度衡量——曲线距离计算Fréchet distance详解与python计算
  6. myeclipse文档链接oracle,[数据库]MyEclipse 连接Oracle数据库(初学者必看)
  7. linux终端中书名号,Linux双引号、单引号和反向单引号
  8. 基于Javaweb实现小区物业管理系统
  9. h5 移动端电子签名
  10. 教你查看预装Win8电脑内置系统激活密钥(Win8 OEM Key)
  11. [印刷工艺]从正度纸,大度纸说起
  12. 加拿大康考迪亚计算机工程,加拿大康考迪亚
  13. 读薄《高性能MySql》(三)索引优化
  14. MySQL DATE_SUB() -- 从日期减去指定的时间间隔
  15. uniapp基础介绍
  16. 学透CSS-当CSS遇到古诗和月亮,月亮动起来!!!
  17. 前端开发相关的学习网站
  18. PgSQL修改字段备注
  19. 华为交换机access、trunk、hybrid口区别理解
  20. [Java面试九]脚本语言知识总结.

热门文章

  1. P4:编程网络的转发平面
  2. 使用nexus搭建离线仓库
  3. SSL连接建立过程分析(1)
  4. tcl手机 手写java_TCL魔法手指V2.0 (使笔记本Synaptics触摸板变身为手写板)
  5. java学习笔记-类的加载器
  6. java基于Android studio的校园通设计
  7. DPDK分析学习之全网唯一的DPDK教学课程丨虚拟化高性能专家之路
  8. 美国创建了史上最强的量子计算器,超强量子算法秒杀一切当今科技
  9. 最流行的网站推广方法汇总
  10. elementui实现级联