最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pytorch結(jié)合PyG實(shí)現(xiàn)MLP過程詳解

 更新時間:2023年04月21日 09:26:18   作者:實(shí)力  
這篇文章主要為大家介紹了Pytorch結(jié)合PyG實(shí)現(xiàn)MLP過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

導(dǎo)入庫和數(shù)據(jù)

首先,我們需要導(dǎo)入PyTorch和PyG庫,然后準(zhǔn)備好我們的數(shù)據(jù)。例如,我們可以使用以下方式生成一個簡單的隨機(jī)數(shù)據(jù)集:

from torch.utils.data import random_split
from torch_geometric.datasets import TUDataset
dataset = TUDataset(root='/tmp/ENZYMES', name='ENZYMES')
train_dataset, test_dataset = random_split(dataset, [len(dataset) - 1000, 1000])

其中,TUDataset 是PyG提供的圖形數(shù)據(jù)集之一。這里我們選擇了 ENZYMES 數(shù)據(jù)集并存儲到 /tmp/ENZYMES 文件夾中。然后我們將該數(shù)據(jù)集分成訓(xùn)練集和測試集,其中訓(xùn)練集包含所有數(shù)據(jù)減去最后1000個數(shù)據(jù),測試集則為最后1000個數(shù)據(jù)。

定義模型結(jié)構(gòu)

接下來,我們需要定義MLP模型的結(jié)構(gòu)。通過PyTorch和PyG,我們可以自己定義完整的MLP模型或者利用現(xiàn)有的庫函數(shù)快速構(gòu)建模型。在這里,我們將使用 torch.nn.Sequential 函數(shù)逐層堆疊多個線性層來實(shí)現(xiàn)MLP模型。以下是MLP模型定義的示例代碼:

import torch.nn as nn
from torch_geometric.nn import MLP
class Net(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels, num_layers=3):
        super(Net, self).__init__()
        self.num_layers = num_layers
        self.mlp = MLP([in_channels] + [hidden_channels] * (num_layers-1) + [out_channels])
    def forward(self, x):
        return self.mlp(x)

上述代碼中,我們定義了一個 Net 類用于構(gòu)建MLP網(wǎng)絡(luò),接收輸入通道數(shù)、隱藏層節(jié)點(diǎn)數(shù)、輸出通道數(shù)以及MLP層數(shù)作為參數(shù)。例如,我們可以按照以下方式創(chuàng)建一個擁有 4 層、128 個隱藏節(jié)點(diǎn)、并將度為圖結(jié)構(gòu)作為輸入的MLP模型:

model = Net(in_channels=dataset.num_node_features, hidden_channels=128, out_channels=dataset.num_classes, num_layers=4)

定義訓(xùn)練函數(shù)

然后,我們需要定義訓(xùn)練函數(shù)來訓(xùn)練我們的MLP神經(jīng)網(wǎng)絡(luò)。在這里,我們將使用交叉熵?fù)p失和Adam優(yōu)化器進(jìn)行訓(xùn)練,并在每一個epoch結(jié)束時計(jì)算準(zhǔn)確率并打印出來。以下是訓(xùn)練函數(shù)的示例代碼:

import torch.optim as optim
from torch_geometric.data import DataLoader
from tqdm import tqdm
def train(model, loader, optimizer, loss_fn):
    model.train()
    correct = 0
    total_loss = 0
    for data in tqdm(loader, desc='Training'):
        optimizer.zero_grad()
        out = model(data.x)
        pred = out.argmax(dim=1)
        loss = loss_fn(out, data.y)
        loss.backward()
        optimizer.step()
        total_loss += loss.item() * data.num_graphs
        correct += pred.eq(data.y).sum().item()
    return total_loss / len(loader.dataset), correct / len(loader.dataset)

在上述代碼中,我們遍歷加載器中的每個數(shù)據(jù)批次,并對模型進(jìn)行培訓(xùn)。對于每個圖數(shù)據(jù)批次,我們計(jì)算網(wǎng)絡(luò)輸出、預(yù)測和損失,然后通過反向傳播來更新權(quán)重。最后,我們將總損失和正確率記錄下來并返回。

定義測試函數(shù)

接下來,我們還需要定義測試函數(shù)來測試我們的MLP神經(jīng)網(wǎng)絡(luò)性能表現(xiàn)。我們將利用與訓(xùn)練函數(shù)相同的輸出參數(shù)進(jìn)行測試,并打印出最終的測試準(zhǔn)確率。以下是測試函數(shù)的示例代碼:

def test(model, loader, loss_fn):
    model.eval()
    correct = 0
    total_loss = 0
    with torch.no_grad():
        for data in tqdm(loader, desc='Testing'):
            out = model(data.x)
            pred = out.argmax(dim=1)
            loss = loss_fn(out, data.y)
            total_loss += loss.item() * data.num_graphs
            correct += pred.eq(data.y).sum().item()
    return total_loss / len(loader.dataset), correct / len(loader.dataset)

在上述代碼中,我們對測試數(shù)據(jù)集中的所有數(shù)據(jù)進(jìn)行了循環(huán),并計(jì)算網(wǎng)絡(luò)的輸出和預(yù)測。我們記錄下總損失和正確分類的數(shù)據(jù)量,并返回?fù)p失和準(zhǔn)確率之間的比率(我們使用該比率而不是精度來反映測試表現(xiàn)通常較?。?。

訓(xùn)練模型并評估訓(xùn)練結(jié)果

最后,我們可以使用前面定義過的函數(shù)來定義主函數(shù),從而完成MLP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和測試。以下是主函數(shù)的示例代碼:

if __name__ == '__main__':
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model = Net(in_channels=dataset.num_node_features, hidden_channels=128, out_channels=dataset.num_classes, num_layers=4).to(device)
    loader = DataLoader(train_dataset, batch_size=128, shuffle=True)
    test_loader = DataLoader(test_dataset, batch_size=128)
    optimizer = optim.Adam(model.parameters(), lr=0.01)
    loss_fn = nn.CrossEntropyLoss()
    for epoch in range(1, 201):
        train_loss, train_acc = train(model, loader, optimizer, loss_fn)
        test_loss, test_acc = test(model, test_loader, loss_fn)
        print(f'Epoch {epoch:03d}, Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.4f}, '
              f'Test Loss: {test_loss:.4f}, Test Acc: {test_acc:.4f}')

通過上述代碼,我們就可以完成MLP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和測試。我們使用 DataLoader 函數(shù)進(jìn)行數(shù)據(jù)加載,設(shè)置學(xué)習(xí)率、損失函數(shù)、訓(xùn)練輪數(shù)等超參數(shù)。最后,我們可以在屏幕上看到每個時代的準(zhǔn)確率和損失值,并通過它們評估模型的訓(xùn)練表現(xiàn)。

以上就是Pytorch結(jié)合PyG實(shí)現(xiàn)MLP過程詳解的詳細(xì)內(nèi)容,更多關(guān)于Pytorch PyG實(shí)現(xiàn)MLP的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

易门县| 鸡泽县| 安庆市| 咸丰县| 鹰潭市| 祁东县| 卫辉市| 保靖县| 神农架林区| 景泰县| 建平县| 黔西| 图木舒克市| 巨鹿县| 江孜县| 双辽市| 万州区| 扎赉特旗| 九龙城区| 额尔古纳市| 太原市| 郎溪县| 吉水县| 洮南市| 洪湖市| 镇平县| 郴州市| 齐河县| 体育| 宿迁市| 谢通门县| 游戏| 蒲江县| 奉新县| 白城市| 抚顺县| 施秉县| 柳河县| 门头沟区| 广南县| 无为县|