最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

使用 Transformers 進(jìn)行圖分類(lèi)

2023-04-18 22:02 作者:HuggingFace  | 我要投稿

在之前的博文中,我們探討了圖機(jī)器學(xué)習(xí)的一些理論知識(shí)。這一篇我們將探索如何使用 Transformers 庫(kù)進(jìn)行圖分類(lèi)。(你也可以從 此處 下載演示 notebook,跟著一起做!)

目前,Transformers 中唯一可用的圖 transformer 模型是微軟的 Graphormer,因此本文的例子將會(huì)基于該模型。我們期待看到大家會(huì)使用并集成哪些其他模型進(jìn) ??。

軟件

要學(xué)習(xí)本教程,需要安裝?datasets?和 ?transformers?(版本號(hào) >= 4.27.2),你可以使用?pip install -U datasets transformers?來(lái)安裝。

數(shù)據(jù)

你可以使用自己的圖數(shù)據(jù)集,也可以使用 Hub 上已有的數(shù)據(jù)集。本文我們主要使用已有的數(shù)據(jù)集,你也可以隨時(shí) 添加你的數(shù)據(jù)集 到 Hugging Face!

數(shù)據(jù)加載

從 Hub 加載圖數(shù)據(jù)集非常簡(jiǎn)單。這里,我們加載 OGB 庫(kù)中的?ogbg-mohiv?數(shù)據(jù)集 (該數(shù)據(jù)集是斯坦福 開(kāi)放圖基準(zhǔn) (Open Graph Benchmark,OGB) ?的一部分):

這個(gè)數(shù)據(jù)集含三個(gè)拆分,train?、validation??test,所有這些拆分每一行都表示一個(gè)圖,每個(gè)圖包含 5 個(gè)數(shù)據(jù)列 (edge_index、edge_attry、num_nodes、node_feat),你可以通過(guò)執(zhí)行?print(dataset)?來(lái)查看。

如果你還安裝了其他圖處理庫(kù),你還可以用這些庫(kù)把圖可視化出來(lái),并進(jìn)一步檢查數(shù)據(jù)集。例如,使用 PyGeometric 和 matplotlib:

格式

在 Hub 上,圖數(shù)據(jù)集主要存儲(chǔ)為圖列表形式 (使用?jsonl?格式)。

單個(gè)圖表示為一個(gè)字典,以下是我們圖分類(lèi)數(shù)據(jù)集的理想格式:

  • edge_index?包含圖上每條邊對(duì)應(yīng)的節(jié)點(diǎn) ID,存儲(chǔ)為包含兩個(gè)節(jié)點(diǎn)列表的列表 (即由一個(gè)源節(jié)點(diǎn)列表和一個(gè)目的節(jié)點(diǎn)列表組成的列表)。

    • 類(lèi)型: 2 個(gè)整數(shù)列表的列表。

    • 示例: 包含四個(gè)節(jié)點(diǎn) (0、1、2 和 3) 且連接為 1->2、1->3 和 3->1 的圖將具有?edge_index = [[1, 1, 3]、[2、3、1]]。你可能會(huì)注意到此處不存在節(jié)點(diǎn) 0,因?yàn)樵诒緮?shù)據(jù)中它與其他節(jié)點(diǎn)無(wú)邊連接。這就是下一個(gè)屬性很重要的原因。

  • num_nodes?表示圖中可用節(jié)點(diǎn)的數(shù)目 (默認(rèn)情況下,假定節(jié)點(diǎn)按順序編號(hào))。

    • 類(lèi)型: 整數(shù)

    • 示例: 在上例中,num_nodes = 4。

  • y?每個(gè)圖的預(yù)測(cè)標(biāo)簽 (可以是類(lèi)、屬性值或是不同任務(wù)的多個(gè)二分類(lèi)標(biāo)簽)。

    • Type: 整數(shù)列表 (用于多分類(lèi)) 、浮點(diǎn)數(shù) (用于回歸) 或 0/1 列表 (用于二元多任務(wù)分類(lèi))

    • 示例: 我們可以預(yù)測(cè)圖規(guī)模 (小 = 0,中 = 1,大 = 2)。本例中,y = [0]。

  • node_feat?包含圖中每個(gè)節(jié)點(diǎn)的可用特征 (如果存在),按節(jié)點(diǎn) ID 排序。

    • 類(lèi)型: 整數(shù)列表的列表 (可選)

    • 例子: 如上例中的節(jié)點(diǎn)可以有一些類(lèi)型特征 (就像分子圖中的節(jié)點(diǎn)是不同的原子,不同的原子有不同的類(lèi)型一樣)。打比方,本例中?node_feat = [[1], [0], [1], [1]]

  • edge_attr?包含圖中每條邊的可用屬性 (如果存在),按?edge_index?排序。

    • 類(lèi)型: 整數(shù)列表的列表 (可選)

    • 例子: 仍使用上例,邊也可以有類(lèi)型 (如分子中的鍵),如 edge_attr = [[0], [1], [1]]`。

預(yù)處理

圖 transformer 框架通常需要根據(jù)數(shù)據(jù)集進(jìn)行特定的預(yù)處理,以生成有助于目標(biāo)學(xué)習(xí)任務(wù) (在我們的案例中為分類(lèi)) 的特征和屬性。在這里,我們使用?Graphormer?的默認(rèn)預(yù)處理,它生成進(jìn)度/出度信息、節(jié)點(diǎn)間的最短路徑以及模型感興趣的其他屬性。

我們也可以在?DataCollator?的參數(shù)中動(dòng)態(tài)進(jìn)行預(yù)處理 (通過(guò)將?on_the_fly_processing設(shè)置為 True)。但并非所有數(shù)據(jù)集都像?ogbg-molhiv?那樣小,對(duì)于大圖,動(dòng)態(tài)預(yù)處理成本太高,因此需要預(yù)先進(jìn)行預(yù)處理,并存儲(chǔ)預(yù)處理后的數(shù)據(jù)供后續(xù)訓(xùn)練實(shí)驗(yàn)使用。

模型

模型加載

這里,我們加載一個(gè)已有的預(yù)訓(xùn)練模型及其 checkpoint 并在我們的下游任務(wù)上對(duì)其進(jìn)行微調(diào),該任務(wù)是一個(gè)二分類(lèi)任務(wù) (因此?num_classes = 2)。我們還可以在回歸任務(wù) (num_classes = 1) 或多任務(wù)分類(lèi)上微調(diào)我們的模型。

我們來(lái)看下細(xì)節(jié)。

在代碼中調(diào)用?from_pretrained?方法來(lái)下載并緩存模型權(quán)重。由于類(lèi)的數(shù)量 (用于預(yù)測(cè)) 取決于數(shù)據(jù)集,我們將新的?num_classes??ignore_mismatched_sizes??model_checkpoint?一起傳給該函數(shù)。這會(huì)觸發(fā)函數(shù)創(chuàng)建一個(gè)自定義的、特定于該下游任務(wù)的分類(lèi)頭,這個(gè)頭與原模型中的解碼器頭很可能是不同的。

我們也可以創(chuàng)建一個(gè)新的隨機(jī)初始化的模型來(lái)從頭開(kāi)始訓(xùn)練,此時(shí),我們既可以復(fù)用給定檢查點(diǎn)的超參配置,也可以自己手動(dòng)選擇超參配置。

訓(xùn)練或微調(diào)

為了簡(jiǎn)化模型訓(xùn)練,我們使用?Trainer。我們需要定義訓(xùn)練相關(guān)的配置以及評(píng)估指標(biāo)來(lái)實(shí)例化?Trainer。我們主要使用?TrainingArguments類(lèi),這是一個(gè)包含所有配置項(xiàng)的類(lèi),用于定制訓(xùn)練配置。我們要給它一個(gè)文件夾名稱(chēng),用于保存模型的 checkpoint。

對(duì)于圖數(shù)據(jù)集,調(diào)整 batch size 和梯度累積步數(shù)來(lái)保證有效 batch size 夠大同時(shí)又要避免內(nèi)存不足,這件事尤為重要。

最后一個(gè)參數(shù)?push_to_hub?允許?Trainer?在訓(xùn)練期間定期將模型推送到 Hub,這個(gè)通常由保存步長(zhǎng)來(lái)決定。


在用于圖分類(lèi)的?Trainer?中,對(duì)給定的圖數(shù)據(jù)集使用正確的數(shù)據(jù)整理器 (data collator) 很重要,這個(gè)數(shù)據(jù)整理器會(huì)將圖轉(zhuǎn)換為用于訓(xùn)練的 batch 數(shù)據(jù)。

訓(xùn)練完后,可以使用?push_to_hub?將模型與所有其他訓(xùn)練相關(guān)信息一起保存到 hub。

由于此模型比較大,因此在 CPU (Intel Core i7) 上訓(xùn)練/微調(diào) 20 個(gè) epoch 大約需要一天時(shí)間。想要更快點(diǎn)的話,你可以使用強(qiáng)大的 GPU 和并行化方法,你只需在 Colab notebook 中或直接在你選擇的其他集群上啟動(dòng)代碼即可。

結(jié)束語(yǔ)

現(xiàn)在你已經(jīng)知道如何使用?transformers?來(lái)訓(xùn)練圖分類(lèi)模型,我們希望你嘗試在 Hub 上分享你最喜歡的圖 transformer 模型的 checkpoints、模型以及數(shù)據(jù)集,以供社區(qū)的其他人使用!

英文原文:?https://hf.co/blog/graphml-classification

作者: Clémentine Fourrier

譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。

排版/審校: zhongdongy (阿東)

使用 Transformers 進(jìn)行圖分類(lèi)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
商南县| 浦县| 武强县| 青铜峡市| 江华| 康保县| 永定县| 庆元县| 嘉善县| 镇江市| 怀宁县| 阜宁县| 襄垣县| 陇西县| 巴青县| 灵山县| 西青区| 蕲春县| 连江县| 潍坊市| 平谷区| 资中县| 铅山县| 读书| 舟曲县| 临桂县| 莱芜市| 吉林市| 静乐县| 炉霍县| 双鸭山市| 新龙县| 马龙县| 德清县| 齐河县| 金塔县| 东莞市| 辽宁省| 通州区| 湖州市| 醴陵市|