头歌工程实训答案-机器学习篇之CNN

大学生必看!!!

第1关:conv

import torch

from torch import nn

# 定义二维卷积函数

def corr2d(X, K):  

    h, w = K.shape

    # 输出矩阵Y

    Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))

    ########## begin ##########

    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()

   

    ########## end ##########

    return Y

   

# 输入矩阵X与核矩阵K

X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

K = torch.tensor([[0, 1], [2, 3]])

print(corr2d(X, K))

第2关:pool

import torch

from torch import nn

def pool2d(X, pool_size,mode='max'):

    X = X.float()

    p_h, p_w = pool_size

    Y = torch.zeros(X.shape[0] - p_h + 1, X.shape[1] - p_w + 1)

   

    ########## begin ##########

    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()    

    ########## end ##########

    return Y

   

X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

print(pool2d(X, (2, 2)))

第3关:stride

import torch

import torch.nn as nn

X = torch.arange(16, dtype=torch.float).view((1, 1, 4, 4))

print("原矩阵为:")

print(X)

########## Begin ##########

pool2d = torch.nn.MaxPool2d(3, stride=1)

########## End ##########

print("最大池化后的矩阵为:")

print(pool2d(X))


第4关:kernel_size

import torch

import torch.nn as nn

########## Begin ##########

conv3_3 = nn.Conv2d(3, 16, 3)

print(conv3_3.kernel_size)

conv5_5 = nn.Conv2d(3, 16, 5)

print(conv5_5.kernel_size)

conv7_7 = nn.Conv2d(3, 16, 7)

print(conv7_7.kernel_size)

conv9_9 = nn.Conv2d(3, 16, 9)

print(conv9_9.kernel_size)

conv11_11 = nn.Conv2d(3, 16, 11)

print(conv11_11.kernel_size)

########## End ##########

第5关:padding

import torch

import torch.nn as nn

########## Begin ##########

conv2d = nn.Conv2d(32, 128, kernel_size=5, stride=2, padding=1)

maxpool2d = nn.MaxPool2d(3, stride=1, padding=2)

########## Begin ##########

print(conv2d)

print(maxpool2d)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值