深度学习中卷积与池化代码实现

深度学习网络中基本操作代码实现

1 卷积操作

代码实现卷积操作

import torch
import torch.nn as nn
def MyCon2D(X,K):
    h,w=K.shape
    Y=torch.zeros((X.shape[0]-h+1,X.shape[1]-w+1)) #定义输出的大小
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
           Y [i, j] = (X[i: i + h, j: j + w] * K).sum()​X=torch.tensor([[0,1,2],[3,4,5],[6,7,8]])
    return Y
#构造图中的运算
X=torch.tensor([[0,1,2],[3,4,5],[6,7,8]])
K=torch.tensor([[0,1],[2,3]])
print(X)
print(K)
MyCon2D(X,K)

tensor([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])
tensor([[0, 1],
        [2, 3]])





tensor([[19., 25.],
        [37., 43.]])

池化操作

池化一般分为最大值池化和平均池化,类似于卷积操作却有不同于卷积操作

def Mypool(X,pool_size,mode=''):
    X=X.float()
    p_h,p_w=pool_size
    Y=torch.zeros(X.shape[0]-p_h+1,X.shape[1]-p_w+1)
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            if mode=='max':
                Y [i,j]=X[i:i+p_h,j:j+p_w].max()
            elif mode=='avg':
                Y [i,j]=X[i:i+p_h,j:j+p_w].mean()
    return Y

Mypool(X,(2,2),mode='max')   #最大值池化

tensor([[4., 5.],
        [7., 8.]])
Mypool(X,(2,2),mode='avg')   #平均池化
tensor([[2., 3.],
        [5., 6.]])

动手学深度学习


版权声明:本文为Brandon_Hoo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。