小编P.A*_*oor的帖子

计算pytorch中的困惑度

我刚刚使用 pytorch 训练了一个 LSTM 语言模型。这个类的主体是这样的:

class LM(nn.Module):
    def __init__(self, n_vocab, 
                       seq_size, 
                       embedding_size, 
                       lstm_size, 
                       pretrained_embed):

        super(LM, self).__init__()
        self.seq_size = seq_size
        self.lstm_size = lstm_size
        self.embedding = nn.Embedding.from_pretrained(pretrained_embed, freeze = True)
        self.lstm = nn.LSTM(embedding_size,
                            lstm_size,
                            batch_first=True)
        self.fc = nn.Linear(lstm_size, n_vocab)

    def forward(self, x, prev_state):
        embed = self.embedding(x)
        output, state = self.lstm(embed, prev_state)
        logits = self.fc(output)

        return logits, state
Run Code Online (Sandbox Code Playgroud)

现在我想写一个函数来计算一个句子的好坏,基于经过训练的语言模型(一些分数,如困惑度等)

我有点困惑,我不知道我应该如何计算这个。
类似的样本会有很大用处。

python nlp language-model pytorch

4
推荐指数
1
解决办法
5526
查看次数

关闭 shell 后保持 python 代码运行

我正在解决远程服务器上的问题(我使用 ssh 进行连接)。由于我是该领域的新手,因此我使用 jupyter-notebook,以便我可以检查和编码。我的代码的某些部分需要很长时间才能运行(例如可能 4-5 小时),并且我无法维持那么长时间的连接。shell 关闭后如何保持代码运行?我应该将其复制到 .py 文件中并使用 tmux 或 screen 等命令吗?

python ssh jupyter-notebook

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

Pytorch交叉熵输入维度

我正在尝试使用 Huggingface 的 BertModel 和 Pytorch 开发一个二元分类器。\n分类器模块是这样的:

\n\n
class SSTClassifierModel(nn.Module):\n\n  def __init__(self, num_classes = 2, hidden_size = 768):\n    super(SSTClassifierModel, self).__init__()\n    self.number_of_classes = num_classes\n    self.dropout = nn.Dropout(0.01)\n    self.hidden_size = hidden_size\n    self.bert = BertModel.from_pretrained(\'bert-base-uncased\')\n    self.classifier = nn.Linear(hidden_size, num_classes)\n\n  def forward(self, input_ids, att_masks,token_type_ids,  labels):\n    _, embedding = self.bert(input_ids, token_type_ids, att_masks)\n    output = self.classifier(self.dropout(embedding))\n    return output\n
Run Code Online (Sandbox Code Playgroud)\n\n

我训练模型的方式如下:

\n\n
loss_function = BCELoss()\nmodel.train()\nfor epoch in range(NO_OF_EPOCHS):\n  for step, batch in enumerate(train_dataloader):\n        input_ids = batch[0].to(device)\n        input_mask = batch[1].to(device)\n        token_type_ids = batch[2].to(device)\n        labels = batch[3].to(device)\n        # assuming …
Run Code Online (Sandbox Code Playgroud)

python cross-entropy pytorch python-3.7 huggingface-transformers

0
推荐指数
1
解决办法
1843
查看次数