国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深度學(xué)習(xí) GNN圖神經(jīng)網(wǎng)絡(luò)(四)線性回歸之ESOL數(shù)據(jù)集水溶性預(yù)測(cè)

這篇具有很好參考價(jià)值的文章主要介紹了深度學(xué)習(xí) GNN圖神經(jīng)網(wǎng)絡(luò)(四)線性回歸之ESOL數(shù)據(jù)集水溶性預(yù)測(cè)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、前言

本文旨在使用化合物分子的SMILES字符串進(jìn)行數(shù)據(jù)模型訓(xùn)練,對(duì)其水溶性的值進(jìn)行預(yù)測(cè)。

之前的文章《深度學(xué)習(xí) GNN圖神經(jīng)網(wǎng)絡(luò)(三)模型思想及文獻(xiàn)分類案例實(shí)戰(zhàn)》引用的Cora數(shù)據(jù)集只有一張圖,屬于圖神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)分類問(wèn)題。本文介紹的是多圖批量訓(xùn)練的線性回歸問(wèn)題,在文章最后也討論了圖分類問(wèn)題。

二、ESOL數(shù)據(jù)集

本文使用的是ESOL數(shù)據(jù)集,在文章《如何將化學(xué)分子SMILES字符串轉(zhuǎn)化為Pytorch圖數(shù)據(jù)結(jié)構(gòu)——ESOL分子水溶性數(shù)據(jù)集解析》中有詳細(xì)介紹,在此不作詳述。

三、加載數(shù)據(jù)集

from torch_geometric.datasets import MoleculeNet

dataset = MoleculeNet(root="data", name="ESOL")

print('num_features:',dataset.num_features)
print('num_classes:',dataset.num_classes)
print('num_node_features',dataset.num_node_features)
print("size:", len(dataset))

d=dataset[10]
print("Sample:", d)
print("Sample y:", d.y)
print("Sample num_nodes:",d.num_nodes)
print("Sample num_edges:",d.num_edges)

這里可以得到數(shù)據(jù)集的一些基本信息:

num_features: 9
num_classes: 734
num_node_features 9
size: 1128
Sample: Data(x=[6, 9], edge_index=[2, 12], edge_attr=[12, 3], smiles='O=C1CCCN1', y=[1, 1])
Sample y: tensor([[1.0700]])
Sample num_nodes: 6
Sample num_edges: 12

四、數(shù)據(jù)拆分

將數(shù)據(jù)集拆分為訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù):

from torch_geometric.loader import DataLoader
data_size = len(dataset)
batch_size = 128
train_data=dataset[:int(data_size*0.8)]
test_data=dataset[int(data_size*0.8):]

train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_data, batch_size=len(test_data))

五、構(gòu)造模型

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv
import matplotlib.pyplot as plt
from torch_geometric.nn import global_mean_pool

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

hidden_channels = 64

class GNN(nn.Module):
    
    def __init__(self):
        # 初始化Pytorch父類
        super().__init__()
        
        self.conv1=GCNConv(dataset.num_node_features, hidden_channels)
        self.conv2=GCNConv(hidden_channels, hidden_channels)
        self.conv3 = GCNConv(hidden_channels, hidden_channels)
        self.conv4 = GCNConv(hidden_channels, hidden_channels)
        self.out = nn.Linear(hidden_channels, 1)
        
        # 創(chuàng)建損失函數(shù),使用均方誤差
        self.loss_function = nn.MSELoss()

        # 創(chuàng)建優(yōu)化器,使用Adam梯度下降
        self.optimiser = torch.optim.Adam(self.parameters(), lr=0.005,weight_decay=5e-4)

        # 訓(xùn)練次數(shù)計(jì)數(shù)器
        self.counter = 0
        # 訓(xùn)練過(guò)程中損失值記錄
        self.progress = []
    
    # 前向傳播函數(shù)
    def forward(self, x, edge_index,batch):
        
        x=x.to(device)
        edge_index=edge_index.to(device)
        batch=batch.to(device)

        x=self.conv1(x, edge_index)
        x=x.relu()
        x=self.conv2(x, edge_index)
        x=x.relu()
        x=self.conv3(x, edge_index)
        x=x.relu()
        x=self.conv4(x, edge_index)
        x=x.relu()

        # 全局池化
        x = global_mean_pool(x, batch)  # [x, batch]

        out=self.out(x)
        return out
    
    # 訓(xùn)練函數(shù)
    def train(self, data):

        # 前向傳播計(jì)算,獲得網(wǎng)絡(luò)輸出
        outputs = self.forward(data.x.float(),data.edge_index,data.batch)
        
        # 計(jì)算損失值
        y=data.y.to(device)
        loss = self.loss_function(outputs, y)

        # 累加訓(xùn)練次數(shù)
        self.counter += 1

        # 每10次訓(xùn)練記錄損失值
        if (self.counter % 10 == 0):
            self.progress.append(loss.item())

        # 每1000次輸出訓(xùn)練次數(shù)   
        if (self.counter % 1000 == 0):
            print(f"counter={self.counter}, loss={loss.item()}")
            
        # 梯度清零, 反向傳播, 更新權(quán)重
        self.optimiser.zero_grad()
        loss.backward()
        self.optimiser.step()
    
    # 測(cè)試函數(shù)
    def test(self, data):
        # 前向傳播計(jì)算,獲得網(wǎng)絡(luò)輸出
        outputs = self.forward(data.x.float(),data.edge_index,data.batch)

        # 把絕對(duì)值誤差小于1的視為正確,計(jì)算準(zhǔn)確度
        y=data.y.to(device)
        acc=sum(torch.abs(y-outputs)<1)/len(data.y)
        return acc

    # 繪制損失變化圖
    def plot_progress(self):
        plt.plot(range(len(self.progress)),self.progress)
      

六、訓(xùn)練模型

model = GNN()
model.to(device)

for i in range(1001):
    for data in train_loader:
        # print(data,'num_graphs:',data.num_graphs)
        model.train(data)
counter=1000, loss=1.4304862022399902
counter=2000, loss=0.9842458963394165
counter=3000, loss=0.27240827679634094
counter=4000, loss=0.23295772075653076
counter=5000, loss=0.38499030470848083
counter=6000, loss=1.470423698425293
counter=7000, loss=0.845589816570282
counter=8000, loss=0.15707021951675415

繪制損失值變化圖::

model.plot_progress()

深度學(xué)習(xí) GNN圖神經(jīng)網(wǎng)絡(luò)(四)線性回歸之ESOL數(shù)據(jù)集水溶性預(yù)測(cè)

七、測(cè)試結(jié)果

#torch.set_printoptions(precision=4,sci_mode=False) #pytorch不使用科學(xué)計(jì)數(shù)法顯示

for data in test_loader:
    acc=model.test(data)
    print(acc)
tensor([0.8186], device='cuda:0')

可以看到,預(yù)測(cè)值誤差小于1的占了81.86%,效果還行。

八、分類問(wèn)題

對(duì)于圖分類問(wèn)題,其實(shí)也差不多。只需要修改下Linear網(wǎng)絡(luò)層:

self.out = Linear(hidden_channels, dataset.num_classes)

這樣預(yù)測(cè)結(jié)果就會(huì)有num_classes個(gè),取最大值的下標(biāo)索引即可。
偽代碼為:

pred=outputs.argmax(dim=1)
correct += int((pred == data.y).sum())

參考文獻(xiàn)

[1] https://pytorch-geometric.readthedocs.io/en/latest/get_started/colabs.html
[2] https://zhuanlan.zhihu.com/p/504978470文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-430799.html

到了這里,關(guān)于深度學(xué)習(xí) GNN圖神經(jīng)網(wǎng)絡(luò)(四)線性回歸之ESOL數(shù)據(jù)集水溶性預(yù)測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • pytorch學(xué)習(xí)——線性神經(jīng)網(wǎng)絡(luò)——1線性回歸

    pytorch學(xué)習(xí)——線性神經(jīng)網(wǎng)絡(luò)——1線性回歸

    概要:線性神經(jīng)網(wǎng)絡(luò)是一種最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)模型,它由若干個(gè)線性變換和非線性變換組成。線性變換通常表示為矩陣乘法,非線性變換通常是一個(gè)逐元素的非線性函數(shù)。線性神經(jīng)網(wǎng)絡(luò)通常用于解決回歸和分類問(wèn)題。 ????????線性回歸是一種常見(jiàn)的機(jī)器學(xué)習(xí)算法,用于建

    2024年02月15日
    瀏覽(24)
  • pytorch學(xué)習(xí)-線性神經(jīng)網(wǎng)絡(luò)——softmax回歸+損失函數(shù)+圖片分類數(shù)據(jù)集

    pytorch學(xué)習(xí)-線性神經(jīng)網(wǎng)絡(luò)——softmax回歸+損失函數(shù)+圖片分類數(shù)據(jù)集

    ????????Softmax回歸(Softmax Regression)是一種常見(jiàn)的多分類模型,可以用于將輸入變量映射到多個(gè)類別的概率分布中。softmax回歸是機(jī)器學(xué)習(xí)中非常重要并且經(jīng)典的模型,雖然叫回歸,實(shí)際上是一個(gè)分類問(wèn)題 ? ? ? ? 回歸是估計(jì)一個(gè)連續(xù)值,分類是預(yù)測(cè)一個(gè)連續(xù)的類別 ?示例

    2024年02月15日
    瀏覽(25)
  • 《動(dòng)手學(xué)深度學(xué)習(xí)》——線性神經(jīng)網(wǎng)絡(luò)

    《動(dòng)手學(xué)深度學(xué)習(xí)》——線性神經(jīng)網(wǎng)絡(luò)

    參考資料: 《動(dòng)手學(xué)深度學(xué)習(xí)》 樣本: n n n 表示樣本數(shù), x ( i ) = [ x 1 ( i ) , x 2 ( i ) , ? ? , x d ( i ) ] x^{(i)}=[x^{(i)}_1,x^{(i)}_2,cdots,x^{(i)}_d] x ( i ) = [ x 1 ( i ) ? , x 2 ( i ) ? , ? , x d ( i ) ? ] 表示第 i i i 個(gè)樣本。 預(yù)測(cè): y ^ = w T x + b hat{y}=w^Tx+b y ^ ? = w T x + b 表示單個(gè)樣本的預(yù)

    2024年02月12日
    瀏覽(21)
  • 動(dòng)手學(xué)深度學(xué)習(xí)(二)線性神經(jīng)網(wǎng)絡(luò)

    動(dòng)手學(xué)深度學(xué)習(xí)(二)線性神經(jīng)網(wǎng)絡(luò)

    推薦課程:跟李沐學(xué)AI的個(gè)人空間-跟李沐學(xué)AI個(gè)人主頁(yè)-嗶哩嗶哩視頻 目錄 一、線性回歸 1.1 線性模型 1.2 損失函數(shù)(衡量預(yù)估質(zhì)量) 二、基礎(chǔ)優(yōu)化算法(梯度下降算法) 2.1 梯度下降公式 2.2 選擇學(xué)習(xí)率 2.3 小批量隨機(jī)梯度下降 三、線性回歸的從零開(kāi)始實(shí)現(xiàn)(代碼實(shí)現(xiàn)) 3.1

    2024年02月14日
    瀏覽(22)
  • Pytorch深度學(xué)習(xí)-----神經(jīng)網(wǎng)絡(luò)之線性層用法

    PyTorch深度學(xué)習(xí)——Anaconda和PyTorch安裝 Pytorch深度學(xué)習(xí)-----數(shù)據(jù)模塊Dataset類 Pytorch深度學(xué)習(xí)------TensorBoard的使用 Pytorch深度學(xué)習(xí)------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Compose,RandomCrop) Pytorch深度學(xué)習(xí)------torchvision中dataset數(shù)據(jù)集的使用(CIFAR10) Pytorch深度學(xué)習(xí)--

    2024年02月14日
    瀏覽(24)
  • 動(dòng)手學(xué)深度學(xué)習(xí)-pytorch版本(二):線性神經(jīng)網(wǎng)絡(luò)

    動(dòng)手學(xué)深度學(xué)習(xí)-pytorch版本(二):線性神經(jīng)網(wǎng)絡(luò)

    參考引用 動(dòng)手學(xué)深度學(xué)習(xí) 神經(jīng)網(wǎng)絡(luò)的整個(gè)訓(xùn)練過(guò)程,包括: 定義簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)架構(gòu)、數(shù)據(jù)處理、指定損失函數(shù)和如何訓(xùn)練模型 。經(jīng)典統(tǒng)計(jì)學(xué)習(xí)技術(shù)中的 線性回歸 和 softmax 回歸 可以視為線性神經(jīng)網(wǎng)絡(luò) 1.1 線性回歸 回歸 (regression) 是能為一個(gè)或多個(gè)自變量與因變量之間關(guān)系建

    2024年02月12日
    瀏覽(50)
  • 【圖神經(jīng)網(wǎng)絡(luò)】圖神經(jīng)網(wǎng)絡(luò)(GNN)學(xué)習(xí)筆記:Graph Embedding

    【圖神經(jīng)網(wǎng)絡(luò)】圖神經(jīng)網(wǎng)絡(luò)(GNN)學(xué)習(xí)筆記:Graph Embedding

    Graph廣泛存在于真實(shí)世界的多種場(chǎng)景中,即節(jié)點(diǎn)和邊的集合。比如社交網(wǎng)絡(luò)中人與人之間的聯(lián)系,生物中蛋白質(zhì)相互作用以及通信網(wǎng)絡(luò)中的IP地址之間的通信等等。除此之外,我們最常見(jiàn)的一張圖片、一個(gè)句子也可以抽象地看做是一個(gè)圖模型的結(jié)構(gòu),圖結(jié)構(gòu)可以說(shuō)是無(wú)處不在。

    2024年02月08日
    瀏覽(22)
  • 【深度學(xué)習(xí)】基于MindSpore和pytorch的Softmax回歸及前饋神經(jīng)網(wǎng)絡(luò)

    【深度學(xué)習(xí)】基于MindSpore和pytorch的Softmax回歸及前饋神經(jīng)網(wǎng)絡(luò)

    1 實(shí)驗(yàn)內(nèi)容簡(jiǎn)介 1.1 實(shí)驗(yàn)?zāi)康?(1)熟練掌握tensor相關(guān)各種操作; (2)掌握廣義線性回歸模型(logistic模型、sofmax模型)、前饋神經(jīng)網(wǎng)絡(luò)模型的原理; (3)熟練掌握基于mindspore和pytorch的廣義線性模型與前饋神經(jīng)網(wǎng)絡(luò)模型的實(shí)現(xiàn)。 ? 1.2 實(shí)驗(yàn)內(nèi)容及要求 請(qǐng)基于mindspore和pytorch平

    2023年04月22日
    瀏覽(26)
  • 復(fù)現(xiàn)圖神經(jīng)網(wǎng)絡(luò)(GNN)論文的過(guò)程以及PyTorch與TensorFlow對(duì)比學(xué)習(xí)

    復(fù)現(xiàn)圖神經(jīng)網(wǎng)絡(luò)(GNN)論文的過(guò)程通常包括以下幾個(gè)步驟: 一、理解論文內(nèi)容:首先徹底理解論文,包括其理論基礎(chǔ)、模型架構(gòu)、使用的數(shù)據(jù)集、實(shí)驗(yàn)設(shè)置和得到的結(jié)果。 二、獲取或準(zhǔn)備數(shù)據(jù)集:根據(jù)論文中描述的實(shí)驗(yàn),獲取相應(yīng)的數(shù)據(jù)集。如果論文中使用的是公開(kāi)數(shù)據(jù)集

    2024年01月20日
    瀏覽(22)
  • A.圖機(jī)器學(xué)習(xí)(GML)&圖神經(jīng)網(wǎng)絡(luò)(GNN)原理和代碼實(shí)現(xiàn)(前置學(xué)習(xí)系列二)

    A.圖機(jī)器學(xué)習(xí)(GML)&圖神經(jīng)網(wǎng)絡(luò)(GNN)原理和代碼實(shí)現(xiàn)(前置學(xué)習(xí)系列二)

    圖學(xué)習(xí)圖神經(jīng)網(wǎng)絡(luò)算法專欄簡(jiǎn)介:主要實(shí)現(xiàn)圖游走模型(DeepWalk、node2vec);圖神經(jīng)網(wǎng)絡(luò)算法(GCN、GAT、GraphSage),部分進(jìn)階 GNN 模型(UniMP標(biāo)簽傳播、ERNIESage)模型算法等,完成項(xiàng)目實(shí)戰(zhàn) 專欄鏈接 :圖學(xué)習(xí)圖神經(jīng)網(wǎng)絡(luò)算法專欄簡(jiǎn)介:含圖算法(圖游走模型、圖神經(jīng)網(wǎng)絡(luò)算法等)原

    2024年02月01日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包