我想知道如何在Keras中实现具有批量标准化(BN)的biLSTM.我知道BN层应该在线性和非线性之间,即激活.使用CNN或Dense图层很容易实现.但是,如何用biLSTM做到这一点?
提前致谢.
我正在使用Keras 1.0.我的问题与此问题相同(如何在Keras中实现Mean Pooling层),但对我来说这里的答案似乎不够.
以下代码不起作用:
sequence = Input(shape=(max_sent_len,), dtype='int32')
embedded = Embedding(vocab_size, word_embedding_size)(sequence)
lstm = LSTM(hidden_state_size, activation='sigmoid', inner_activation='hard_sigmoid', return_sequences=True)(embedded)
pool = AveragePooling1D()(lstm)
output = Dense(1, activation='sigmoid')(pool)
Run Code Online (Sandbox Code Playgroud)
如果我没有设置return_sequences=True,我打电话时会收到此错误AveragePooling1D():
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/PATH/keras/engine/topology.py", line 462, in __call__
self.assert_input_compatibility(x)
File "/PATH/keras/engine/topology.py", line 382, in assert_input_compatibility
str(K.ndim(x)))
Exception: ('Input 0 is incompatible with layer averagepooling1d_6: expected ndim=3', ' found ndim=2')
Run Code Online (Sandbox Code Playgroud)
否则,我打电话时会收到此错误Dense():
Traceback (most recent call last):
File …Run Code Online (Sandbox Code Playgroud) machine-learning neural-network deep-learning keras recurrent-neural-network
我收到了一些这种格式的数据和以下细节:
person1, day1, feature1, feature2, ..., featureN, label
person1, day2, feature1, feature2, ..., featureN, label
...
person1, dayN, feature1, feature2, ..., featureN, label
person2, day1, feature1, feature2, ..., featureN, label
person2, day2, feature1, feature2, ..., featureN, label
...
person2, dayN, feature1, feature2, ..., featureN, label
...
Run Code Online (Sandbox Code Playgroud)
目标是预测第二天的人的标签,因此dayN + 1的标签,无论是基于每个人还是整体(每个人对我更有意义).我可以自由地重新格式化数据(它不是很大).基于上面的一些阅读之后,我认为动态RNN(LSTM)可能效果最好:
如果对我的数据没有意义,请在这里阻止我.问题是:
如何为tensorflow/tflearn提供/格式化这些数据?
我使用tflearn 查看了这个例子,但是我不理解它的输入格式,所以我可以"镜像"它到我的.同样地,在一个非常相似的问题上找到了这篇文章,但看起来海报所拥有的样本彼此之间没有相关性,因为它们在我的中.我对tensorflow的体验仅限于其入门页面.
我有一个SimpleRNN喜欢:
model.add(SimpleRNN(10, input_shape=(3, 1)))
model.add(Dense(1, activation="linear"))
Run Code Online (Sandbox Code Playgroud)
模型摘要说:
simple_rnn_1 (SimpleRNN) (None, 10) 120
Run Code Online (Sandbox Code Playgroud)
我很好奇的参数个数120为simple_rnn_1。
有人能回答我的问题吗?
machine-learning neural-network deep-learning keras recurrent-neural-network
我正在阅读这篇文章(The Unreasonable Effectiveness of Recurrent Neural Networks),想了解如何在 Keras 中表达一对一、一对多、多对一和多对多 LSTM 神经网络. 我已经阅读了很多关于 RNN 并了解 LSTM NN 的工作原理,特别是消失梯度、LSTM 单元、它们的输出和状态、序列输出等。但是,我无法在 Keras 中表达所有这些概念。
首先,我使用 LSTM 层创建了以下玩具神经网络
from keras.models import Model
from keras.layers import Input, LSTM
import numpy as np
t1 = Input(shape=(2, 3))
t2 = LSTM(1)(t1)
model = Model(inputs=t1, outputs=t2)
inp = np.array([[[1,2,3],[4,5,6]]])
model.predict(inp)
Run Code Online (Sandbox Code Playgroud)
输出:
array([[ 0.0264638]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
在我的示例中,我的输入形状为 2 x 3。据我所知,这意味着输入是 2 个向量的序列,每个向量具有 3 个特征,因此我的输入必须是 shape 的 3D 张量(n_examples, 2, 3)。在'sequences'方面,输入是一个长度为2的序列,该序列中的每个元素用3个特征表示(如有错误请指正)。当我打电话predict它时,它会返回一个带有单个标量的 2 维张量。所以,
Q1:是一对一的还是其他类型的LSTM网络?
当我们说“一个/多个输入和一个/多个输出”时
Q2:我们所说的“一个/多个输入/输出”是什么意思?“一个/多个”标量、向量、序列……,一个/多个什么? …
我似乎无法理解 keras GRU 层中返回状态和返回序列之间的差异。
由于 GRU 单元没有单元状态(它等于输出),返回状态与 keras GRU 层中的返回序列有何不同?
更具体地说,我构建了一个编码器-解码器 LSTM 模型,其中包含一个编码器层和一个解码器层。编码器层返回其状态(return_state = TRUE),解码器层使用这些状态作为初始状态(initial_state = encoder_states)。
当尝试使用 GRU 层执行此操作时,我不明白在编码器和解码器层之间传递了什么状态。如果你能澄清这一点,请告诉我。提前致谢。
machine-learning lstm keras tensorflow recurrent-neural-network
我正在学习 tensorflow2.0 并按照教程进行操作。在rnn示例中,我找到了代码:
def build_model(vocab_size, embedding_dim, rnn_units, batch_size):
model = tf.keras.Sequential([
tf.keras.layers.Embedding(vocab_size, embedding_dim,
batch_input_shape=[batch_size, None]),
tf.keras.layers.LSTM(rnn_units,
return_sequences=True,
stateful=True,
recurrent_initializer='glorot_uniform'),
tf.keras.layers.Dense(vocab_size)
])
return model
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么代码设置了参数return_sequences=True和stateful=True?如何使用默认参数?
如果我错了,请纠正我,但根据官方Keras 文档,默认情况下,fit 函数的参数为“shuffle=True”,因此它会在每个 epoch 上对整个训练数据集进行洗牌。
但是,使用 LSTM 或 GRU 等循环神经网络的要点是使用每个数据的精确顺序,以便先前数据的状态影响当前数据。
如果我们将所有数据打乱,所有逻辑序列都会被破坏。因此我不明白为什么有这么多 LSTM 的例子,其中参数没有设置为 False。使用没有序列的 RNN 有什么意义?
此外,当我将 shuffle 选项设置为 False 时,即使数据之间存在依赖关系,我的 LSTM 模型的性能也会降低:我使用 KDD99 数据集,其中连接有链接。
该CuDNNGRU中TensorFlow 1.0是非常快。但是当我转移到TensorFlow 2.0我无法找到CuDNNGRU. 简单GRU在 TensorFlow 2.0.
有没有办法使用CuDNNGRU的TensorFlow 2.0?
python keras tensorflow recurrent-neural-network tensorflow2.0
在数据库中有带有记录的时间序列数据:
device- timestamp- temperature- min limit-max limitdevice- timestamp- temperature- min limit-max limitdevice- timestamp- temperature- min limit-max limit每device有 4 小时的时间序列数据(间隔 5 分钟)在发出警报之前和 4 小时的时间序列数据(再次间隔 5 分钟)没有引发任何警报。该图更好地描述了数据的表示,对于每个device:
我需要在 python 中使用 RNN 类进行警报预测。当temperature低于min limit或高于时,我们定义警报max limit。
从 tensorflow here阅读官方文档后,我在理解如何设置模型的输入时遇到了麻烦。我应该事先规范化数据还是其他什么,如果是,如何规范化?
同样阅读这里的答案也没有帮助我清楚地了解如何将我的数据转换为 RNN 模型可接受的格式。
关于我的情况下X和Yinmodel.fit应该是什么样子的任何帮助?
如果您看到有关此问题的任何其他问题,请随时发表评论。
附注。我已经设定python …
machine-learning normalization neural-network lstm recurrent-neural-network