标签: rnn

Keras简单的RNN实现

尝试使用一个循环图层编译网络时发现了问题.似乎第一层的维度存在一些问题,因此我理解RNN层在Keras中的工作方式.

我的代码示例是:

model.add(Dense(8,
                input_dim = 2,
                activation = "tanh",
                use_bias = False))
model.add(SimpleRNN(2,
                    activation = "tanh",
                    use_bias = False))
model.add(Dense(1,
                activation = "tanh",
                use_bias = False))
Run Code Online (Sandbox Code Playgroud)

错误是

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

无论input_dim值如何,都会返回此错误.我错过了什么?

machine-learning neural-network keras recurrent-neural-network rnn

6
推荐指数
1
解决办法
2796
查看次数

Tensorflow中基于CuDnnGRU的RNN实现的简单示例

我将以下代码用于标准GRU实施:

def BiRNN_deep_dynamic_FAST_FULL_autolength(x,batch_size,dropout,hidden_dim):

seq_len=length_rnn(x)

with tf.variable_scope('forward'):
    lstm_cell_fwd =tf.contrib.rnn.GRUCell(hidden_dim,kernel_initializer=tf.contrib.layers.xavier_initializer(),bias_initializer=tf.contrib.layers.xavier_initializer())
    lstm_cell_fwd = tf.contrib.rnn.DropoutWrapper(lstm_cell_fwd, output_keep_prob=dropout)
with tf.variable_scope('backward'):
    lstm_cell_back =tf.contrib.rnn.GRUCell(hidden_dim,kernel_initializer=tf.contrib.layers.xavier_initializer(),bias_initializer=tf.contrib.layers.xavier_initializer())
    lstm_cell_back = tf.contrib.rnn.DropoutWrapper(lstm_cell_back, output_keep_prob=dropout)

outputs,_= tf.nn.bidirectional_dynamic_rnn(cell_fw=lstm_cell_fwd,cell_bw= lstm_cell_back,inputs=x,sequence_length=seq_len,dtype=tf.float32,time_major=False)
outputs_fwd,outputs_bck=outputs

### fwd matrix is the matrix that keeps all the last [-1] vectors
fwd_matrix=tf.gather_nd(outputs_fwd, tf.stack([tf.range(batch_size), seq_len-1], axis=1))       ###  99,64

outputs_fwd=tf.transpose(outputs_fwd,[1,0,2])
outputs_bck=tf.transpose(outputs_bck,[1,0,2])

return outputs_fwd,outputs_bck,fwd_matrix
Run Code Online (Sandbox Code Playgroud)

谁能提供一个简单的示例来说明如何以类似方式使用tf.contrib.cudnn_rnn.CudnnGRU Cell?只是换出单元格是行不通的。

第一个问题是CuDnnGRU单元没有任何丢弃包装,这很好。其次,它似乎不适用于tf.nn.bidirectional_dynamic_rnn。任何帮助表示赞赏。

tensorflow rnn

6
推荐指数
1
解决办法
3770
查看次数

如何在 Keras 中为双向 LSTM 配置输入形状

我面临以下问题。我有大量文档要使用双向 LSTM 进行编码。每个文档都有不同数量的单词,单词可以被认为是一个时间步长。

在配置双向 LSTM 时,我们需要提供时间序列长度。当我训练模型时,每个批次的这个值都会不同。我应该为timeseries_size我允许的最大文档大小选择一个数字吗?任何大于这个的文件都不会被编码?

示例配置:

Bidirectional(LSTM(128, return_sequences=True), input_shape=(timeseries_size, encoding_size))
Run Code Online (Sandbox Code Playgroud)

nlp machine-learning lstm keras rnn

6
推荐指数
1
解决办法
3671
查看次数

如何在Keras的每个时间步长从LSTM中提取细胞状态?

在Keras中有一种方法可以在给定输入的每个时间步长处检索LSTM层的单元状态(即c向量)吗?

似乎return_state参数在计算完成后返回最后一个单元格状态,但我还需要中间单元格.另外,我不想将这些单元状态传递给下一层,我只希望能够访问它们.

最好使用TensorFlow作为后端.

谢谢

deep-learning lstm keras tensorflow rnn

6
推荐指数
1
解决办法
233
查看次数

Keras报告TypeError:+不支持的操作数类型:'NoneType'和'int'

我是Keras的初学者,只写一个玩具示例。它报告一个TypeError。代码和错误如下:

码:

inputs = keras.Input(shape=(3, ))

cell = keras.layers.SimpleRNNCell(units=5, activation='softmax')
label = keras.layers.RNN(cell)(inputs)

model = keras.models.Model(inputs=inputs, outputs=label)
model.compile(optimizer='rmsprop',
              loss='mae',
              metrics=['acc'])

data = np.array([[1, 2, 3], [3, 4, 5]])
labels = np.array([1, 2])
model.fit(x=data, y=labels)
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):
    File "/Users/david/Documents/code/python/Tensorflow/test.py", line 27, in <module>
        run()
    File "/Users/david/Documents/code/python/Tensorflow/test.py", line 21, in run
        label = keras.layers.RNN(cell)(inputs)
    File "/Users/david/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/layers/recurrent.py", line 619, in __call__
...
    File "/Users/david/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/init_ops.py", line 473, in __call__
        scale /= max(1., (fan_in + fan_out) / 2.)
TypeError: …
Run Code Online (Sandbox Code Playgroud)

python machine-learning keras tensorflow rnn

6
推荐指数
1
解决办法
3552
查看次数

LSTM Keras API预测多个输出

我正在训练一个LSTM模型,使用50个步骤的顺序输入3种不同功能,如下所示:

#x_train
[[[a0,b0,c0],.....[a49,b49,c49]],
  [a1,b1,c1]......[a50,b50,c50]],
  ...
  [a49,b49,c49]...[a99,b99,c99]]]
Run Code Online (Sandbox Code Playgroud)

使用以下因变量

#y_train
[a50, a51, a52, ... a99]
Run Code Online (Sandbox Code Playgroud)

下面的代码只能预测a,如何在给定的时间步长预测并返回[a,b,c]向量?

def build_model():
model = Sequential()

model.add(LSTM(
    input_shape=(50,3),
    return_sequences=True, units=50))
model.add(Dropout(0.2))

model.add(LSTM(
    250,
    return_sequences=False))
model.add(Dropout(0.2))

model.add(Dense(1))
model.add(Activation("linear"))

model.compile(loss="mse", optimizer="rmsprop")
return model
Run Code Online (Sandbox Code Playgroud)

machine-learning lstm keras rnn

5
推荐指数
1
解决办法
5902
查看次数

在 TensorFlow 中展平张量的最后两个维度

我正在尝试将张量从[A, B, C, D]into重塑[A, B, C * D]并将其输入到dynamic_rnn. 假设我事先不知道 B、C 和 D(它们是卷积网络的结果)。

我认为在 Theano 中,这种重塑看起来像这样:

x = x.flatten(ndim=3)
Run Code Online (Sandbox Code Playgroud)

似乎在 TensorFlow 中没有简单的方法可以做到这一点,到目前为止,这是我想出的:

x_shape = tf.shape(x)
x = tf.reshape(x, [batch_size, x_shape[1], tf.reduce_prod(x_shape[2:])]
Run Code Online (Sandbox Code Playgroud)

即使当的形状x曲线建筑物中是已知的(即,print(x.get_shape())打印出的绝对值,如[10, 20, 30, 40]整形后get_shape()变得[10, None, None]再次,仍然假定初始形状是未知的,所以我不能与绝对值操作。

当我传递x给 a 时,dynamic_rnn它失败了:

ValueError: Input size (depth of inputs) must be accessible via shape inference, but saw value None.
Run Code Online (Sandbox Code Playgroud)

为什么reshape无法处理这个案子?flatten(ndim=n)在 …

python theano tensorflow rnn

5
推荐指数
1
解决办法
7105
查看次数

可选参数“常量”在 keras 循环层中有什么作用?

我正在学习使用 keras 构建自定义的序列到序列模型,并且一直在阅读其他人编写的一些代码,例如这里。我对有关常量的调用方法感到困惑。有 keras “关于将外部常量传递给 RNN 的注意事项”,但是我无法理解常量对模型的作用。

我确实浏览了注意力模型指针网络论文,但也许我错过了一些东西。

对建模细节的任何参考将不胜感激!提前致谢。

python keras rnn

5
推荐指数
1
解决办法
844
查看次数

有状态 LSTM - 批次之间和批次内的隐藏状态转移 (Keras)

当您的 batch_size > 1 时,隐藏/单元格状态如何从一个批次内转移,以及跨批次,我一直很困惑。

我目前的假设是隐藏状态永远不会在一个批次内从一个系列转移到另一个系列。即当batch_size = 3 时,第一项的隐藏状态不会传递给第二项。

接下来,设置 Stateful=True 将意味着第一批的第一个元素的隐藏状态被传递给第二批的第一个元素,依此类推。

这是文档状态:

    If True, the last state
    for each sample at index i in a batch will be used as initial
    state for the sample of index i in the following batch.
Run Code Online (Sandbox Code Playgroud)

我一直在努力寻找对此的确认,而且它似乎也不是很直观,因为假设我的数据是连续的,并且我已将我的数据批量处理为 3,我不明白为什么我想要隐藏状态从第 1 个单元转移到第 4 个单元,第 2 个单元转移到第 5 个单元,以此类推。

machine-learning lstm keras recurrent-neural-network rnn

5
推荐指数
1
解决办法
296
查看次数

PyTorch:DecoderRNN:RuntimeError:输入必须有 3 维,得到 2

我正在使用 PyTorch 构建一个 DecoderRNN(这是一个图像字幕解码器):

class DecoderRNN(nn.Module):
    def __init__(self, embed_size, hidden_size, vocab_size):

        super(DecoderRNN, self).__init__()
        self.hidden_size = hidden_size
        self.gru = nn.GRU(embed_size, hidden_size, hidden_size)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, features, captions):

        print (features.shape)
        print (captions.shape)
        output, hidden = self.gru(features, captions)
        output = self.softmax(self.out(output[0]))
        return output, hidden 
Run Code Online (Sandbox Code Playgroud)

数据具有以下形状:

torch.Size([10, 200])  <- features.shape (10 for batch size)
torch.Size([10, 12])   <- captions.shape (10 for batch size)
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误。有什么想法我在这里错过了吗?谢谢!

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-2-76e05ba08b1d> in <module>()
     44         # Pass the inputs through the CNN-RNN model. …
Run Code Online (Sandbox Code Playgroud)

python-3.x encoder-decoder pytorch rnn

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