根据 RNN 的性质,我们可以在每个时间戳(按时间展开)得到预测概率的输出。
假设我用 5 个时间步长训练一个 RNN,每个时间步长有 6 个特征。因此,我必须像这样指定第一层(假设我们使用具有 20 个节点的 LSTM 层作为第一层):
model.add(LSTM(20, return_sequences=True, input_shape=(5, 6)))
Run Code Online (Sandbox Code Playgroud)
如果我输入相同的维度数据,模型运行良好。但是,现在我想使用数据的前 3 个时间步长来获得预测(输入形状将为 3、6),不接受相同的语法。
我的问题是,是否可以使用带有 keras 的相同模型进行此类预测(无需采用训练数据的前 3 个时间步长并训练另一个模型)?如果是,我应该如何处理语法?如果没有,是否还有其他带有 LSTM 的 RNN 包支持此类功能?
我使用 Keras 构建了一个 RNN。RNN 用于解决回归问题:
def RNN_keras(feat_num, timestep_num=100):
model = Sequential()
model.add(BatchNormalization(input_shape=(timestep_num, feat_num)))
model.add(LSTM(input_shape=(timestep_num, feat_num), output_dim=512, activation='relu', return_sequences=True))
model.add(BatchNormalization())
model.add(LSTM(output_dim=128, activation='relu', return_sequences=True))
model.add(BatchNormalization())
model.add(TimeDistributed(Dense(output_dim=1, activation='relu'))) # sequence labeling
rmsprop = RMSprop(lr=0.00001, rho=0.9, epsilon=1e-08)
model.compile(loss='mean_squared_error',
optimizer=rmsprop,
metrics=['mean_squared_error'])
return model
Run Code Online (Sandbox Code Playgroud)
整个过程看起来不错。但是损失在各个时期内保持完全相同。
61267 in the training set
6808 in the test set
Building training input vectors ...
888 unique feature names
The length of each vector will be 888
Using TensorFlow backend.
Build model...
# Each batch has 1280 examples
# The training …Run Code Online (Sandbox Code Playgroud) machine-learning neural-network deep-learning keras recurrent-neural-network
我想知道是否有人可以推荐一个好的库或参考资料(教程或文章)来实现循环神经网络(RNN)。
我尝试使用Alex Graves的rnnlib,但在更改架构以适应网络以满足我的需求时遇到了一些麻烦。
特别是,我正在尝试使用正样本和负样本来识别来自常规语言的字符串。
这是我的训练集的一个例子:
str1: w1 w2 ... wn --> 标签 1(它是该语言的有效字符串)
str2: w1 w2 ... wi --> 标签0(不属于该语言)
其中 wi 是从未知语言的字母表中提取的。
提前致谢。
regular-language text-classification deep-learning recurrent-neural-network
假设一个循环神经网络以可变长度的文本序列作为输入。为了提高效率,人们可以将长度相似的序列批处理在一起,以最小化每批的填充量——称为桶化。这如何在 Keras 中实现?
作为参考,使用遗留操作的Tensorflow Seq2Seq 教程包含此内容,但其代码应该能够在 Keras 中以更少的代码行进行简化。
关于如何在 TF 中单独使用 LSTM 的例子有很多,但我找不到任何关于如何联合训练 CNN + LSTM 的好例子。就我所见,如何进行此类培训并不是很简单,我可以在这里想到一些选择:
先感谢您 !
convolution deep-learning lstm tensorflow recurrent-neural-network
在 keras 1.2.2 中,我制作了一个具有以下维度的数据集:
X_train: (2000, 100, 32, 32, 3)
y_train: (2000,1)
Run Code Online (Sandbox Code Playgroud)
这里,2000 是实例数(数据的批次),100 是每批中的样本数,32 是图像行和列数,3 是通道数(RGB)。
我写了这段代码,它在 CNN 之后应用了 LSTM,但是,我收到了这个错误:
ValueError: Input 0 is incompatible with layer lstm_layer: expected ndim=3, found ndim=2
这是我的代码:
import keras
from keras.layers import Input ,Dense, Dropout, Activation, LSTM
from keras.layers import Convolution2D, MaxPooling2D, Flatten, Reshape
from keras.models import Sequential
from keras.layers.wrappers import TimeDistributed
from keras.layers.pooling import GlobalAveragePooling1D
from keras.optimizers import SGD
from keras.utils import np_utils
from keras.models import Model
import numpy as np
timesteps=100; …Run Code Online (Sandbox Code Playgroud) machine-learning neural-network lstm keras recurrent-neural-network
我想在连续变量(Y1,Y2,Y3)和分类变量(Y4,Y5)的基础上对连续变量(Y1)进行时间序列预测。有没有办法使用 LSTM/RNN 来做到这一点?
有人可以提供完整的工作代码(不是片段,而是在可变长度循环神经网络上运行的代码),说明您将如何使用 PyTorch 中的 PackedSequence 方法?
文档、github 或 Internet 中似乎没有任何此类示例。
当我使用 Keras 运行此代码时:
networkDrive = Input(batch_shape=(1,length,1))
network = SimpleRNN(3, activation='tanh', stateful=False, return_sequences=True)(networkDrive)
generatorNetwork = Model(networkDrive, network)
predictions = generatorNetwork.predict(noInput, batch_size=length)
print(np.array(generatorNetwork.layers[1].get_weights()))
Run Code Online (Sandbox Code Playgroud)
我得到这个输出
[array([[ 0.91814435, 0.2490257 , 1.09242284]], dtype=float32)
array([[-0.42028981, 0.68996912, -0.58932084],
[-0.88647962, -0.17359462, 0.42897415],
[ 0.19367599, 0.70271438, 0.68460363]], dtype=float32)
array([ 0., 0., 0.], dtype=float32)]
Run Code Online (Sandbox Code Playgroud)
我想,(3,3) 矩阵是权重矩阵,将 RNN 单元相互连接起来,两个数组之一可能是偏差但第三个是什么?
我无法准确理解 LSTM 单元的范围——它如何映射到网络层。来自格雷夫斯 (2014):
在我看来,在单层网络中,layer = lstm 单元。这实际上如何在多层 rnn 中工作?
单元格的输出是h_t,没有表示特定层的超级索引。等式也是一样。每个单元格是否跨越单个层?或者每个单元格是否在每个时间步跨越整个三个节点?