相关疑难解决方法(0)

针对RNN的Keras屏蔽具有不同的时间步长

我正在尝试使用具有不同时间长度的序列在Keras中安装RNN.我的数据是在一个numpy的阵列格式(sample, time, feature) = (20631, max_time, 24),其中max_time在运行时被确定为可用于与最时间戳采样时间的步数.我已经填写了每个时间序列的开头0,除了最长的一个,显然.

我最初定义了我的模型......

model = Sequential()
model.add(Masking(mask_value=0., input_shape=(max_time, 24)))
model.add(LSTM(100, input_dim=24))
model.add(Dense(2))
model.add(Activation(activate))
model.compile(loss=weibull_loglik_discrete, optimizer=RMSprop(lr=.01))
model.fit(train_x, train_y, nb_epoch=100, batch_size=1000, verbose=2, validation_data=(test_x, test_y))
Run Code Online (Sandbox Code Playgroud)

为了完整性,这里是损失函数的代码:

def weibull_loglik_discrete(y_true, ab_pred, name=None):
    y_ = y_true[:, 0]
    u_ = y_true[:, 1]
    a_ = ab_pred[:, 0]
    b_ = ab_pred[:, 1]

    hazard0 = k.pow((y_ + 1e-35) / a_, b_)
    hazard1 = k.pow((y_ + 1) / a_, b_)

    return -1 * k.mean(u_ * k.log(k.exp(hazard1 - hazard0) - 1.0) …
Run Code Online (Sandbox Code Playgroud)

python numpy neural-network keras recurrent-neural-network

21
推荐指数
2
解决办法
5304
查看次数

具有缺失值的多变量LSTM

我正在使用LSTM处理时间序列预测问题.输入包含多个功能,因此我使用的是多变量LSTM.问题是存在一些缺失值,例如:

    Feature 1     Feature 2  ...  Feature n
 1    2               4             nan
 2    5               8             10
 3    8               8              5
 4    nan             7              7
 5    6              nan            12
Run Code Online (Sandbox Code Playgroud)

而不是插入缺失值,这可能会在结果中引入偏差,因为有时在同一个特征上有很多连续的时间戳和缺失值,我想知道是否有办法让LSTM学习缺失值,例如,使用掩蔽层或类似的东西?有人可以向我解释一下处理这个问题的最佳方法是什么?我正在使用Tensorflow和Keras.

missing-data neural-network lstm keras tensorflow

14
推荐指数
1
解决办法
2551
查看次数

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
查看次数

在不使用嵌入的情况下在 keras 中屏蔽 LSTM 中的零输入

我正在 Keras 中训练 LSTM:

iclf = Sequential()
iclf.add(Bidirectional(LSTM(units=10, return_sequences=True, recurrent_dropout=0.3), input_shape=(None,2048)))
iclf.add(TimeDistributed(Dense(1, activation='sigmoid')))
Run Code Online (Sandbox Code Playgroud)

每个单元格的输入是一个 2048 向量,它是已知的,不需要学习(如果你愿意,它们是输入句子中单词的 ELMo 嵌入)。因此,这里我没有Embedding层。

由于输入序列具有可变长度,因此使用pad_sequences以下方法填充它们:

X = pad_sequences(sequences=X, padding='post', truncating='post', value=0.0, dtype='float32')
Run Code Online (Sandbox Code Playgroud)

现在,我想告诉 LSTM 忽略这些填充元素。官方的方法是使用 Embedding 层与mask_zero=True. 但是,这里没有嵌入层。如何通知 LSTM 屏蔽零元素?

embedding lstm keras

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

如何屏蔽具有 RepeatVector() 层的 LSTM 自动编码器中的输入?

我一直在尝试使用 LSTM 自动编码器获得向量序列的向量表示,以便我可以使用 SVM 或其他此类监督算法对序列进行分类。数据量使我无法使用完全连接的密集层进行分类。

我输入的最短大小是 7 个时间步,最长的序列是 356 个时间步。因此,我用零填充较短的序列以获得形状为 (1326, 356, 8) 的最终 x_train,其中 1326 是训练样本的数量,8 是一个时间步长的维度。我正在尝试使用给定的 LSTM 自动编码器将这些序列编码为单个向量。

model.add(Masking(mask_value=0.0, input_shape=(max_len, 8)))
model.add(LSTM(100, activation='relu'))
model.add(RepeatVector(max_len))
model.add(LSTM(8, activation='relu', return_sequences=True))
model.compile(optimizer='adam', loss='mse')
model.fit(x_train, x_train, batch_size=32, callbacks=[chk], epochs=1000, validation_split=0.05, shuffle=True)
Run Code Online (Sandbox Code Playgroud)

我试图掩盖零填充的结果,但 RepeatVector() 层可能会阻碍这个过程。因此,一段时间后,均方误差损失变为nan。任何人都可以帮助我了解如何在计算损失函数时仅包含相关时间步长而忽略其他时间步长?

masking lstm keras

3
推荐指数
1
解决办法
1471
查看次数