当前位置:   article > 正文

卷积神经网络(PyTorch)_pytorch 卷积

pytorch 卷积

卷积

卷积在pytorch中有两种方式,一种是torch.nn.Conv2d(),一种是torch.nn.functional.conv2d()

这两种形式的卷积对于输入的要求是一样的,首先需要输入一个torch.autograd.Variable()的类型,大小是(batch,channel,H,W),其中batch是输入的一批数据的数目,第二个是通道数,一般彩色图是3,灰度图是1,而卷积网络过程中的通道数比较大,会出现几十到几百的通道数,H和w是输入图片的高度和宽度,比如一个batch是32的图片,每张图片是3通道,高和宽是50和100,那么输入的大小就是(32,3,50,100)。

PyTorch中有函数torch.nn.Conv2d来实现卷积。

  1. torch.nn.Conv2d(
  2. in_channels, #输入的通道数
  3. out_channels, #输出的通道数
  4. kernel_size, #卷积核大小
  5. stride=1, #卷积核移动步长
  6. padding=0, #补0的多少
  7. dilation=1, #kernel间距
  8. groups=1, #卷积核个数
  9. bias=True
  10. )

例如:

定义一个能够检测边缘的卷积核

  1. #使用nn.Conv2d
  2. conv1 = nn.Conv2d(1,1,3,bias=False) #定义卷积
  3. sobel_kernel = np.array([-1,-1,-1],[-1,8,-1],[-1,-1,-1],dtype='float32') #定义轮廓检测算子
  4. sobel_kernel = sobel_kernel.reshape((1,1,3,3)) #重新设置成卷积网络需要的格式,输入输出1,长宽3
  5. conv1.weight.data = torch.from_numpy(sobel_kernel) #给卷积核赋值
  6. #将检测边缘的kernel作用到图片上
  7. edge = conv(Variable(img)) #注意图片转化Variabl

举例两种卷积方式:

  1. import numpy as np
  2. import torch
  3. from torch import nn
  4. from torch.autograd import Variable
  5. import torch.nn.functional as F
  6. from PIL import Image
  7. import matplotlib.pyplot as plt
  8. %matplotlib inline
  1. im = Image.open('./cat.png').convert('L') #读入一张灰度图的图片
  2. im = np.array(im,dtype='float32') #将其转换为一个矩阵
  1. #可视化图片
  2. plt.imshow(im.astype('uint8'),cmap='gray')
  1. #将图片转化为pyorch tensor,并适配卷积输入的要求
  2. im = torch.from_numpy(im.reshape((1,1,im.shape[0],im.shape[1])))

下面定义一个算子对其进行轮廓检测

  1. #使用nn.Conv2d
  2. conv1 = n.Conv2d(1,1,3,bias=False) #定义卷积
  3. sobel_kernel = np.array([-1,-1,-1],[-1,8,-1],[-1,-1,-1],dtype='float32') #定义轮廓检测算子
  4. #定义轮廓检测算子
  5. sobel_kernel = sobel_kernel.reshape((1,1,3,3)) #重新设置成卷积网络需要的格式ÿ
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/194075
推荐阅读
相关标签
  

闽ICP备14008679号