成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用 PyTorch Lightning 搭建一個文本分類模型,你學會了嗎?

開發 前端
本項目展示了如何采用 PyTorch Lightning 進行構建、訓練和部署文本分類模型的系統化方法。盡情地嘗試代碼,調整參數,并試用不同的數據集或模型。

引言

在這篇博文[1]中,將逐步介紹如何使用 PyTorch Lightning 來構建和部署一個基礎的文本分類模型。該項目借助了 PyTorch 生態中的多個強大工具,例如 torch、pytorch_lightning 以及 Hugging Face 提供的 transformers,從而構建了一個強大且可擴展的機器學習流程。

圖片圖片

代碼庫包含四個核心的 Python 腳本:

  • data.py:負責數據的加載和預處理工作。
  • model.py:構建模型的結構。
  • train.py:包含了訓練循環和訓練的配置。
  • inference.py:支持使用訓練好的模型進行推斷。

下面詳細解析每個部分,以便理解它們是如何協同作用,以實現文本分類的高效工作流程。

1. 數據加載與預處理

在 data.py 文件中,DataModule 類被設計用來處理數據加載和預處理的所有環節。它利用了 PyTorch Lightning 的 LightningDataModule,這有助于保持數據處理任務的模塊化和可復用性。

class DataModule(pl.LightningDataModule):
    def __init__(self, model_name="google/bert_uncased_L-2_H-128_A-2", batch_size=32):
        super().__init__()
        self.batch_size = batch_size
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)

這個類在初始化時需要指定模型名稱和批量大小,并從 Hugging Face 的 Transformers 庫加載一個分詞器。prepare_data() 函數會從 GLUE 基準測試套件中下載 CoLA 數據集,這個數據集經常用來評估自然語言理解(NLU)模型的性能。

setup() 函數負責對文本數據進行分詞處理,并創建用于訓練和驗證的 PyTorch DataLoader 對象:

def setup(self, stage=None):
    if stage == "fit" or stage is None:
        self.train_data = self.train_data.map(self.tokenize_data, batched=True)
        self.train_data.set_format(type="torch", columns=["input_ids", "attention_mask", "label"])
        self.val_data = self.val_data.map(self.tokenize_data, batched=True)
        self.val_data.set_format(type="torch", columns=["input_ids", "attention_mask", "label"])

2. 模型架構

在 model.py 文件中定義的 ColaModel 類繼承自 PyTorch Lightning 的 LightningModule。該模型采用 BERT(一種雙向編碼器表示,源自 Transformers)的簡化版本作為文本表示的核心模型。

class ColaModel(pl.LightningModule):
    def __init__(self, model_name="google/bert_uncased_L-2_H-128_A-2", lr=1e-2):
        super(ColaModel, self).__init__()
        self.bert = AutoModel.from_pretrained(model_name)
        self.W = nn.Linear(self.bert.config.hidden_size, 2)

模型在前向傳播過程中提取 BERT 的最終隱藏狀態,并通過一個線性層來生成用于二分類的對數幾率(logits):

def forward(self, input_ids, attention_mask):
    outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)
    h_cls = outputs.last_hidden_state[:, 0]
    logits = self.W(h_cls)
    return logits

另外,training_step() 和 validation_step() 函數分別負責處理訓練和驗證的邏輯,并記錄諸如損失和準確率等關鍵指標。

3. Training Loop

train.py 腳本利用 PyTorch Lightning 的 Trainer 類來控制訓練過程。它還包含了模型檢查點和提前停止的回調機制,以防止模型過擬合。

checkpoint_callback = ModelCheckpoint(dirpath="./models", mnotallow="val_loss", mode="min")
early_stopping_callback = EarlyStopping(mnotallow="val_loss", patience=3, verbose=True, mode="min")

訓練過程設定了最大周期數,并在可能的情況下利用 GPU 進行加速:

trainer = pl.Trainer(
    default_root_dir="logs",
    gpus=(1 if torch.cuda.is_available() else 0),
    max_epochs=5,
    fast_dev_run=False,
    logger=pl.loggers.TensorBoardLogger("logs/", name="cola", versinotallow=1),
    callbacks=[checkpoint_callback, early_stopping_callback],
)
trainer.fit(cola_model, cola_data)

這樣的配置不僅讓訓練變得更加簡便,還保證了模型能夠定期保存并對其性能進行監控。

4. 推理

訓練結束后,將利用模型來進行預測。inference.py 腳本中定義了一個名為 ColaPredictor 的類,該類負責加載經過訓練的模型檢查點,并提供了一個用于生成預測的方法:

class ColaPredictor:
    def __init__(self, model_path):
        self.model_path = model_path
        self.model = ColaModel.load_from_checkpoint(model_path)
        self.model.eval()
        self.model.freeze()

Predict() 方法接受文本輸入,使用分詞器對其進行處理,并返回模型的預測:

def predict(self, text):
    inference_sample = {"sentence": text}
    processed = self.processor.tokenize_data(inference_sample)
    logits = self.model(
        torch.tensor([processed["input_ids"]]),
        torch.tensor([processed["attention_mask"]]),
    )
    scores = self.softmax(logits[0]).tolist()
    predictions = [{"label": label, "score": score} for score, label in zip(scores, self.labels)]
    return predictions

總結

本項目展示了如何采用 PyTorch Lightning 進行構建、訓練和部署文本分類模型的系統化方法。盡情地嘗試代碼,調整參數,并試用不同的數據集或模型吧。

責任編輯:武曉燕 來源: 數據科學工廠
相關推薦

2021-10-04 09:29:41

對象池線程池

2023-03-26 22:02:53

APMPR監控

2024-06-21 08:15:25

2024-06-19 09:47:21

2021-08-30 09:25:25

Bert模型PyTorch語言

2023-06-12 07:41:16

dockerspark集群

2023-09-19 08:03:50

rebase?merge

2023-04-27 08:42:50

效果

2022-02-08 09:09:45

智能指針C++

2024-04-01 08:13:59

排行榜MySQL持久化

2024-11-29 08:53:46

2023-05-24 08:14:55

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2024-09-26 09:10:08

2023-08-08 08:34:47

漏洞環境獲取方法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕二区 | 国产精品不卡 | av在线天堂| 久草福利 | 在线观看成人免费视频 | 毛片片| 国产传媒在线观看 | 久久午夜精品 | 99亚洲精品| 成年人在线播放 | 欧美精品在线免费 | 亚洲高清免费视频 | www成人免费视频 | 91视视频在线观看入口直接观看 | 在线成人av | 亚洲三级在线观看 | 中国三级黄色录像 | 欧美亚洲国语精品一区二区 | 国产日韩欧美在线 | 亚洲欧美一区二区三区国产精品 | 精国产品一区二区三区 | 黄色片在线免费看 | 国产精品夜夜春夜夜爽久久电影 | 欧美激情区 | 国内91在线 | 美女黄网站 | 国产一区二区在线播放 | 成人 在线 | 日韩一区二区三区av | 国产精品日日摸夜夜添夜夜av | 国产乱码精品一区二区三区忘忧草 | caoporn国产| 日本黄色短片 | 午夜午夜精品一区二区三区文 | 免费一级欧美在线观看视频 | 四虎最新| 亚洲一区二区在线视频 | 日韩视频在线观看一区二区 | 亚洲伊人a | 欧美三级在线 | 中文字幕久久久 |