标签: lstm

Keras lstm具有用于可变长度输入的屏蔽层

我知道这是一个有很多问题的主题,但我找不到任何问题的解决方案.

我正在使用屏蔽层训练可变长度输入的LSTM网络,但它似乎没有任何影响.

输入形状(100,362,24),其中362是最大序列长度,24是特征数量,100是样本数量(划分75列火车/ 25有效).

输出形状(100,362,1)稍后变换为(100,362-N,1).

这是我的网络代码:

from keras import Sequential
from keras.layers import Embedding, Masking, LSTM, Lambda
import keras.backend as K


#                          O O O
#   example for N:3        | | |
#                    O O O O O O
#                    | | | | | | 
#                    O O O O O O

N = 5
y= y[:,N:,:]

x_train = x[:75]
x_test = x[75:]
y_train = y[:75]
y_test = y[75:]

model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(128, return_sequences=True))
model.add(LSTM(64, return_sequences=True)) …
Run Code Online (Sandbox Code Playgroud)

python masking lstm keras

11
推荐指数
1
解决办法
6496
查看次数

张量流中LSTM的正则化

Tensorflow提供了一个不错的LSTM包装器.

rnn_cell.BasicLSTM(num_units, forget_bias=1.0, input_size=None,
           state_is_tuple=False, activation=tanh)
Run Code Online (Sandbox Code Playgroud)

我想使用正则化,比如L2正则化.但是,我没有直接访问LSTM单元格中使用的不同权重矩阵,所以我不能明确地做一些像

loss = something + beta * tf.reduce_sum(tf.nn.l2_loss(weights))
Run Code Online (Sandbox Code Playgroud)

有没有办法访问矩阵或使用LSTM以某种方式使用正则化?

neural-network lstm tensorflow recurrent-neural-network

10
推荐指数
2
解决办法
9861
查看次数

CNTK对LSTM中动态轴的抱怨

我正在尝试在CNTK中实现LSTM(使用Python)来对序列进行分类.

输入:

  • 特征是固定长度的数字序列(时间序列)

  • 标签是单热值的向量

网络:

input = input_variable(input_dim)
label = input_variable(num_output_classes)
h = Recurrence(LSTM(lstm_dim)) (input)
final_output = C.sequence.last(h)
z = Dense(num_output_classes) (final_output)
loss = C.cross_entropy_with_softmax(z, label)
Run Code Online (Sandbox Code Playgroud)

输出: 序列与标签匹配的概率

所有尺寸都是固定的,所以我认为我不需要任何动态轴,也没有指定任何尺寸.

然而,CNTK并不开心,我得到:

return cross_entropy_with_softmax(output_vector, target_vector, axis, name)
RuntimeError: Currently if an operand of a elementwise operation has any dynamic axes, those must match the dynamic axes of the other operands
Run Code Online (Sandbox Code Playgroud)

如果(根据一些例子)我用动态轴定义标签

label = input_variable(num_output_classes, dynamic_axes=[C.Axis.default_batch_axis()])
Run Code Online (Sandbox Code Playgroud)

它不再抱怨这一点,并进一步:

tf = np.split(training_features,num_minibatches)
tl = np.split(training_labels, num_minibatches)

for i in range(num_minibatches*num_passes): # multiply by the 
    features …
Run Code Online (Sandbox Code Playgroud)

python lstm cntk

10
推荐指数
1
解决办法
1207
查看次数

用于LSTM-RNN训练的填充时间序列子序列

我有一个时间序列数据集,我用它作为LSTM-RNN的输入,用于行动预期.时间序列包括30fps(即150个数据点)的5秒时间,并且数据表示面部特征的位置/移动.

我从我的数据集中采样较小长度的其他子序列,以便在数据集中添加冗余并减少过度拟合.在这种情况下,我知道子序列的开始和结束帧.

为了批量训练模型,所有时间序列需要具有相同的长度,并且根据文献中的许多论文填充不应该影响网络的性能.

例:

原始序列:

 1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

子序列:

4 5 6 7
8 9 10
2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

考虑到我的网络正在试图预测一个动作(意味着一旦P(动作)>阈值从t = 0变为T = tmax,它将预测该动作)填充的位置是否重要?

选项1:零替换原始值

0 0 0 4 5 6 7 0 0 0
0 0 0 0 0 0 0 8 9 10
0 2 3 4 5 6 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

选项2:最后全部为零

4 5 6 7 0 0 0 0 0 0 
8 …
Run Code Online (Sandbox Code Playgroud)

machine-learning padding deep-learning lstm recurrent-neural-network

10
推荐指数
2
解决办法
3933
查看次数

注意图层抛出TypeError:Permute图层不支持Keras中的屏蔽

我一直关注这篇文章,以便在我的LSTM模型上实现关注层.

代码attention layer:

INPUT_DIM = 2
TIME_STEPS = 20
SINGLE_ATTENTION_VECTOR = False
APPLY_ATTENTION_BEFORE_LSTM = False

def attention_3d_block(inputs):
    input_dim = int(inputs.shape[2])
    a = Permute((2, 1))(inputs)
    a = Reshape((input_dim, TIME_STEPS))(a)
    a = Dense(TIME_STEPS, activation='softmax')(a)
    if SINGLE_ATTENTION_VECTOR:
        a = Lambda(lambda x: K.mean(x, axis=1), name='dim_reduction')(a)
        a = RepeatVector(input_dim)(a)
    a_probs = Permute((2, 1), name='attention_vec')(a)
    output_attention_mul = merge(
        [inputs, a_probs],
        name='attention_mul',
        mode='mul'
    )
    return output_attention_mul
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

文件"main_copy.py",第244行,在model = create_model(X_vocab_len,X_max_len,y_vocab_len,y_max_len,HIDDEN_DIM,LAYER_NUM)文件"main_copy.py",第189行,在create_model中attention_mul = attention_3d_block(temp)文件"main_copy.py" ",第124行,注意事项_3d_block a = Permute((2,1))(输入)文件"/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/keras/engine/topology.py",行597,在调用 output_mask = self.compute_mask(inputs,previous_mask)文件"/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/keras/engine/topology.py",第744行,在compute_mask str中( …

python lstm keras tensorflow attention-model

10
推荐指数
1
解决办法
769
查看次数

Keras的Tree-LSTM

我想在keras中使用树-LSTM,类似于本文中描述的内容:https://arxiv.org/abs/1503.00075.它基本上类似于长短期内存网络,但具有树状输入序列而不是类似链的输入序列.

我认为它是一个相对标准的架构,可以在很多环境中找到用途,但我找不到任何公共keras实现.这个东西已经存在吗?

我能找到的最接近的是这个火炬实现:https://github.com/stanfordnlp/treelstm,但这与我项目的其余部分不能很好地集成.

python deep-learning lstm keras

10
推荐指数
1
解决办法
1757
查看次数

理解R中rnn模型的Keras预测输出

我正在通过本教程预测温度来尝试R中的Keras软件包.但是,本教程没有解释如何使用训练有素的RNN模型进行预测,我想知道如何做到这一点.为了训练模型,我使用了从教程中复制的以下代码:

dir.create("~/Downloads/jena_climate", recursive = TRUE)
download.file(
    "https://s3.amazonaws.com/keras-datasets/jena_climate_2009_2016.csv.zip",
      "~/Downloads/jena_climate/jena_climate_2009_2016.csv.zip"
    )
unzip(
  "~/Downloads/jena_climate/jena_climate_2009_2016.csv.zip",
  exdir = "~/Downloads/jena_climate"
)

library(readr)
data_dir <- "~/Downloads/jena_climate"
fname <- file.path(data_dir, "jena_climate_2009_2016.csv")
data <- read_csv(fname)

data <- data.matrix(data[,-1])

train_data <- data[1:200000,]
mean <- apply(train_data, 2, mean)
std <- apply(train_data, 2, sd)
data <- scale(data, center = mean, scale = std)

generator <- function(data, lookback, delay, min_index, max_index,
                      shuffle = FALSE, batch_size = 128, step = 6) {
  if (is.null(max_index))
    max_index <- nrow(data) - delay - 1
  i …
Run Code Online (Sandbox Code Playgroud)

r machine-learning lstm keras recurrent-neural-network

10
推荐指数
1
解决办法
1075
查看次数

PyTorch中是否存在干净且可扩展的LSTM实现?

我想自己创建一个LSTM类,但是,我不想再从头开始重写经典的LSTM函数.

挖掘PyTorch的代码,我只找到一个涉及至少3-4个继承类的脏实现:https : //github.com/pytorch/pytorch/blob/98c24fae6b6400a7d1e13610b20aa05f86f77070/torch/nn/modules/rnn.py#L323 https://github.com/pytorch/pytorch/blob/98c24fae6b6400a7d1e13610b20aa05f86f77070/torch/nn/modules/rnn.py#L12 https://github.com/pytorch/pytorch/blob/98c24fae6b6400a7d1e13610b20aa05f86f77070/torch/nn/_functions/rnn的.py#L297

某个LSTM的干净PyTorch实现是否存在?任何链接都会有帮助.例如,我知道TensorFlow中存在LSTM的干净实现,但我需要派生一个PyTorch实现.

一个明显的例子,我正在寻找的是一个如下所示的实现,但是在PyTorch中:https: //github.com/hardmaru/supercell/blob/063b01e75e6e8af5aeb0aac5cc583948f5887dd1/supercell.py#L143

implementation open-source coding-style lstm pytorch

10
推荐指数
1
解决办法
3549
查看次数

使用Dropout与Keras和LSTM/GRU单元

在Keras中,您可以像这样指定一个dropout图层:

model.add(Dropout(0.5))
Run Code Online (Sandbox Code Playgroud)

但是使用GRU单元格,您可以将dropout指定为构造函数中的参数:

model.add(GRU(units=512,
        return_sequences=True,
        dropout=0.5,
        input_shape=(None, features_size,)))
Run Code Online (Sandbox Code Playgroud)

有什么不同?一个比另一个好吗?

Keras的文档中, 它将其添加为单独的丢失层(请参阅"使用LSTM进行序列分类")

lstm keras dropout

10
推荐指数
1
解决办法
4024
查看次数

检查目标时出错:预期density_1具有3维,但数组的形状为(118,1)

我正在训练一个模型来预测股票价格,而输入数据是收盘价。我使用45天的数据来预测第46天的收盘价,而经济指标将成为第二个特征,这是模型:

model = Sequential()
model.add( LSTM( 512, input_shape=(45, 2), return_sequences=True))
model.add( LSTM( 512, return_sequences=True))
model.add( (Dense(1)))
model.compile(loss='mse', optimizer='adam')
history = model.fit( X_train, y_train, batch_size = batchSize, epochs=epochs, shuffle = False)
Run Code Online (Sandbox Code Playgroud)

运行此命令时,出现以下错误:

ValueError:检查目标时出错:预期density_1具有3维,但数组的形状为(118,1)

但是,我print的数据形状是:

X_train:(118, 45, 2)
y_train:(118, 1)
Run Code Online (Sandbox Code Playgroud)

我不知道为什么当y_train为(118,1)时模型期望3维输出。我在哪里错了,该怎么办?

python output lstm keras

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