头歌工程实训答案-机器学习篇之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)

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: K-means是一种常见的聚类算法,它可以将数据集分成K个簇,每个簇都包含最接近其质心的数据点。该算法通过迭代计算来优化簇的质心,并将数据点分配到最近的簇中。K-means算法在数据挖掘、图像处理、自然语言处理等领域得到广泛应用。 ### 回答2: K-means聚类是机器学习中一种常见的无监督学习算法。它是一种基于距离度量的聚类算法,可以将一组数据划分为多个不同的类别。在聚类中,我们希望将相似的样本归为一类,而将不相似的样本归为不同的类别。 K-means聚类算法的主要步骤如下: 1. 初始化: 首先,需要确定分类的数目k。然后,随机选取k个点作为初始聚类中心。 2. 分类: 将所有样本点分配到最近的聚类中心。 3. 重新计算聚类中心: 对每个聚类计算聚类中心。 4. 重复步骤2,3,直到聚类中心不再发生变化或达到预设的迭代次数。 K-means的优点在于其算法简单而快速。然而,它的缺点也很明显,如对聚类数目的事先确定需要依赖于先验知识或者经验。同时,K-means还存在局部极小值的问题,即每次初始化不同可能导致聚类结果不同。为了解决这些问题,K-均值聚类算法的变种已经被提出。 总之,k-means是机器学习中非常重要并且广泛应用的一个算法。它可以在数据挖掘,图像处理,自然语言处理等领域中发挥重要的作用。因此,学习和掌握K-means算法是非常重要的。 ### 回答3: K-means是一种聚类分析算法,是机器学习中常见的算法之一,主要用于数据的分类和聚类。它的主要思想是将数据集分为多个非重叠的簇,每个簇内的数据点与该簇内所有数据点的平均值最接近。 在K-means算法中,首先需要确定簇的数量,然后通过随机选择簇中心点进行初始化,将数据点分配给最近的簇,然后计算每个簇内数据点的中心,并将这些中心作为新的簇中心点,不断迭代直到簇中心点不再变化或达到预定的迭代次数。 K-means的优点在于简单易懂,计算速度快,在处理大量数据时效果良好。它可以用于图像分析、文本分类、生物学聚类等任务中,因此被广泛应用于各种领域。 然而,K-means也有其缺点,比如对于非凸样本集合表现不佳,它需要事先知道聚类个数,且对于初始值的依赖较强,可能会陷入局部最优解。因此,在使用K-means算法时,需要多次运行并评估结果,在实践中需要进行一定的算法优化,以提高算法的效率和准确性。 总的来说,K-means作为机器学习领域中最经典和常用的聚类算法,具有其自身的优缺点和应用场景,对于学习机器学习算法的初学者以及应用相关领域的专业人士来说,均有着重要的研究价值和应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值