标签: recurrent-neural-network

如何在Keras中使用嵌入层用于递归神经网络(RNN)

我对神经网络和Keras库很新,我想知道如何使用这里描述的嵌入层来掩盖我的输入数据从2D张量到RNN的3D张量.

说我的时间序列数据如下(随着时间的增加):

X_train = [
   [1.0,2.0,3.0,4.0],
   [2.0,5.0,6.0,7.0],
   [3.0,8.0,9.0,10.0],
   [4.0,11.0,12.0,13.0],
   ...
] # with a length of 1000
Run Code Online (Sandbox Code Playgroud)

现在,假设我想给RNN最后2个特征向量,以便预测时间t + 1的特征向量.

目前(不埋层),我创造与形状(nb_samples,时间步长,input_dim)自己所需要的三维张量(如本例这里).

与我的例子相关,最终的3D Tensor看起来如下:

X_train_2 = [
  [[1.0,2.0,3.0,4.0],
   [2.0,5.0,6.0,7.0]],
  [[2.0,5.0,6.0,7.0],
   [3.0,8.0,9.0,10.0]],
  [[3.0,8.0,9.0,10.0],
   [4.0,11.0,12.0,13.0]],
  etc...
]
Run Code Online (Sandbox Code Playgroud)

和Y_train:

Y_train = [
   [3.0,8.0,9.0,10.0],
   [4.0,11.0,12.0,13.0],
   etc...
]
Run Code Online (Sandbox Code Playgroud)

我的模型如下(适用于上面的简化示例):

num_of_vectors = 2
vect_dimension = 4

model = Sequential()
model.add(SimpleRNN(hidden_neurons, return_sequences=False, input_shape=(num_of_vectors, vect_dimension))) 
model.add(Dense(vect_dimension))
model.add(Activation("linear"))
model.compile(loss="mean_squared_error", optimizer="rmsprop")
model.fit(X_train, Y_train, batch_size=50, nb_epoch=10, validation_split=0.15)
Run Code Online (Sandbox Code Playgroud)

最后,我的问题是,我怎么能避免那些2D张量到3D张量重塑我自己并使用嵌入层呢?我想在model = sequential()之后,我将不得不添加如下内容:

model.add(Embedding(?????))
Run Code Online (Sandbox Code Playgroud)

可能答案很简单,我只是对嵌入层的文档感到困惑.

embedding neural-network keras recurrent-neural-network

9
推荐指数
1
解决办法
8604
查看次数

model.fit上的维数错误

我正在尝试运行这个SimpleRNN:

model.add(SimpleRNN(init='uniform',output_dim=1,input_dim=len(pred_frame.columns)))
model.compile(loss="mse", optimizer="sgd")
model.fit(X=predictor_train, y=target_train, batch_size=len(pred_frame.index),show_accuracy=True)
Run Code Online (Sandbox Code Playgroud)

错误发生在model.fit上,如下所示:

File "/Users/file.py", line 1496, in Pred
model.fit(X=predictor_train, y=target_train, batch_size=len(pred_frame.index),show_accuracy=True)
File "/Library/Python/2.7/site-packages/keras/models.py", line 581, in fit
shuffle=shuffle, metrics=metrics)
File "/Library/Python/2.7/site-packages/keras/models.py", line 239, in _fit
outs = f(ins_batch)
File "/Library/Python/2.7/site-packages/keras/backend/theano_backend.py", line 365, in __call__
return self.function(*inputs)
File "/Library/Python/2.7/site-packages/theano/compile/function_module.py", line 513, in __call__
allow_downcast=s.allow_downcast)
File "/Library/Python/2.7/site-packages/theano/tensor/type.py", line 169, in filter
data.shape))
TypeError: ('Bad input argument to theano function with name "/Library/Python/2.7/site-packages/keras/backend/theano_backend.py:362"  at index 0(0-based)', 'Wrong number of dimensions: expected 3, got 2 with shape (88, …
Run Code Online (Sandbox Code Playgroud)

python keras recurrent-neural-network

9
推荐指数
1
解决办法
1711
查看次数

在张量流中,如何迭代存储在张量中的一系列输入?

我正在尝试RNN的可变长度多变量序列分类问题.

我已经定义了以下函数来获取序列的输出(即,从序列的最终输入被馈送后RNN单元的输出)

def get_sequence_output(x_sequence, initial_hidden_state):
    previous_hidden_state = initial_hidden_state
    for x_single in x_sequence:
        hidden_state = gru_unit(previous_hidden_state, x_single)
        previous_hidden_state = hidden_state
    final_hidden_state = hidden_state
    return final_hidden_state
Run Code Online (Sandbox Code Playgroud)

x_sequence(?, ?, 10)第一个形状的张量?是批量大小和第二?用于序列长度,每个输入元素的长度为10. gru函数采用先前的隐藏状态和当前输入,并吐出下一个隐藏状态(标准门控循环单元).

我收到一个错误:'Tensor' object is not iterable. 如何以序列方式迭代Tensor(一次读取单个元素)?

我的目标是为gru序列中的每个输入应用函数并获得最终的隐藏状态.

python tensorflow recurrent-neural-network gated-recurrent-unit

9
推荐指数
2
解决办法
1万
查看次数

LSTM RNN反向传播

有人能否清楚解释LSTM RNN的反向传播?这是我正在使用的类型结构.我的问题不在于什么是反向传播,我理解它是一种计算用于调整神经网络权重的假设和输出误差的逆序方法.我的问题是LSTM反向传播与常规神经网络的不同之处.

在此输入图像描述

我不确定如何找到每个门的初始误差.您是否使用每个门的第一个误差(由假设减去输出计算)?或者你通过一些计算调整每个门的误差?我不确定细胞状态如何在LSTM的反向支持中发挥作用.我已经彻底查看了LSTM的良好来源,但还没有找到任何.

machine-learning backpropagation neural-network lstm recurrent-neural-network

9
推荐指数
2
解决办法
6154
查看次数

Keras中具有批量归一化的双向LSTM

我想知道如何在Keras中实现具有批量标准化(BN)的biLSTM.我知道BN层应该在线性和非线性之间,即激活.使用CNN或Dense图层很容易实现.但是,如何用biLSTM做到这一点?

提前致谢.

python lstm keras recurrent-neural-network keras-layer

9
推荐指数
1
解决办法
5838
查看次数

如何在序列的前后填充之间进行选择会影响结果

我正在研究NLP序列标记问题.我的数据由(w_1, w_2, ..., w_k)具有相应标签的可变长度序列组成(l_1, l_2, ..., l_k)(在这种情况下,任务被命名为实体提取).

我打算用回归神经网络解决这个问题.由于序列长度可变,我需要填充它们(我希望批量大小> 1).我可以选择预先填零它们,或者将它们填充为零.即要么我让每个序列(0, 0, ..., w_1, w_2, ..., w_k)(w_1, w_2, ..., w_k, 0, 0, ..., 0)使得每个序列的lenght是一样的.

如何在填充前后填充影响结果?

似乎预填充更常见,但我无法找到解释为什么它会更好.由于RNN的性质,它对我来说是一种随意的选择,因为它们跨时间步长共享权重.

performance machine-learning recurrent-neural-network

9
推荐指数
2
解决办法
1364
查看次数

Keras - 将3通道图像输入LSTM

我已经将一系列图像读入一个具有形状的numpy数组,(7338, 225, 1024, 3)其中7338是样本大小,225是时间步长,1024 (32x32)3通道(RGB)中的平坦图像像素.

我有一个带LSTM层的顺序模型:

model = Sequential()
model.add(LSTM(128, input_shape=(225, 1024, 3))
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
Run Code Online (Sandbox Code Playgroud)

文件提到,对于LSTM层输入张量应该是3D tensor with shape (batch_size, timesteps, input_dim),但对我来说我input_dim是2D的.

在Keras中将3通道图像输入LSTM层的建议方法是什么?

python lstm keras recurrent-neural-network

9
推荐指数
1
解决办法
6639
查看次数

Recurrentshop和Keras:多维RNN导致尺寸不匹配误差

我和Recurrentshop和Keras有问题.我试图在Recurrent Model中使用Concatenate和多维张量,无论我如何安排Input,shape和batch_shape,我都会遇到维度问题.

最小代码:

from keras.layers import *
from keras.models import *
from recurrentshop import *
from keras.layers import Concatenate

input_shape=(128,128,3)

x_t = Input(shape=(128,128,3,))
h_tm1 = Input(shape=(128,128,3, ))

h_t1 = Concatenate()([x_t, h_tm1])
last = Conv2D(3, kernel_size=(3,3), strides=(1,1), padding='same',     name='conv2')(h_t1)

# Build the RNN
rnn = RecurrentModel(input=x_t, initial_states=[h_tm1], output=last,     final_states=[last], state_initializer=['zeros'])

x = Input(shape=(128,128,3, ))
y = rnn(x)

model = Model(x, y)

model.predict(np.random.random((1, 128, 128, 3)))
Run Code Online (Sandbox Code Playgroud)

错误代码:

ValueError: Shape must be rank 3 but it is rank 4 for 'recurrent_model_1/concatenate_1/concat' (op:ConcatV2) with …
Run Code Online (Sandbox Code Playgroud)

python machine-learning keras tensorflow recurrent-neural-network

9
推荐指数
1
解决办法
356
查看次数

用numpy实现RNN

我正试图用numpy实现递归神经网络.

我目前的输入和输出设计如下:

x 形状:(序列长度,批量大小,输入维度)

h :(层数,方向数,批量大小,隐藏大小)

initial weight:(方向数,2*隐藏大小,输入大小+隐藏大小)

weight:(层数-1,方向数,隐藏大小,方向*隐藏大小+隐藏大小)

bias:(层数,方向数,隐藏大小)

我已经查找了RNN的pytorch API作为参考(https://pytorch.org/docs/stable/nn.html?highlight=rnn#torch.nn.RNN),但略微改变它以包括初始权重作为输入.(输出形状与pytorch中的相同)

当它正在运行时,我无法确定它是否表现正常,因为我输入随机生成的数字作为输入.

特别是,我不确定我的输入形状是否设计正确.

有专家可以给我一个指导吗?

def rnn(xs, h, w0, w=None, b=None, num_layers=2, nonlinearity='tanh', dropout=0.0, bidirectional=False, training=True):
    num_directions = 2 if bidirectional else 1
    batch_size = xs.shape[1]
    input_size = xs.shape[2]
    hidden_size = h.shape[3]
    hn = []
    y = [None]*len(xs)

    for l in range(num_layers):
        for d in range(num_directions):
            if l==0 and d==0:
                wi = w0[d, :hidden_size,  :input_size].T
                wh = w0[d, hidden_size:,  input_size:].T
                wi = np.reshape(wi, (1,)+wi.shape)
                wh …
Run Code Online (Sandbox Code Playgroud)

python numpy recurrent-neural-network rnn

9
推荐指数
1
解决办法
875
查看次数

LSTM 模型中的时间步长到底是什么?

作为一个整体,我是 LSTM 和 RNN 的新手,我一直在绞尽脑汁想了解什么是时间步长。我真的很感激对此的直观解释

deep-learning lstm recurrent-neural-network timestep

9
推荐指数
1
解决办法
1万
查看次数