我知道这是一个有很多问题的主题,但我找不到任何问题的解决方案.
我正在使用屏蔽层训练可变长度输入的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) 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以某种方式使用正则化?
我正在尝试在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) 我有一个时间序列数据集,我用它作为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
我一直关注这篇文章,以便在我的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中( …
我想在keras中使用树-LSTM,类似于本文中描述的内容:https://arxiv.org/abs/1503.00075.它基本上类似于长短期内存网络,但具有树状输入序列而不是类似链的输入序列.
我认为它是一个相对标准的架构,可以在很多环境中找到用途,但我找不到任何公共keras实现.这个东西已经存在吗?
我能找到的最接近的是这个火炬实现:https://github.com/stanfordnlp/treelstm,但这与我项目的其余部分不能很好地集成.
我正在通过本教程预测温度来尝试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) 我想自己创建一个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
在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进行序列分类")
我正在训练一个模型来预测股票价格,而输入数据是收盘价。我使用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维输出。我在哪里错了,该怎么办?
lstm ×10
keras ×6
python ×5
tensorflow ×2
cntk ×1
coding-style ×1
dropout ×1
masking ×1
open-source ×1
output ×1
padding ×1
pytorch ×1
r ×1