我有一个顺序学习模型的序列,它工作正常,能够预测一些输出.问题是我不知道如何将输出转换回文本序列.
这是我的代码.
from keras.preprocessing.text import Tokenizer,base_filter
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense
txt1="""What makes this problem difficult is that the sequences can vary in length,
be comprised of a very large vocabulary of input symbols and may require the model 
to learn the long term context or dependencies between symbols in the input sequence."""
#txt1 is used for fitting 
tk = Tokenizer(nb_words=2000, filters=base_filter(), lower=True, split=" ")
tk.fit_on_texts(txt1)
#convert text to sequence
t= tk.texts_to_sequences(txt1)
#padding …我在Tensorflow模型中使用存储桶时遇到问题.当我运行它时buckets = [(100, 100)],它工作正常.当我用buckets = [(100, 100), (200, 200)]它运行它根本不起作用(底部的堆栈跟踪).
有趣的是,运行Tensorflow的Seq2Seq教程会产生相同类型的问题,几乎相同的堆栈跟踪.出于测试目的,此处链接到存储库.
我不确定问题是什么,但是有多个桶总是会触发它.
这段代码不能单独运行,但这是崩溃的功能 - 记住buckets从更改[(100, 100)]到[(100, 100), (200, 200)]触发崩溃.
class MySeq2Seq(object):
    def __init__(self, source_vocab_size, target_vocab_size, buckets, size, num_layers, batch_size, learning_rate):
        self.source_vocab_size = source_vocab_size
        self.target_vocab_size = target_vocab_size
        self.buckets = buckets
        self.batch_size = batch_size
        cell = single_cell = tf.nn.rnn_cell.GRUCell(size)
        if num_layers > 1:
            cell = tf.nn.rnn_cell.MultiRNNCell([single_cell] * num_layers)
        # The seq2seq function: we use embedding for the input and attention
        def …有没有办法在TensorFlow的seq2seq模型中可视化某些输入上的注意权重,如上面链接中的图(来自Bahdanau等,2014)?我已经找到了TensorFlow的github问题,但我无法找到如何在会话期间获取注意掩码.
deep-learning tensorflow attention-model sequence-to-sequence
我使用从网络教程中获得的知识和我自己的直觉,编写了一个序列来编码keras中的学习LSTM.我将示例文本转换为序列,然后使用pad_sequencekeras中的函数进行填充.
from keras.preprocessing.text import Tokenizer,base_filter
from keras.preprocessing.sequence import pad_sequences
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
txt="abcdefghijklmn"*100
tk = Tokenizer(nb_words=2000, filters=base_filter(), lower=True, split=" ")
tk.fit_on_texts(txt)
x = tk.texts_to_sequences(txt)
#shifing to left
y = shift(x,1)
#padding sequence
max_len = 100
max_features=len(tk.word_counts)
X = pad_sequences(x, maxlen=max_len)
Y = pad_sequences(y, maxlen=max_len)
仔细检查后,我发现我的填充序列看起来像这样
>>> X[0:6]
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …我设法使用1.1版本中的tf.contrib.seq2seq类在tensorflow中构建一个序列模型.
知道我使用TrainingHelper来训练我的模型.但是这个助手是否在解码器中提供先前已解码的值以进行训练或仅仅是基本事实?如果不能,我怎样才能将先前解码的值作为解码器中的输入而不是地面实况值?
 
decoder tensorflow recurrent-neural-network sequence-to-sequence
我正在尝试seq2seq使用 Transformer 模型。我的输入和输出是相同的形状(torch.Size([499, 128])其中 499 是序列长度,128 是特征数。
我的训练循环是:
    for batch in tqdm(dataset):
        optimizer.zero_grad()
        x, y = batch
        x = x.to(DEVICE)
        y = y.to(DEVICE)
        pred = model(x, torch.zeros(x.size()).to(DEVICE))
        loss = loss_fn(pred, y)
        loss.backward()
        optimizer.step()
我的模型是:
import math
from typing import final
import torch
import torch.nn as nn
class Reconstructor(nn.Module):
    def __init__(self, input_dim, output_dim, dim_embedding, num_layers=4, nhead=8, dim_feedforward=2048, dropout=0.5):
        super(Reconstructor, self).__init__()
        self.model_type = 'Transformer'
        self.src_mask = None
        self.pos_encoder = PositionalEncoding(d_model=dim_embedding, dropout=dropout)
        self.transformer = nn.Transformer(d_model=dim_embedding, nhead=nhead, dim_feedforward=dim_feedforward, …python machine-learning transformer-model sequence-to-sequence pytorch
关于seq2seq模型的最新Tensorflow api包括预定的采样:
https://www.tensorflow.org/api_docs/python/tf/contrib/seq2seq/ScheduledEmbeddingTrainingHelper https://www.tensorflow.org/api_docs/python/tf/contrib/seq2seq/ScheduledOutputTrainingHelper
有关预定抽样的原始论文可在此处找到:https: //arxiv.org/abs/1506.03099
我看报纸,但我不明白之间的差别ScheduledEmbeddingTrainingHelper和ScheduledOutputTrainingHelper.该文档仅说ScheduledEmbeddingTrainingHelper是一个培训助手,它增加了预定的采样,同时ScheduledOutputTrainingHelper是一个培训助手,可以将预定的采样直接添加到输出.
我想知道这两个助手之间有什么区别?
python machine-learning deep-learning tensorflow sequence-to-sequence
我试图建立一个序列到序列模型,以根据前几个输入预测传感器信号随时间的变化(见下图)

该模型工作正常,但我想“增加趣味”并尝试在两个 LSTM 层之间添加一个注意力层。
型号代码:
def train_model(x_train, y_train, n_units=32, n_steps=20, epochs=200,
                n_steps_out=1):
    filters = 250
    kernel_size = 3
    logdir = os.path.join(logs_base_dir, datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
    tensorboard_callback = TensorBoard(log_dir=logdir, update_freq=1)
    # get number of features from input data
    n_features = x_train.shape[2]
    # setup network
    # (feel free to use other combination of layers and parameters here)
    model = keras.models.Sequential()
    model.add(keras.layers.LSTM(n_units, activation='relu',
                                return_sequences=True,
                                input_shape=(n_steps, n_features)))
    model.add(keras.layers.LSTM(n_units, activation='relu'))
    model.add(keras.layers.Dense(64, activation='relu'))
    model.add(keras.layers.Dropout(0.5))
    model.add(keras.layers.Dense(n_steps_out))
    model.compile(optimizer='adam', loss='mse', metrics=['mse'])
    # train network
    history = model.fit(x_train, y_train, epochs=epochs,
                        validation_split=0.1, verbose=1, callbacks=[tensorboard_callback]) …machine-learning keras tensorflow attention-model sequence-to-sequence
我正在尝试编写序列以在keras中对RNN进行排序.我使用我从网上理解的内容编写了这个程序.我首先表征然后将文本转换的文本成序列和填充,以形成特征变量X.获得目标变量Y,首先将x向左移动然后填充它.最后,我将我的功能和目标变量提供给了我的LSTM模型.
这是我为此目的用keras编写的代码.
from keras.preprocessing.text import Tokenizer,base_filter
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense, Activation,Dropout,Embedding
from keras.layers import LSTM
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
txt="abcdefghijklmn"*100
tk = Tokenizer(nb_words=2000, filters=base_filter(), lower=True, split=" ")
tk.fit_on_texts(txt)
x = tk.texts_to_sequences(txt)
#shifing to left
y = shift(x,1)
#padding sequence
max_len = 100
max_features=len(tk.word_counts)
X = pad_sequences(x, maxlen=max_len)
Y = pad_sequences(y, maxlen=max_len)
#lstm model
model = Sequential()
model.add(Embedding(max_features, 128, …python neural-network keras recurrent-neural-network sequence-to-sequence
这个问题是的扩展这一个着重于LSTM相对于CRF.不幸的是,我对CRF没有任何经验,这就是我提出这些问题的原因.
问题:
我想预测多个非独立组的二进制信号序列.我的数据集中等很小(每组约1000条记录),所以我想在这里尝试一个CRF模型.
可用数据:
我有一个包含以下变量的数据集:
使用此数据集我想预测group_a_activity,group_b_activity哪些都是0或1.
请注意,这些组被认为是交叉相关的,并且可以从时间戳中提取其他功能 - 为简单起见,我们可以假设我们只从时间戳中提取了一个功能.
到目前为止我所拥有的:
以下是您可以在自己的计算机上重现的数据设置.
# libraries
import re
import numpy as np
import pandas as pd
data_length = 18  # how long our data series will be
shift_length = 3  # how long of a sequence do we want
df = (pd.DataFrame  # create a sample dataframe
    .from_records(np.random.randint(2, size=[data_length, 3]))
    .rename(columns={0:'a', 1:'b', 2:'extra'}))
df.head()  # check it out
# shift (assuming data is sorted …keras ×5
python ×5
tensorflow ×5
lstm ×2
crf ×1
crfsuite ×1
decoder ×1
keras-layer ×1
nlp ×1
python-3.x ×1
pytorch ×1