[英]How to make prediction from train Pytorch and PytorchText model?
一般来说,在我成功训练文本 RNN model 和 Pytorch 后,使用 PytorchText 来利用源源上的数据加载,我想用来自不同来源但相同的其他数据集(一种眨眼测试)进行测试文本格式。
首先,我定义了一个 class 来处理数据加载。
class Dataset(object):
def __init__(self, config):
# init what I need
def load_data(self, df: pd.DataFrame, *args):
# implementation below
# Data format like `(LABEL, TEXT)`
def load_data_but_error(self, df: pd.DataFrame):
# implementation below
# Data format like `(TEXT)`
这是我加载成功训练的数据的load_data
的详细信息。
TEXT = data.Field(sequential=True, tokenize=tokenizer, lower=True, fix_length=self.config.max_sen_len)
LABEL = data.Field(sequential=False, use_vocab=False)
datafields = [(label_col, LABEL), (data_col, TEXT)]
# split my data to train/test
train_df, test_df = train_test_split(df, test_size=0.33, random_state=random_state)
train_examples = [data.Example.fromlist(i, datafields) for i in train_df.values.tolist()]
train_data = data.Dataset(train_examples, datafields)
# split train to train/val
train_data, val_data = train_data.split(split_ratio=0.8)
# build vocab
TEXT.build_vocab(train_data, vectors=Vectors(w2v_file))
self.word_embeddings = TEXT.vocab.vectors
self.vocab = TEXT.vocab
test_examples = [data.Example.fromlist(i, datafields) for i in test_df.values.tolist()]
test_data = data.Dataset(test_examples, datafields)
self.train_iterator = data.BucketIterator(
(train_data),
batch_size=self.config.batch_size,
sort_key=lambda x: len(x.title),
repeat=False,
shuffle=True)
self.val_iterator, self.test_iterator = data.BucketIterator.splits(
(val_data, test_data),
batch_size=self.config.batch_size,
sort_key=lambda x: len(x.title),
repeat=False,
shuffle=False)
接下来是我的代码( load_data_but_error
)加载其他源但导致错误
TEXT = data.Field(sequential=True, tokenize=tokenizer, lower=True, fix_length=self.config.max_sen_len)
datafields = [('title', TEXT)]
examples = [data.Example.fromlist(i, datafields) for i in df.values.tolist()]
blink_test = data.Dataset(examples, datafields)
self.blink_test = data.BucketIterator(
(blink_test),
batch_size=self.config.batch_size,
sort_key=lambda x: len(x.title),
repeat=False,
shuffle=True)
当我执行代码时,出现错误AttributeError: 'Field' object has no attribute 'vocab'
在这里有一个问题,但它不喜欢我的情况,因为这里我有来自load_data
的 vocab,我想将它用于眨眼测试。
我的问题是使用训练有素的 PyTorch model 加载和提供新数据以测试当前 model 的正确方法是什么?
我需要的是
TEXT
保留在load_data
中并在load_data_but_error
中重用train=True
添加到 object data.BucketIterator
on load_data_but_error
function 不太确定,但考虑到您已经重新定义了TEXT
,您将不得不再次为您的 Field TEXT
明确创建词汇。 这可以按如下方式完成:
TEXT.build_vocab(examples, min_freq = 2)
只有当它在数据集examples
中至少出现两次时,此特定语句才会将数据中的单词添加到词汇表中,您可以根据需要更改它。
您可以在https://torchtext.readthedocs.io/en/latest/data.html#torchtext.data.Field.build_vocab阅读有关build_vocab
方法的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.