When try iterate over bucket iterator with customizable Dataset, it occurs the following error:
/usr/local/lib/python3.6/dist-packages/torchtext/data/iterator.py in __iter__(self)
160 else:
161 minibatch.sort(key=self.sort_key, reverse=True)
--> 162 yield Batch(minibatch, self.dataset, self.device)
163 if not self.repeat:
164 return
/usr/local/lib/python3.6/dist-packages/torchtext/data/batch.py in __init__(self, data, dataset, device)
26 self.dataset = dataset
27 self.fields = dataset.fields.keys() # copy field names
---> 28 self.input_fields = [k for k, v in dataset.fields.items() if
29 v is not None and not v.is_target]
30 self.target_fields = [k for k, v in dataset.fields.items() if
/usr/local/lib/python3.6/dist-packages/torchtext/data/batch.py in <listcomp>(.0)
27 self.fields = dataset.fields.keys() # copy field names
28 self.input_fields = [k for k, v in dataset.fields.items() if
---> 29 v is not None and not v.is_target]
30 self.target_fields = [k for k, v in dataset.fields.items() if
31 v is not None and v.is_target]
AttributeError: 'tuple' object has no attribute 'is_target'
my source-code is structured as follows:
Define the fields
TEXT = data.Field(
sequential=True,
tokenize = 'spacy',
#batch_first = True,
)
LABEL = data.LabelField()
Get Vocabulary
TEXT.build_vocab(
train,
max_size=25000,
#vectors = "glove.6B.100d",
vectors = vectors,
#unk_init = torch.Tensor.normal_
#min_freq=50,
)
LABEL.build_vocab(
train
)
Creating Example and Dataset instances
fields={"name": ("name", TEXT), "component": ("component", LABEL)}
examples= []
example = Example.fromdict({"name": "exmaple", "component": "Undefined"}, {"name": ("name", TEXT), "component": ("component", LABEL)})
examples.append(example)
instance = Dataset(examples=[example], fields=fields)
Creating bucket iterator instance
BATCH_SIZE = 64
train_iterator, instance_iterator = data.BucketIterator.splits(
(train, instance),
sort_key = lambda x: x.name,
sort = True,
batch_size = BATCH_SIZE,
device = device)
Iterate over bucket iterator
for batch in instance_iterator:
print(batch.name)