def corr2d_multi_in(X, K): # 首先沿着X和K的第0维(通道维)遍历。然后使用*将结果列表变成add_n函数的位置参数 # (positional argument)来进行相加 # # [d2l.corr2d(x, k) for x, k in zip(X, K)] # [0] # [[19. 25.] # [37. 43.]] # [1] # [[37. 47.] # [67. 77.]] # [0] + [1] = # 56 72 # 104 120 return nd.add_n(*[d2l.corr2d(x, k) for x, k in zip(X, K)])
def corr2d_multi_in(X, K): # 多输入通道 return mx.nd.add_n(*[d2l.corr2d(x, k) for x, k in zip(X, K)])
def corr2d_multi_in(X, K): # ⾸先沿着X和K的第0维(通道维)遍历。然后使⽤*将结果列表变成add_n函数的位置参数 # ( positional argument)来进⾏相加 return nd.add_n(*[d2l.corr2d(x, k) for x, k in zip(X, K)])
def corr2d_multi_in(X, K): #首先沿着X,K的通道维遍历 return nd.add_n(*[d2l.corr2d(x,k) for x,k in zip(X,K)])
def corr2d_multi_in(X, K): return nd.add_n(*[d2l.corr2d(x, k) for x, k in zip(X, K)])
def corr2d_multi_in(X, K): # 首先沿着X和K的第0维(通道维)遍历。然后使用*将结果列表变成add_n函数的位置参数来进行相加 return nd.add_n(*[d2l.corr2d(x, k) for x, k in zip(X, K)])
from mxnet import autograd, nd from mxnet.gluon import nn import d2lzh as d2l # 计算二维互相关运算 X = nd.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) K = nd.array([[0, 1], [2, 3]]) print(d2l.corr2d(X,K)) # corr2d(X, K) # 物体边缘检测 # 下面我们来看一个卷积层的简单应用:检测图像中物体的边缘,即找到像素变化的位置。首先我们构造一张 6×8 # 的图像(即高和宽分别为6像素和8像素的图像)。它中间4列为黑(0),其余为白(1)。 X = nd.ones((6, 8)) X[:, 2:6] = 0 print(X) # 然后我们构造一个高和宽分别为1和2的卷积核K。当它与输入做互相关运算时,如果横向相邻元素相同,输出为0;否则输出为非0。 K = nd.array([[1, -1]]) Y = d2l.corr2d(X, K) print(Y) # 构造一个输出通道数为1(将在“多输入通道和多输出通道”一节介绍通道),核数组形状是(1, 2)的二 # 维卷积层 conv2d = nn.Conv2D(1, kernel_size=(1, 2)) conv2d.initialize()
def corr2d_multi_in(X, K): # *对应位置相加配合add_n zip获取地址每一次取数据和对应的kernel return nd.add_n(*[d2l.corr2d(x, k) for x, k in zip(X, K)])