标签: lstm

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

如何计算张量流中RNN的困惑度

我正在运行单词RNN的张量流的RNN实现

如何计算RNN的困惑度.

以下是培训中的代码,显示每个时期的培训损失和其他事项:

for e in range(model.epoch_pointer.eval(), args.num_epochs):
        sess.run(tf.assign(model.lr, args.learning_rate * (args.decay_rate ** e)))
        data_loader.reset_batch_pointer()
        state = sess.run(model.initial_state)
        speed = 0
        if args.init_from is None:
            assign_op = model.batch_pointer.assign(0)
            sess.run(assign_op)
            assign_op = model.epoch_pointer.assign(e)
            sess.run(assign_op)
        if args.init_from is not None:
            data_loader.pointer = model.batch_pointer.eval()
            args.init_from = None
        for b in range(data_loader.pointer, data_loader.num_batches):
            start = time.time()
            x, y = data_loader.next_batch()
            feed = {model.input_data: x, model.targets: y, model.initial_state: state,
                    model.batch_time: speed}
            summary, train_loss, state, _, _ = sess.run([merged, model.cost, model.final_state,
                                                         model.train_op, model.inc_batch_pointer_op], feed)
            train_writer.add_summary(summary, …
Run Code Online (Sandbox Code Playgroud)

python lstm tensorflow recurrent-neural-network

9
推荐指数
1
解决办法
6213
查看次数

Tensorflow LSTM Dropout实施

  • 如何明确并tensorflow申请退学调用tf.nn.rnn_cell.DropoutWrapper()的时候?

我读到的关于将退出应用于rnn的所有内容都参考了Zaremba等人的论文.al表示不在经常性连接之间应用辍学.应在LSTM层之前或之后随机丢弃神经元,而不是LSTM间层.好.

  • 我的问题是神经元是如何关闭时间的?

在每个人都引用的论文中,似乎在每个时间步长应用一个随机的"丢失掩码",而不是生成一个随机的"丢失掩码"并重新使用它,将它应用于丢弃的给定层中的所有时间步长.然后在下一批产生一个新的"辍学掩码".

此外,可能更重要的是,tensorflow是如何做到的?我已经检查了tensorflow api,并试图寻找详细的解释,但还没有找到一个.

  • 有没有办法深入研究实际的tensorflow源代码?

time-series lstm tensorflow dropout

9
推荐指数
1
解决办法
4987
查看次数

Tensorflow服务 - 有状态LSTM

是否有规范的方法来维持Tensorflow服务的有状态LSTM等?

直接使用Tensorflow API这很简单 - 但我不确定在将模型导出到Serving之后如何最好地在调用之间实现持久的LSTM状态.

有什么例子可以实现上述目标吗?回购中的样品非常基本.

lstm tensorflow gated-recurrent-unit tensorflow-serving

9
推荐指数
1
解决办法
828
查看次数

Keras中具有批量归一化的双向LSTM

我想知道如何在Keras中实现具有批量标准化(BN)的biLSTM.我知道BN层应该在线性和非线性之间,即激活.使用CNN或Dense图层很容易实现.但是,如何用biLSTM做到这一点?

提前致谢.

python lstm keras recurrent-neural-network keras-layer

9
推荐指数
1
解决办法
5838
查看次数

当使用不同长度和多个特征的多个时间序列时,如何为LSTM准备数据?

我有一些来自多个用户(nUsers)的数据集.每个用户随机抽样(每个用户的非常数nSamples).每个样本都有许多功能(nFeatures).例如:

nUsers = 3 ---> 3个用户

nSamples = [32,52,21] --->第一个用户被采样32次第二个用户被采样52次等.

nFeatures = 10 --->每个样本的特征数量恒定.

我希望LSTM基于当前特征和同一用户的先前预测产生当前预测.我可以使用LSTM层在Keras中做到这一点吗?我有两个问题:1.每个用户的数据都有不同的时间序列.我该怎么办呢?2.如何处理将先前的预测添加到当前时间特征空间以进行当前预测?

谢谢你的帮助!

python lstm keras data-science

9
推荐指数
1
解决办法
3904
查看次数

当脚本在较大的数据集上运行时,LSTM Autoencoder没有进展

的形状p_input此LSTM自动编码"test.py"是(128,8,1); 意思是128组8位数.我试图使用4组25,000个时间步长(基本上0秒到25,000秒)使这个模型适应基于时间序列的数据.我尝试将此数据集输入到p_input形状(4,25000,1)中,并且没有发生错误.但是当我运行脚本时,而不是让iter 1: 0.01727, iter 2: 0.00983, ...我没有得到脚本的任何打印反馈,所以我假设有一些东西正在举行脚本.我还尝试将未更改batch_num为4和step_num25,000直接更改为未编辑的"test.py"文件,并且没有发生打印反馈的相同结果.

我的想法是,在"test.py"中,p_inputs计算tf.splittf.squeeze操作的时间太长.另一个想法是我可能需要增加隐藏的LSTM单元hidden_num的数量和/或增加epochs(iteration)的数量.此外,它可能batch_num必须大于step_num.我试图与"test.py"同step_num = 4batch_num = 25000和脚本印反馈正常运行.

让我知道你对阻止脚本运行的问题的看法.

python python-3.x autoencoder lstm tensorflow

9
推荐指数
1
解决办法
253
查看次数

Keras - 将3通道图像输入LSTM

我已经将一系列图像读入一个具有形状的numpy数组,(7338, 225, 1024, 3)其中7338是样本大小,225是时间步长,1024 (32x32)3通道(RGB)中的平坦图像像素.

我有一个带LSTM层的顺序模型:

model = Sequential()
model.add(LSTM(128, input_shape=(225, 1024, 3))
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
Run Code Online (Sandbox Code Playgroud)

文件提到,对于LSTM层输入张量应该是3D tensor with shape (batch_size, timesteps, input_dim),但对我来说我input_dim是2D的.

在Keras中将3通道图像输入LSTM层的建议方法是什么?

python lstm keras recurrent-neural-network

9
推荐指数
1
解决办法
6639
查看次数

计算在penn树库上训练LSTM的困惑

我正在penn treebank上实施语言模型培训.

我为每个时间步增加了损失然后计算困惑.

即使经过一段时间的训练,这也让我感到非常困难,数千亿.

损失本身会减少,但最多只能减少到20左右.(我需要一位数的损失以获得合理的困惑).

这让我想知道我的困惑计算是否被误导了.

它应该基于每个时间步的损失,然后平均而不是将它们全部添加?

我的batch_size是20,num_steps是35.

def perplexity(loss):
    perplexity = np.exp(loss)
    return perplexity

...
loss = 0
x = nn.Variable((batch_size, num_steps))
t = nn.Variable((batch_size, num_steps))
e_list = [PF.embed(x_elm, num_words, state_size, name="embed") for x_elm in F.split(x, axis=1)]
t_list = F.split(t, axis=1)

for i, (e_t, t_t) in enumerate(zip(e_list, t_list)):
    h1 = l1(F.dropout(e_t,0.5))
    h2 = l2(F.dropout(h1,0.5))
    y = PF.affine(F.dropout(h2,0.5), num_words, name="pred")
    t_t = F.reshape(t_t,[batch_size,1])
    loss += F.mean(F.softmax_cross_entropy(y, t_t))

for epoch in range(max_epoch):
    ....
    for i in range(iter_per_epoch):
        x.d, t.d = get_words(train_data, …
Run Code Online (Sandbox Code Playgroud)

lstm penn-treebank rnn

9
推荐指数
1
解决办法
1103
查看次数

在Keras中,如何获取LSTM层的3D输入和3D输出

在我原来的环境中

X1 = (1200,40,1)
y1 = (1200,10)
Run Code Online (Sandbox Code Playgroud)

然后,我可以完美地使用我的代码:

model = Sequential()
model.add(LSTM(12, input_shape=(40, 1), return_sequences=True))
model.add(LSTM(12, return_sequences=True))
model.add(LSTM(6, return_sequences=False))
model.add((Dense(10)))
Run Code Online (Sandbox Code Playgroud)

现在,我进一步获得了另一个与X1和相同大小的时间序列数据y1。即

X2 = (1200,40,1)
y2 = (1200,10)
Run Code Online (Sandbox Code Playgroud)

现在,我叠X1X2并且y1y2作为3D阵列:

X_stack = (1200,40,2)
y_stack = (1200,10,2)
Run Code Online (Sandbox Code Playgroud)

然后,我尝试修改我的keras代码,例如:

model = Sequential()
model.add(LSTM(12, input_shape=(40, 2), return_sequences=True))
model.add(LSTM(12, return_sequences=True))
model.add(LSTM(6, return_sequences=False))
model.add((Dense((10,2))))
Run Code Online (Sandbox Code Playgroud)

我希望我的代码直接与3D数组一起使用X_stacky_stack而不希望将其重塑为2D数组。您能帮我修改设置吗?谢谢。

python neural-network lstm keras

9
推荐指数
1
解决办法
487
查看次数