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

Pytorch+PyG實(shí)現(xiàn)EdgeCNN過(guò)程示例詳解

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

1.EdgeCNN簡(jiǎn)介

EdgeCNN是一種用于圖像點(diǎn)云處理的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)模型。與傳統(tǒng)的CNN僅能處理圖片二維數(shù)據(jù)不同,EdgeCNN可以對(duì)三維點(diǎn)云中每個(gè)點(diǎn)周圍的局部鄰域進(jìn)行操作,并適用于物體識(shí)別、深度估計(jì)、自動(dòng)駕駛等多項(xiàng)任務(wù)。

2. 實(shí)現(xiàn)步驟

2.1 數(shù)據(jù)準(zhǔn)備

在本實(shí)驗(yàn)中,我們使用了一個(gè)包含4萬(wàn)個(gè)點(diǎn)云的數(shù)據(jù)集ModelNet10,作為示例。與其它標(biāo)準(zhǔn)圖像數(shù)據(jù)集不同的是,這個(gè)數(shù)據(jù)集中圖形的構(gòu)成量非常大,而且各圖之間結(jié)構(gòu)差異很大,因此需要進(jìn)行大量的預(yù)處理工作。

# 導(dǎo)入模型數(shù)據(jù)集
from torch_geometric.datasets import ModelNet
# 加載ModelNet數(shù)據(jù)集
dataset = ModelNet(root='./modelnet', name='10')
data = dataset[0]
# 定義超級(jí)參數(shù)
num_points = 1024
batch_size = 32
train_dataset_size = 8000
# 將數(shù)據(jù)集分割成訓(xùn)練、驗(yàn)證及測(cè)試三個(gè)數(shù)據(jù)集
train_dataset = data[0:train_dataset_size]
val_dataset = data[train_dataset_size: 9000]
test_dataset = data[9000:]
# 定義數(shù)據(jù)加載批處理器
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

通過(guò)上述代碼,我們先是導(dǎo)入ModelNet數(shù)據(jù)集并將其分割成訓(xùn)練、驗(yàn)證及測(cè)試三個(gè)數(shù)據(jù)集,并創(chuàng)建了數(shù)據(jù)加載批處理器,以便于在訓(xùn)練過(guò)程中對(duì)這些數(shù)據(jù)進(jìn)行有效的處理。

2.2 實(shí)現(xiàn)模型

在定義EdgeCNN模型時(shí),我們需要根據(jù)圖像點(diǎn)云經(jīng)常使用的架構(gòu)定義網(wǎng)絡(luò)結(jié)構(gòu)。同時(shí),在實(shí)現(xiàn)卷積操作時(shí)應(yīng)引入相應(yīng)的鄰域信息,來(lái)使得網(wǎng)絡(luò)能夠?qū)W習(xí)到系統(tǒng)中附近點(diǎn)之間的關(guān)系。

from torch.nn import Sequential as Seq, Linear as Lin, ReLU
from torch_geometric.nn import EdgeConv, global_max_pool
class EdgeCNN(torch.nn.Module):
    def __init__(self, dataset):
        super(EdgeCNN, self).__init__()
        # 定義基礎(chǔ)參數(shù)
        self.input_dim = dataset.num_features
        self.output_dim = dataset.num_classes
        self.num_points = num_points
        # 定義模型結(jié)構(gòu)
        self.conv1 = EdgeConv(Seq(Lin(self.input_dim, 32), ReLU()))
        self.conv2 = EdgeConv(Seq(Lin(32, 64), ReLU()))
        self.conv3 = EdgeConv(Seq(Lin(64, 128), ReLU()))
        self.conv4 = EdgeConv(Seq(Lin(128, 256), ReLU()))
        self.fc1 = torch.nn.Linear(256, 1024)
        self.fc2 = torch.nn.Linear(1024, self.output_dim)
    def forward(self, pos, batch):
        # 構(gòu)造圖
        edge_index = radius_graph(pos, r=0.6, batch=batch, loop=False)
        # 第一層CNN模型的卷積 + 池化處理
        x = F.relu(self.conv1(x=pos, edge_index=edge_index))
        x = global_max_pool(x, batch)
        # 第二層CNN模型的卷積 + 池化處理
        edge_index = radius_graph(x, r=0.9, batch=batch, loop=False)
        x = F.relu(self.conv2(x=x, edge_index=edge_index))
        x = global_max_pool(x, batch)
        # 第三層CNN模型的卷積 + 池化處理
        edge_index = radius_graph(x, r=1.2, batch=batch, loop=False)
        x = F.relu(self.conv3(x=x, edge_index=edge_index))
        x = global_max_pool(x, batch)
        # 第四層CNN模型的卷積 + 池化處理
        edge_index = radius_graph(x, r=1.5, batch=batch, loop=False)
        x = F.relu(self.conv4(x=x, edge_index=edge_index))
        # 定義全連接網(wǎng)絡(luò)
        x = global_max_pool(x, batch)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return F.log_softmax(x, dim=-1)

在上述代碼中,實(shí)現(xiàn)了基于EdgeCNN的模型的各個(gè)卷積層和全連接層,并使用radius_graph等函數(shù)將局部區(qū)域問(wèn)題歸約到定義的卷積核檢測(cè)范圍之內(nèi),以便更好地對(duì)點(diǎn)進(jìn)行分析和特征提取。最后結(jié)合全連接層輸出一個(gè)維度為類別數(shù)的向量,并通過(guò)softmax函數(shù)來(lái)計(jì)算損失。

2.3 模型訓(xùn)練

在定義好EdgeCNN網(wǎng)絡(luò)結(jié)構(gòu)之后,我們還需要指定合適的優(yōu)化器、損失函數(shù),并控制訓(xùn)練輪數(shù)、批大小與學(xué)習(xí)率等超參數(shù)。同時(shí)也需要記錄大量日志信息,方便后期跟蹤及管理。

# 定義訓(xùn)練計(jì)劃,包括損失函數(shù)、優(yōu)化器及迭代次數(shù)等
train_epochs = 50
learning_rate = 0.01
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(edge_cnn.parameters(), lr=learning_rate)
losses_per_epoch = []
accuracies_per_epoch = []
for epoch in range(train_epochs):
    running_loss = 0.0
    running_corrects = 0.0
    count = 0.0
    for samples in train_loader:
        optimizer.zero_grad()
        pos, batch, label = samples.pos, samples.batch, samples.y.to(torch.long)
        out = edge_cnn(pos, batch)
        loss = criterion(out, label)
        loss.backward()
        optimizer.step()
        running_loss += loss.item() / len(train_dataset)
        running_corrects += torch.sum(torch.argmax(out, dim=1) == label).item() / len(train_dataset)
        count += 1
    losses_per_epoch.append(running_loss)
    accuracies_per_epoch.append(running_corrects)
    if (epoch + 1) % 5 == 0:
        print("Train Epoch {}/{} Loss {:.4f} Accuracy {:.4f}".format(
            epoch + 1, train_epochs, running_loss, running_corrects))

在訓(xùn)練過(guò)程中,我們遍歷每個(gè)batch,通過(guò)反向傳播算法進(jìn)行優(yōu)化,并更新loss及accuracy輸出。同時(shí),為了方便可視化與記錄,需要將訓(xùn)練過(guò)程中的loss和accuracy輸出到相應(yīng)的容器中,以便后期進(jìn)行分析和處理。

以上就是Pytorch+PyG實(shí)現(xiàn)EdgeCNN過(guò)程示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Pytorch PyG實(shí)現(xiàn)EdgeCNN的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python循環(huán)嵌套的多種使用方法解析

    python循環(huán)嵌套的多種使用方法解析

    這篇文章主要介紹了python循環(huán)嵌套的多種使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python 高效編程技巧分享

    Python 高效編程技巧分享

    工作中經(jīng)常要處理各種各樣的數(shù)據(jù),遇到項(xiàng)目趕進(jìn)度的時(shí)候自己寫函數(shù)容易浪費(fèi)時(shí)間。Python 中有很多內(nèi)置函數(shù)幫你提高工作效率。
    2020-09-09
  • 有關(guān)pycharm登錄github時(shí)有的時(shí)候會(huì)報(bào)錯(cuò)connection reset的問(wèn)題

    有關(guān)pycharm登錄github時(shí)有的時(shí)候會(huì)報(bào)錯(cuò)connection reset的問(wèn)題

    這篇文章主要介紹了有關(guān)pycharm登錄github時(shí)有的時(shí)候會(huì)報(bào)錯(cuò)connection reset的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python的Flask框架開發(fā)驗(yàn)證碼登錄的實(shí)現(xiàn)

    Python的Flask框架開發(fā)驗(yàn)證碼登錄的實(shí)現(xiàn)

    在本文我們介紹了如何使用Python的Flask框架開發(fā)一個(gè)簡(jiǎn)單的驗(yàn)證碼登錄功能,將涵蓋生成驗(yàn)證碼、處理用戶輸入、驗(yàn)證驗(yàn)證碼以及實(shí)現(xiàn)安全的用戶認(rèn)證等方面,感興趣的可以了解一下
    2023-11-11
  • Python計(jì)算機(jī)視覺SIFT尺度不變的圖像特征變換

    Python計(jì)算機(jī)視覺SIFT尺度不變的圖像特征變換

    這篇文章主要為大家介紹了Python計(jì)算機(jī)視覺SIFT尺度不變的圖像特征變換,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • pandas多級(jí)分組實(shí)現(xiàn)排序的方法

    pandas多級(jí)分組實(shí)現(xiàn)排序的方法

    下面小編就為大家分享一篇pandas多級(jí)分組實(shí)現(xiàn)排序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python繪圖實(shí)現(xiàn)顯示中文

    Python繪圖實(shí)現(xiàn)顯示中文

    今天小編就為大家分享一篇Python繪圖實(shí)現(xiàn)顯示中文,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python實(shí)現(xiàn)輕松防止屏幕截圖的技巧分享

    Python實(shí)現(xiàn)輕松防止屏幕截圖的技巧分享

    屏幕截圖是一種常見的用于記錄信息或者監(jiān)控用戶活動(dòng)的方法,為了保護(hù)隱私和數(shù)據(jù)安全,可以通過(guò)使用Python編寫一些防護(hù)措施來(lái)防止他人截取我們的屏幕,下面我們就來(lái)學(xué)習(xí)一下有哪些具體操作吧
    2023-12-12
  • Matlab中如何實(shí)現(xiàn)將長(zhǎng)字符串換行寫

    Matlab中如何實(shí)現(xiàn)將長(zhǎng)字符串換行寫

    這篇文章主要介紹了Matlab中如何實(shí)現(xiàn)將長(zhǎng)字符串換行寫問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python常用斷言函數(shù)實(shí)例匯總

    Python常用斷言函數(shù)實(shí)例匯總

    這篇文章主要介紹了Python常用斷言函數(shù)實(shí)例匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論

新邵县| 黄山市| 利川市| 福建省| 行唐县| 鱼台县| 耒阳市| 夏河县| 无极县| 如皋市| 新郑市| 钦州市| 应城市| 广饶县| 颍上县| 集安市| 乌审旗| 琼中| 裕民县| 麻江县| 昌都县| 潮州市| 黄山市| 呼伦贝尔市| 武定县| 武宣县| 灵丘县| 陇西县| 洞口县| 汾西县| 广宁县| 海城市| 中卫市| 景德镇市| 伊吾县| 内丘县| 沂源县| 三河市| 东安县| 漾濞| 平邑县|