任务描述
本关任务:本关的小目标是编写一个实现卷积 *** 作的函数
编程要求
根据提示,在右侧编辑器补充代码,计算输入矩阵在指定卷积核下的输出。
其中,测试输入格式如下:第一行为输入矩阵大小 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
第2关:池化 *** 作
任务描述
本关任务:本关的小目标是编写一个实现池化 *** 作的函数。
编程要求
根据提示,在右侧编辑器的 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 **********#
第3关:dropout与正则化
任务描述
本关任务:编写一个实现按概率进行 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
注:内容只做参考和分享,未经允许不可传播,侵权立删
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)