0

我正在尝试学习 PyTorch NLP 基本文本分类并遵循 Lazy Programmer's Tutorial,我得到了与教程不同的结果,当我尝试更改数据时,我遇到了输出中的奇怪变化。


import torchtext.legacy.data as ttd
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime


data = {
    'label':[0, 1,1 ],
    'data':[   'ham and eggs or just  morning',
            'I like eggs and ham.',
            'Eggs I like!',
          
           
    ]
}

df = pd.DataFrame(data)
df.to_csv('thedata.csv', index=False)
TEXT = ttd.Field(
    sequential =True,
    batch_first =True,
    lower = True,
    tokenize ='spacy',
    pad_first = True
)
LABEL = ttd.Field(
    sequential=False,
    use_vocab=False,
    is_target  =True
)

dataset = ttd.TabularDataset(
    path = 'thedata.csv',
    format ='csv',
    skip_header=True,
    fields = [
              ('label', LABEL),
              ('data',TEXT)
    ]
)
train_dataset, test_dataset = dataset.split()
TEXT.build_vocab(train_dataset,)
vocab = TEXT.vocab
vocab.stoi

这是我的第一种代码,在数据中,如果你看到我在索引 1 中使用了“'ham and eggs or just morning'”。所以在运行代码之后,最后当我运行 vocab.stoi 时,我得到以下输出。 代码的输出。


import torchtext.legacy.data as ttd
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime


data = {
    'label':[0, 1,1 ],
    'data':[   
            'I like eggs and ham.',
            'Eggs I like!',
'ham and eggs or just  morning',
          
           
    ]
}

df = pd.DataFrame(data)
df.to_csv('thedata.csv', index=False)
TEXT = ttd.Field(
    sequential =True,
    batch_first =True,
    lower = True,
    tokenize ='spacy',
    pad_first = True
)
LABEL = ttd.Field(
    sequential=False,
    use_vocab=False,
    is_target  =True
)

dataset = ttd.TabularDataset(
    path = 'thedata.csv',
    format ='csv',
    skip_header=True,
    fields = [
              ('label', LABEL),
              ('data',TEXT)
    ]
)
train_dataset, test_dataset = dataset.split()
TEXT.build_vocab(train_dataset,)
vocab = TEXT.vocab
vocab.stoi

现在在第二个代码中,我在第三个索引中更改了数据“'ham and eggs or just morning'”的索引,现在如果我运行代码,那么 第二个代码的 vocab.stoi 输出将得到不同的输出。我想知道原因以及 vocab_build 在 PyTorch 中的工作原理。另外,这是我的第一个问题,如果问题不清楚,请告诉我。

4

1 回答 1

0

我认为您应该使用随机种子来为所有运行获得相同的结果(以及比较您在模型中所做的更改的结果)。应该获取种子的代码部分是数据集拆分功能。正如文档所说,是这样的:

_seed = 2021
train_dataset, test_dataset = dataset.split(random_state=_seed)
于 2021-10-06T05:28:18.017 回答