keras中seq2seq实现】的更多相关文章

这里只是简单的一个例子 输入序列 目标序列 [13, 28, 18, 7, 9, 5] [18, 28, 13] [29, 44, 38, 15, 26, 22] [38, 44, 29] [27, 40, 31, 29, 32, 1] [31, 40, 27] 1.输入序列与目标序列向量化 设置GPU进行计算 import tensorflow as tf tf.debugging.set_log_device_placement(True) 导入需要的函数和包 from numpy impo…
keras提供了VGG19在ImageNet上的预训练权重模型文件,其他可用的模型还有VGG16.Xception.ResNet50.InceptionV3 4个. VGG19在keras中的定义: def VGG19(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000) include_top: 是否包含最后的3个全连接层 weights: 定…
深度学习的优化算法,说白了就是梯度下降.每次的参数更新有两种方式. 一. 第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度.这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降. 二. 另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent.这个方法速度比较快,但是收敛性能不太好,可能…
tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. keras的模型保存分为多种情况. 一.不保存模型只显示大概结构 model.summary() 这个函数会打印模型结构,但是仅仅是打印到控制台. keras.utils.plot_model() 使用graphviz中的dot.exe生成网络结构拓扑图 二.保存模型结构 keras.models.…
用keras搭好模型架构之后的下一步,就是执行编译操作.在编译时,经常需要指定三个参数 loss optimizer metrics 这三个参数有两类选择: 使用字符串 使用标识符,如keras.losses,keras.optimizers,metrics包下面的函数 例如: sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='categorical_crossentropy', opt…
在使用RNN based model处理序列的应用中,如果使用并行运算batch sample,我们几乎一定会遇到变长序列的问题. 通常解决变长的方法主要是将过长的序列截断,将过短序列用0补齐到一个固定长度(例如max_length). 最后由n个sample组成的dataset能形成一个shape == (n, max_length)的矩阵.然后可以将这个矩阵传递到后续的模型中使用. 然而我们可以很明显,如果用0或者其他整数补齐,势必会影响到模型自身(莫名其妙被输入很多个0,显然是有问题的).…
在深度学习中,数据短缺是我们经常面临的一个问题,虽然现在有不少公开数据集,但跟大公司掌握的海量数据集相比,数量上仍然偏少,而某些特定领域的数据采集更是非常困难.根据之前的学习可知,数据量少带来的最直接影响就是过拟合.那有没有办法在现有少量数据基础上,降低或解决过拟合问题呢? 答案是有的,就是数据增强技术.我们可以对现有的数据,如图片数据进行平移.翻转.旋转.缩放.亮度增强等操作,以生成新的图片来参与训练或测试.这种操作可以将图片数量提升数倍,由此大大降低了过拟合的可能.本文将详解图像增强技术在K…
在统计学中,损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关,如费用或者设备的损失)程度的函数.假设某样本的实际输出为a,而预计的输出为y,则y与a之间存在偏差,深度学习的目的即是通过不断地训练迭代,使得a越来越接近y,即 a - y →0,而训练的本质就是寻找损失函数最小值的过程. 常见的损失函数为两种,一种是均方差函数,另一种是交叉熵函数.对于深度学习而言,交叉熵函数要优于均方差函数,原因在于交叉熵函数配合输出层的激活函数如sigmoid或softmax函数能更快地加速深度学习的训…
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度学习框架中的sklearn,本文就将基于Keras,以手写数字数据集MNIST为演示数据,对多层感知机(MLP)的训练方法进行一个基本的介绍,而关于多层感知机的相关原理,请移步数据科学学习手札34:https://www.cnblogs.com/feffery/p/8996623.html,本文不再…
最近在学习SSD的源码,其中有两个自定的层,特此学习一下并记录. import keras.backend as K from keras.engine.topology import InputSpec from keras.engine.topology import Layer import numpy as np class L2Normalization(Layer): ''' Performs L2 normalization on the input tensor with a l…
[知乎作答]·关于在Keras中多标签分类器训练准确率问题 本文来自知乎问题 关于在CNN中文本预测sigmoid分类器训练准确率的问题?中笔者的作答,来作为Keras中多标签分类器的使用解析教程. 一.问题描述 关于在CNN中文本预测sigmoid分类器训练准确率的问题? 对于文本多标签多分类问题,目标标签形如[ 0 0 1 0 0 1 0 1 0 1 ].在CNN中,sigmoid分类器训练.测试的准确率的判断标准是预测准确其中一个标签即为预测准确还是怎样.如何使sigmoid分类器的准确率…
在keras中,数据是以张量的形式表示的,张量的形状称之为shape,表示从最外层向量逐步到达最底层向量的降维解包过程.“维”的也叫“阶”,形状指的是维度数和每维的大小.比如,一个一阶的张量[1,2,3]的shape是(3,); 一个二阶的张量[[1,2,3],[4,5,6]]的shape是(2,3);一个三阶的张量[[[1],[2],[3]],[[4],[5],[6]]]的shape是(2,3,1) input_shape就是指输入张量的shape.例如,input_dim=784,dim是指…
一.问题: keras中不能在每个epoch实时显示学习速率learning rate,从而方便调试,实际上也是为了调试解决这个问题:Deep Learning 31: 不同版本的keras,对同样的代码,得到不同结果的原因总结 二.解决方法 1.把下面代码加入keras文件callbacks.py中: class DisplayLearningRate(Callback): '''Display Learning rate . ''' def __init__(self): super(Dis…
keras中含有多个网络的预训练模型,可以很方便的拿来进行使用. 安装及使用主要参考官方教程:https://keras.io/zh/applications/   https://keras-cn.readthedocs.io/en/latest/other/application/ 官网上给出了使用 ResNet50 进行 ImageNet 分类的样例 from keras.applications.resnet50 import ResNet50 from keras.preprocess…
报错问题: ValueError: Negative dimension size caused by subtracting 5 from 1 for 'conv2d_1/convolution' (op: 'Conv2D') with input shapes: [?,1,28,28], [5,5,28,32]. 问题分析: 定位:x_train = x_train.reshape(x_train.shape[0],1, 28,28).astype('float32') 分析:input_s…
keras中常用的初始化器有恒值初始化器.正态分布初始化器.均匀分布初始化器 恒值初始化器: keras.initializers.Zeros() keras.initializers.Ones() keras.initializers.Constant(value=0) 正态分布初始化器: keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None)mean:均值,stddev:标准差,seed:生成随机数的种子 keras…
写这篇博客的原因主要是为了总结下在深度学习中我们常会遇到的一些问题,以及不知道如何解决,我准备把这个部分作为一个系列,为了让大家少走一些坑,对于本博客有什么错误,欢迎大家指出,下面切入正题吧. 1. 深度学习,一个令人头疼的问题就是如何调参? 简而言之,如果数据集复杂的话,那么就要增加网络的层数,模型欠拟合了,加节点. 2. 关于验证集的loss曲线和acc曲线震荡,不平滑问题 出现loss震荡不平滑的原因可能如下: (1) 学习率可能太大 (2) batch size太小 (3) 样本分布不均…
在keras中保存模型有几种方式: (1):使用callbacks,可以保存训练中任意的模型,或选择最好的模型 logdir = './callbacks' if not os.path.exists(logdir): os.mkdir(logdir) output_model_file = os.path.join(logdir, "xxxx.h5") callbacks = [ tf.keras.callbacks.ModelCheckpoint(output_model_file…
作者|Praneet Bomma 编译|VK 来源|https://towardsdatascience.com/visualising-lstm-activations-in-keras-b50206da96ff 你是否想知道LSTM层学到了什么?有没有想过是否有可能看到每个单元如何对最终输出做出贡献.我很好奇,试图将其可视化.在满足我好奇的神经元的同时,我偶然发现了Andrej Karpathy的博客,名为"循环神经网络的不合理有效性".如果你想获得更深入的解释,建议你浏览他的博客…
在训练了 50 个 epoch 之后,本文作者惊讶地发现模型什么都没学到,于是开始深挖背后的问题,并最终从恺明大神论文中得到的知识解决了问题. 上个星期我做了一些实验,用了在 CIFAR10 数据集上训练的 VGG16.我需要从零开始训练模型,所以没有使用在 ImageNet 上预训练的版本. 我开始了 50 个 epoch 的训练,然后去喝了个咖啡,回来就看到了这些学习曲线: 模型什么都没学到! 我见过网络收敛得极其缓慢.振荡.过拟合.发散,但这是我第一次发现这种行为--模型根本就没有起任何作…
  学习率是一个控制每次更新模型权重时响应估计误差而调整模型程度的超参数.学习率选取是一项具有挑战性的工作,学习率设置的非常小可能导致训练过程过长甚至训练进程被卡住,而设置的非常大可能会导致过快学习到次优的权重集合或者训练过程不稳定. 迁移学习 我们使用迁移学习将训练好的机器学习模型应用于不同但相关的任务中.这在深度学习这种使用层级链接的神经网络中非常有效.特别是在计算机视觉任务中,这些网络中的前几层倾向于学习较简单的特征.例如:边缘.梯度特征等. 这是一种在计算机视觉任务中被证实过可以产生更好…
使用背景 最常见的一种情况, 在NLP问题的句子补全方法中, 按照一定的长度, 对句子进行填补和截取操作. 一般使用keras.preprocessing.sequence包中的pad_sequences方法, 在句子前面或者后面补0. 但是这些零是我们不需要的, 只是为了组成可以计算的结构才填补的. 因此计算过程中, 我们希望用mask的思想, 在计算中, 屏蔽这些填补0值得作用. keras中提供了mask相关的操作方法. 原理 在keras中, Tensor在各层之间传递, Layer对象…
之前在看<Semi-supervised Sequence Learning>这篇文章的时候对seq2seq半监督的方式做文本分类的方式产生了一定兴趣,于是开始简单研究了seq2seq.先来简单说一下这篇paper的内容: 创立的新形式Sequence AutoEncoder LSTM(SA-LSTM),Pre-trained RNNs are more stable, generalize better, and achieve state-of-the-art results on var…
 先从sklearn说起吧,如果学习了sklearn的话,那么学习Keras相对来说比较容易.为什么这样说呢? 我们首先比较一下sklearn的机器学习大致使用流程和Keras的大致使用流程: sklearn的机器学习使用流程: from sklearn.模型簇 import 模型名 from sklearn.metrics import 评价指标 ''' 数据预处理及训练测试集分离提取''' myModel = 模型名称() # 对象初始化 myModel.fit(训练集x , 训练集y) #…
Sequential 序贯模型 序贯模型是函数式模型的简略版,为最简单的线性.从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠. Keras实现了很多层,包括core核心层,Convolution卷积层.Pooling池化层等非常丰富有趣的网络结构. 我们可以通过将层的列表传递给Sequential的构造函数,来创建一个Sequential模型. from keras.models import Sequential from keras.layers import Dense, Activa…
https://www.zhihu.com/question/64470274 http://colah.github.io/posts/2015-08-Understanding-LSTMs/ https://jasdeep06.github.io/posts/Understanding-LSTM-in-Tensorflow-MNIST/ https://stackoverflow.com/questions/37901047/what-is-num-units-in-tensorflow-b…
I am going through the following blog on LSTM neural network:http://machinelearningmastery.com/understanding-stateful-lstm-recurrent-neural-networks-python-keras/ The author reshapes the input vector X as [samples, time steps, features] for different…
http://lazycoderx.com/2016/10/09/keras%E4%BF%9D%E5%AD%98%E6%A8%A1%E5%9E%8B%E6%97%B6%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0/ http://www.voidcn.com/blog/zjm750617105/article/p-5954719.html…
参考:https://www.cnblogs.com/weiyinfu/p/9788179.html#0 1.model.summary() 这个函数会打印模型结构,但是仅仅是打印到控制台,不能保存 2.keras.models.Model 对象的 to_json,to_yaml 只保存模型结构,加载时使用 keras.models.model_from_json(), keras.models.model_from_yaml() 3.keras.model.get_config() 返回文本形…
训练好的词向量模型被保存下来,该模型的本质就是一个m*n的矩阵,m代表训练语料中词的个数,n代表训练时我们设定的词向量维度.当我们训练好模型后再次调用时,就可以从该模型中直接获取到对应词的词向量. 通过上面我们可以拿到每个词的词向量,但是我们任务处理时一般是对句子或文本进行操作.当我们拿到一个词向量后,那么一个句子或一个文本就可以用词表示成矩阵(假设一个句子有5个词,词向量维度是64,那么该矩阵就是5*64),然后可以用CNN或RNN(LSTM)模型将该矩阵编码成一个一维向量,并保留大多数文本信…