之前用 keras 用習慣了
要用 pytorch 訓練時後就卡住了
找一下發現在 pytorch 中 使用 3D Global average pooling 要自定義層出來
import torch
import torch.nn as nn
# 創建一個虛擬的三維特徵圖,假設大小為 (batch_size, channels, depth, height, width)
input_data = torch.randn(1, 512, 4, 4, 4) # 假設特徵圖大小為 4x4x4,通道數為 512
# 定義 3D 全局平均池化
class GlobalAvgPool3d(nn.Module):
def __init__(self):
super(GlobalAvgPool3d, self).__init__()
def forward(self, x):
# 在特徵圖的空間尺寸上執行平均池化
return torch.mean(x, dim=(2, 3, 4)) # 在深度、高度和寬度上進行平均池化
# 創建 GlobalAvgPool3d 實例
global_avg_pool = GlobalAvgPool3d()
# 將輸入數據通過全局平均池化層
output_data = global_avg_pool(input_data)
# 輸出數據的形狀
print(output_data.shape) # torch.Size([1, 512])
在 keras 中就有現成的
keras.layers.GlobalAveragePooling3D(data_format=None, keepdims=False, **kwargs)雖然 pytorch 好像比較紅
但是 keras 確實比較方便用
而 3D Global average pooling 通常在哪邊使用呢?
通常在分類模型使用
因為特徵出來後可能是好幾維的陣列
但是要做分類之前要降維才好
而 Global average 就是直接針對通道降維

留言板
歡迎留下建議與分享!希望一起交流!感恩!