pytorch线性回归(pytorch反卷积)
Conv2D基本原理与相关函数
常见的图像卷积是二维卷积,而深度学习中Conv2D卷积是三维卷积,图示如下:
Pytroch中的Conv2D是构建卷积神经网络常用的函数,支持的输入数据是四维的张量对象,格式为NCHW,其中普通表示样本数目、丙表示通道数目彩色图像为3,灰度图像为1、氢跟W分别表示图像高与宽。它们的计算方法可以图示如下:
Conv2D在pytorch中有两个相关的应用程序接口函数,分别如下:
torch.nn.Conv2d(
in_channels,//输入通道数
out_channels,//输出通道数
kernel_size,//卷积核大小
stride=1,//步长
填充=0,//填充
膨胀=1,//空洞卷积支持
groups=1,//分组卷积支持
偏差=真,//偏置
padding _ mode=' zero '//填0
)
torch.nn.functional.conv2d(
输入,//输入数据
重量,//卷积核
偏差=无,//偏置
stride=1,//步长
填充=0,//填充
膨胀=1,//空洞
组=1/分组
)其中torch.nn.Conv2d主要是在各种组合的时序中使用,构建美国有线电视新闻网模型torch.nn.functional.conv2d更多是在各种自定义中使用,需要明确指出输入与权重过滤参数。
Pytorch图像卷积处理
下面的代码演示如何使用torch.nn.functional.conv2d实现图像的模糊、梯度、拉普拉斯等常见的图像卷积处理,代码实现与运行演示分别如下:图像模糊(左侧为原图):
图像梯度(左侧为原图):
图像拉普拉斯(左侧为原图):
边缘提取(左侧为原图):
皮托奇也可以像OpenCV一样随意完成各种常规的图像卷积功能了!上面几个演示的源码如下所示:
进口火炬
进口火炬。nn。功能as f
importcv2ascv
importnumpayasnp
defimage_blur():
图像=cv。imread(' d :/images/1024。巴布亚新几内亚,cv .IMREAD _ GRADE)
h,w=图像。形状
打印(高、低)
cv.imshow('输入,图像)
img=NP。resform(图像,(1,1,h,w))
img=np.float32(img)
k=火炬。one((1,1,7,7),dtype=torch.float)/49.0
z=f . conv 2d(火炬。from _ numpy(img),k,padding=3)
结果=z.numpy()
打印(结果。形状)
结果=NP。resform(结果,(h,w))
简历。imshow(')模糊,np.uint8(结果))
cv.waitKey(0)
cv.destroyAllWindows()
defimage_gradient():
图像=cv。imread(' d :/images/1024。巴布亚新几内亚,cv .IMREAD _ GRADE)
h,w=图像。形状
打印(高、低)
cv.imshow('输入,图像)
img=NP。resform(图像,(1,1,h,w))
img=np.float32(img)
k=torch.tensor([-1,-2,-1,0,0,0,1,2,2],dtype=torch.float)
k=k.view(1,1,3,3)
打印(k.size(),k)
z=f . conv 2d(火炬。from _ numpy(img),k,padding=1)
结果=z.numpy()
打印(结果。形状)
结果=NP。resform(结果,(h,w))
简历归一化(结果,结果,0,1.0,cv .NORM _ MINMAX)
简历。imshow(' gradient ',np.uint8(结果*255))
cv.waitKey(0)
cv.destroyAllWindows()
defimage_laplian():
图像=cv。imread(' d :/images/1024。巴布亚新几内亚,cv .IMREAD _ GRADE)
h,w=图像。形状
打印(高、低)
cv.imshow('输入,图像)
img=NP。resform(图像,(1,1,h,w))
img=np.float32(img)
k=torch.tensor([-1,-1,-1,-1,8,-1,-1,-1,-1],dtype=torch.float)
k=k.view(1,1,3,3)
打印(k.size(),k)
z=f . conv 2d(火炬。from _ numpy(img),k,padding=1)
结果=z.numpy()
打印(结果。形状)
结果=NP。resform(结果,(h,w))
简历归一化(结果,结果,0,1.0,cv .NORM _ MINMAX)
cv.imshow('重塑,np.uint8(结果*255))
cv.waitKey(0)
cv.destroyAllWindows()
defimage_edge():
图像=cv。imread(' d :/images/1024。巴布亚新几内亚,cv .IMREAD _ GRADE)
h,w=图像。形状
打印(高、低)
cv.imshow('输入,图像)
img=NP。resform(图像,(1,1,h,w))
img=np.float32(img)
k=torch.tensor([-1,0,0,1],dtype=torch.float)
k=k.view(1,1,2,2)
打印(k.size(),k)
z=f . conv 2d(火炬。from _ numpy(img),k,padding=0)
结果=z.numpy()
打印(结果。形状)
结果=NP。resform(结果(h-1,w-1))
cv.imshow('重塑,np.uint8(abs(结果)))
cv.waitKey(0)
cv.destroyAllWindows()
if__name__=='__main__':
image_edge()