尝试使用一个循环图层编译网络时发现了问题.似乎第一层的维度存在一些问题,因此我理解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
我将以下代码用于标准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。任何帮助表示赞赏。
我面临以下问题。我有大量文档要使用双向 LSTM 进行编码。每个文档都有不同数量的单词,单词可以被认为是一个时间步长。
在配置双向 LSTM 时,我们需要提供时间序列长度。当我训练模型时,每个批次的这个值都会不同。我应该为timeseries_size
我允许的最大文档大小选择一个数字吗?任何大于这个的文件都不会被编码?
示例配置:
Bidirectional(LSTM(128, return_sequences=True), input_shape=(timeseries_size, encoding_size))
Run Code Online (Sandbox Code Playgroud) 在Keras中有一种方法可以在给定输入的每个时间步长处检索LSTM层的单元状态(即c向量)吗?
似乎return_state
参数在计算完成后返回最后一个单元格状态,但我还需要中间单元格.另外,我不想将这些单元状态传递给下一层,我只希望能够访问它们.
最好使用TensorFlow作为后端.
谢谢
我是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) 我正在训练一个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) 我正在尝试将张量从[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)
在 …
我正在学习使用 keras 构建自定义的序列到序列模型,并且一直在阅读其他人编写的一些代码,例如这里。我对有关常量的调用方法感到困惑。有 keras “关于将外部常量传递给 RNN 的注意事项”,但是我无法理解常量对模型的作用。
我确实浏览了注意力模型和指针网络论文,但也许我错过了一些东西。
对建模细节的任何参考将不胜感激!提前致谢。
当您的 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 个单元,以此类推。
我正在使用 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)