rnn

Nan in summary histogram

匿名 (未验证) 提交于 2019-12-03 01:00:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: My program will face this some times(not every run will face this..), then if face this I can always reproduce this error loading from the last model I have saved before program crash due to nan. When rerun from this model, first train process seems fine using the model to generate loss(I have printed loss and shows no problem), but after applying gradients, the values of embedding variables will turn to Nan. So what is the root cause of the nan problem? Confused as not know how to debug further and this program with same data and params

RNN来解决命名实体识别问题(week2-NER)

匿名 (未验证) 提交于 2019-12-03 00:40:02
(本次笔记是基于HSE的课程natural language processing,第二周的作业。) 使用RNN来解决命名实体识别问题(NER)是NLP的常见问题,能够将文字中的实体提取出来,比如人名,组织,地名等等。这次作业将对Twitter上的信息做命名实体识别。这次作业将用到Bi-Directional Long Short-Term Memory Networks (Bi-LSTMs).作业可以分成三个部分。 1. 文本预处理。对于twitter中的文本,需要以’@’,’http’开始的字符串替换成’USER’,’URL’.并且将文本转化为一个dict和一个list。dict用来存储tok2idx,list用来存储idx2tok。 2. 构建Bi-LSTM模型,有以下几个方法。分别用来申明placeholder,定义层,计算输出,计算损失,优化方法。 - declare_placeholders() - build_layers(vocabulary_size, embedding_dim, n_hidden_rnn, - n_tags) - compute_predictions() - compute_loss(n_tags, PAD_index) - perform_optimization() 3. 训练和评估 1. declare_placeholders

TesorFlow之RNN与LSTM

匿名 (未验证) 提交于 2019-12-03 00:34:01
RNN 计算公式 由当前输入和前一状态得到当前状态 h t = f ( U x ( t ) + W h ( t 1 ) + b ) h t = f ( U x ( t ) + W h ( t 1 ) + b ) 注意当前状态并不直接输出,而是再通过一个全连接层 o ( t ) = V h ( t ) + c o ( t ) = V h ( t ) + c 代码实现 import numpy as np X = [ 1 , 2 ] state = [ 0.0 , 0.0 ] #状态权重 w_state = np.asarray([ 0.1 , 0.2 ],[ 0.3 , 0.4 ]) #输入权重 w_input = nu.asarray([ 0.5 , 0.6 ]) b_input = np.asarray([ 0.1 ,- 0.1 ]) #输出权重 w_output = np.asarray([[ 1.0 ],[ 2.0 ]]) b_ouput = np.asarray( 0.1 ) for i in len(X): #计算新的状态 state = np.tanh(np.dot(state,w_state)+X[i]*w_input+b) print(state) #计算输出 out = np.dot(state,w_output)+b_output print(out) LSTM

tensorflow入门笔记二

匿名 (未验证) 提交于 2019-12-03 00:30:01
报错 ValueError: Variable hello/rnn/basic_lstm_cell/weights already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at 因为之前的cell kernel还在运行,如果使用的两个不同的cell,用 variable scope指明 with tf.variable_scope('forward'): self.lstm_fw_cell = rnn_cell.BasicLSTMCell(dim_hidden) with tf.variable_scope('backward'): self.lstm_bw_cell = rnn_cell.BasicLSTMCell(dim_hidden) 如果使用的是相同的cell,将cell中的reuse设为True rnn.BasicLSTMCell(num_hidden, forget_bias=1.0, reuse = True) 文章来源: tensorflow入门笔记二

RNN识别mnist数据集

匿名 (未验证) 提交于 2019-12-03 00:29:01
用tensorflow跑RNN实现手写体的识别,下面上两个RNN的结构图 import tensorflow as tf from tensorflow.contrib import rnn import input_data import numpy as np import matplotlib.pyplot as plt print ("Packages imported") mnist = input_data.read_data_sets("data/", one_hot=True) trainimgs, trainlabels, testimgs, testlabels \ = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels ntrain, ntest, dim, nclasses \ = trainimgs.shape[0], testimgs.shape[0], trainimgs.shape[1], trainlabels.shape[1] print ("MNIST loaded") diminput = 28 dimhidden = 128 dimoutput = nclasses nsteps = 28 weights = { 'hidden': tf

RNN举例

匿名 (未验证) 提交于 2019-12-03 00:26:01
import tensorflow as tf from numpy.random import RandomState import math #hyperparameters NUM_BATCH = 100 MAX_STEPS = 9 hidden_size = 8 n_inputs = 2 n_steps = 3 batch_size = 5 dataset_size = n_steps * batch_size * NUM_BATCH #take exponitional decay to set learning rate global_step = tf.Variable(0) learning_rate = tf.train.exponential_decay(0.01, global_step, 5, 0.96, staircase=True) #generate dataset rdm = RandomState(1) X = rdm.rand(dataset_size,n_inputs) Y = [[int(x1 + x2 < 1)] for (x1, x2) in X] #data validation data according to the ratio validation_prop = math.floor(0.2*NUM_BATCH) #set

tensorflow.nn.bidirectional_dynamic_rnn()函数的用法

匿名 (未验证) 提交于 2019-12-03 00:22:01
转载请标明出处: http://blog.csdn.net/wuzqchom/article/details/75453327 在参加知乎比赛的时候感觉CNN调参已经差不多快到天花板了,于是试下双向的RNN。使用tensorflow.nn.bidirectional_dynamic_rnn()这个函数,就可以很方便的实现双向LSTM,很简洁。 首先来看一下,函数: def bidirectional_dynamic_rnn( cell_fw, # 前向RNN cell_bw, # 后向RNN inputs, # 输入 sequence_length =None,# 输入序列的实际长度(可选,默认为输入序列的最大长度) initial_state_fw =None, # 前向的初始化状态(可选) initial_state_bw =None, # 后向的初始化状态(可选) dtype =None, # 初始化和输出的数据类型(可选) parallel_iterations =None, swap_memory =False, time_major =False, # 决定了输入输出tensor的格式:如果为true, 向量的形状必须为 `[max_time, batch_size, depth]`. # 如果为false, tensor的形状必须为`[batch_size, max

RNN&amp;LSTM 简介

匿名 (未验证) 提交于 2019-12-03 00:22:01
每次网络的输出只依赖当前的输入, 没有考虑不同时刻输入的相互影响 输入和输出的维度都是固定的, 没有考虑到序列结构数据长度的不固定性 循环神经网络(Recurrent Neural Network,RNN)是一类专门用于处理 时序 数据样本的神经网络,它的每一层不仅输出给下一层,同时还输出一个 隐状态 ,给当前层在处理下一个样本时使用。就像卷积神经网络可以很容易地扩展到具有很大宽度和高度的图像,而且一些卷积神经网络还可以处理不同尺寸的图像,循环神经网络可以扩展到 更长的序列数据 ,而且大多数的循环神经网络可以 处理序列长度不同的数据(for 循环,变量长度可变) 。它可以看作是带自循环反馈的 全连接神经网络 。其网络结构如下图所示。 其中 x x 是输入序列(长度为 T T ), h h 是隐藏层序列, o o 是输出序列, L L 是总体损失, y y 是目标标签序列, U U 是 输入层到隐藏层 的参数矩阵, W W 是 隐藏层到隐藏层 的自循环参数矩阵, V V 是 隐藏层到输出层 的参数矩阵。值得注意的是:图中输入节点数(不止一个)、隐藏节点数、输出节点数都是用一个小圆圈表示的,它们之前是 全连接 的,且在隐藏层之间加了一个 自循环反馈(通过权重共享) ,这也是它能够处理不同序列长度数据的原因。其具体计算流程如下: 前向传播 公式如下所示,其中,输入层到隐藏层使用

深度学习框架Tensorflow学习--RNN实现识别数字

匿名 (未验证) 提交于 2019-12-03 00:22:01
本文用到的公式基本来自Alex的论文, δ L 可以看到输出层和普通的NN是完全一样的,接收隐藏层传入的数据并乘以参数求和,只是每一个计算出来的值都有个时间上标t,表示它是t时刻的那个节点。 而隐藏层的计算就是和NN不同的地方,从之前的拓扑图也看到了,隐藏层会接受来自上一时间隐藏层传入的数据,在公式里也体现出来了:第一个求和是和NN一致的,接收来自输入层的数据,第二个是接收来自上一隐藏层的数据。 参考链接: https://blog.csdn.net/Dark_Scope/article/details/47056361 LSTM(Long-Short Term Memory) 原生的RNN会遇到一个很大的问题,叫做 The vanishing gradient problem for RNNs,也就是后面时间的节点对于前面时间的节点感知力下降,也就是忘事儿,这也是NN在很长一段时间内不得志的原因,网络一深就没法训练了,深度学习那一套东西暂且不表,RNN解决这个问题用到的就叫LSTM,简单来说就是你不是忘事儿吗?我给你拿个小本子把事记上,好记性不如烂笔头嘛,所以LSTM引入一个核心元素就是Cell。 怎么这么复杂……不要怕,下文慢慢帮你缕清楚。理解LSTM最方便的就是结合上面这个图,先简单介绍下里面有几个东西: Cell,就是我们的小本子,有个叫做state的参数东西来记事儿的

tensorflow打印内部张量

匿名 (未验证) 提交于 2019-12-03 00:20:01
1. training_decoder_output 保存了 dynamic_decoder 过程的结果,其形式为 tuple(rnn_output,sample_id) traing_logits 获取了 training_decoder_output 中的 rnn_output k1 获取 shape,k2 获取具体 traing_logits ֵ training_decoder_output, _, _ = tf.contrib.seq2seq.dynamic_decode(training_decoder, impute_finished=True, maximum_iterations=max_target_sequence_length) training_logits = tf.identity(training_decoder_output.rnn_output, 'logits') k1=tf.shape(training_logits) k2=training_logits 2.在 Session 中, feed 数据,并打印 training_logits 的值 m1,m2=sess.run([k1,k2],{input_data: sources_batch, targets: targets_batch, lr: learning_rate,