Ich erstelle mit Pytorch einen Nur-Decoder-Transformator und mein Datensatz meiner Wahl ist der vollständige englische Datensatz aus kaggle Plaintext Wikipedia (vollständiges Englisch).
Das Problem ist, dass meine Modellausgabe sich wiederholt:
Da ich relativ neu in Sachen Transformatoren bin, kann ich das Problem selbst nicht wirklich herausfinden. Auch wenn es nicht ideal ist, den gesamten Code zu veröffentlichen, entschuldige ich mich dafür.
Hier ist mein Code
Ich erstelle mit Pytorch einen Nur-Decoder-Transformator und mein Datensatz meiner Wahl ist der vollständige englische Datensatz aus kaggle Plaintext Wikipedia (vollständiges Englisch). Das [url=viewtopic.php?t=26065]Problem[/url] ist, dass meine Modellausgabe sich wiederholt: [code]print(generate(model=model, prompt="what is anarchism", tokenizer=tokenizer, max_new_tokens=100, temperature=1.0, device=DEVICE)) [/code] für diese Dummy-Generierung lautet die Ausgabe: [code]what is anarchism anarchism anarchism anarch anarch anarchism anarchism anarchismismismismismismismismismismismismismismism anarchism anarchismismismismismismismismismismismismismismismismismismismismismismism anarchismismism anarchismismism anarchism anarchismismismismismismismism anarchismismismismism anarch anarchism anarchismismism anarchism anarchism anarchismismismismism anarchism anarchism anarchism [/code] Da ich relativ neu in Sachen Transformatoren bin, kann ich das [url=viewtopic.php?t=26065]Problem[/url] selbst nicht wirklich herausfinden. Auch wenn es nicht ideal ist, den gesamten Code zu veröffentlichen, entschuldige ich mich dafür. Hier ist mein Code [code]import os import math from pathlib import Path import random import bisect
import torch from torch import nn from torch.utils.data import Dataset, DataLoader from tokenizers import ByteLevelBPETokenizer from tqdm import tqdm
torch.manual_seed(SEED) if DEVICE=='cuda': torch.cuda.manual_seed_all(SEED)
"""#Tokenizer"""
if not Path(TOKENIZER_DIR).exists(): Path(TOKENIZER_DIR).mkdir() files = [str(p) for p in Path(DATA_DIR).glob('**/*') if p.is_file() and not p.name.startswith('.')] tokenizer = ByteLevelBPETokenizer() tokenizer.train(files=files, vocab_size=30000, min_frequency=2, special_tokens=["", "", "", "", ""]) tokenizer.save_model(TOKENIZER_DIR) else: tokenizer = ByteLevelBPETokenizer.from_file(f"{TOKENIZER_DIR}/vocab.json", f"{TOKENIZER_DIR}/merges.txt")
VOCAB_SIZE = tokenizer.get_vocab_size()
"""#Dataset & Dataloader"""
class RandomWindowWikiDataset(Dataset): def __init__(self, data_dir, tokenizer, block_size, approx_sample): self.files = sorted([p for p in Path(DATA_DIR).glob('**/*') if p.is_file() and not p.name.startswith('.')])
if len(self.files) == 0: raise FileNotFoundError('No files found in data_dir')
if not os.path.exists(MODEL_PATH): if not Path(MODEL_DIR).exists(): Path(MODEL_DIR).mkdir() train(model=model, optimizer=optimizer, criterion=criterion, epochs=EPOCHS, device=DEVICE, vocab_size=VOCAB_SIZE, dataloader=dataloader) torch.save(obj=model.state_dict(), f=MODEL_PATH)
Wie finde ich bei einer gegebenen Zeichenfolge S die längste Teilzeichenfolge ohne sich wiederholende Zeichen? Wenn es mehrere solcher Teilzeichenfolgen mit derselben maximalen Länge gibt, möchte ich...
Wie finde ich bei einer gegebenen Zeichenfolge S die längste Teilzeichenfolge ohne sich wiederholende Zeichen? Wenn es mehrere solcher Teilzeichenfolgen mit derselben maximalen Länge gibt, möchte ich...
Bitte überprüfen Sie das Bild nach unten. Überprüfen Sie die Antwort mit ähnlichen Optionen für iOS. Bei Tippen mit der Antwort mit Nachrichten endet der Anruf, aber die ausgewählte...
Bitte überprüfen Sie das Bild nach unten. Überprüfen Sie die Antwort mit ähnlichen Optionen für iOS. Bei Tippen mit der Antwort mit Nachrichten endet der Anruf, aber die ausgewählte...