【头歌】重生之CNN图片分类基础

创作不易,参考之前,点个赞,收藏,关注一下不过分吧,家人们

任务描述

本关任务:本关的小目标是编写一个实现卷积操作的函数

编程要求

根据提示,在右侧编辑器补充代码,计算输入矩阵在指定卷积核下的输出。

其中,测试输入格式如下:第一行为 输入矩阵大小 n ,后 n 行为输入矩阵。

输出格式如下:输入矩阵经过给定卷积核的卷积操作后得到的输出矩阵,为 numpy 的 ndarray 格式。

#根据输入矩阵的大小创建输出的大小
#input:输入矩阵,类型为munpy
#output:全0的输出矩阵,类型为numpy
def generate_dst(srcImg):
    # 请在此添加代码 完成本关任务
    # ********** Begin *********#
    row, col = np.shape(srcImg)
    kr,kc = np.shape(test_kernel)

    dst = np.zeros((row-kr+1,col-kc+1))
    return dst
    # ********** End **********#

调用generate_dst函数,预分配输出,并调用_con_each计算输出矩阵中每个点的值
input:src为输入矩阵,类型为munpy;kernel为卷积核,类型为numpy;k_size为卷积核的维度
output:输出矩阵,类型为numpy
def conv_2d(src, kernel, k_size):
    dst = generate_dst(src)
    for i in range(dst.shape[0]):
        for j in range(dst.shape[1]):
            value = _con_each(src[i:i + k_size, j:j + k_size], kernel)
            dst[i, j] = value
    return dst.astype(int)

供conv_2d调用,计算输出矩阵中每个点的值
input:src为输入矩阵中被卷积的部分,类型为munpy;kernel为卷积核,类型为numpy
output:输入矩阵中被卷积的部分与卷积核的结果
def _con_each(src, kernel):
    pixel_count = kernel.size;
    pixel_sum = 0;
    _src = src.flatten();
    _kernel = kernel.flatten();

    for i in range(pixel_count):
        pixel_sum += _src[i] * _kernel[i];

    return pixel_sum

任务描述

本关任务:本关的小目标是编写一个实现池化操作的函数。

编程要求

根据提示,在右侧编辑器的 begin-end 间补充代码,实现基本的池化操作。

其中,测试输入的第一行为输入矩阵的尺寸 n,后 n 行为输入矩阵。

测试输出为池化后的输出矩阵,为 numpy 的 ndarray 格式。

   # outputMap sizes
    #根据inputMap的大小,poolStride大小算出输出大小,并用np.zeros()进行预分配
    #其中,变量名定义如下:
    # out_row为输出的行数,out_col为输出的列数,outputMap为预分配内存的输出矩阵
    # 请在此添加代码 完成本关任务
    # ********** Begin *********#
    out_row, out_col = int(np.floor(in_row / poolStride)), int(np.floor(in_col / poolStride))
    row_remainder, col_remainder = np.mod(in_row,
poolStride), np.mod(in_col, poolStride)
    if row_remainder != 0:
        out_row += 1
    if col_remainder != 0:
        out_col += 1
    outputMap = np.zeros((out_row, out_col))
    # ********** End **********#

任务描述

本关任务:编写一个实现按概率进行 dropout 的函数。

编程要求

根据提示,在右侧编辑器的 begin-end 间补充代码,实现模拟网络中节点按指定概率进行 dropout。

测试输入的第一行为一个向量,模拟网络中的节点。第二行为被 dropout 的比例。

测试输出为一个向量,模拟被按概率 dropout 后的网络节点。

  # 我们通过binomial函数,生成与x一样的维数向量。binomial函数就像抛硬币一样,我们可以把每个神经元当做抛硬币一样
    # 硬币 正面的概率为p,n表示每个神经元试验的次数
    # 因为我们每个神经元只需要抛一次就可以了所以n=1,size参数是我们有多少个硬币。
    # 生成一个0、1分布的向量,0表示这个神经元被屏蔽,不工作了,也就是dropout了
    # 并屏蔽某些神经元,让它们的值变为0

    # 请在此添加代码 完成本关任务
    # ********** Begin *********#
    sample = np.random.binomial(n=1, p=retain_prob, size=x.shape)
    x *= sample
    # ********** End **********#
    return x

注:内容只做参考和分享,未经允许不可传播,侵权立删

Original: https://blog.csdn.net/weixin_61800684/article/details/124739260
Author: 垮起个老脸
Title: 【头歌】重生之CNN图片分类基础

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/665517/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球