|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 卷积计算与模块\n",
- "前面我们介绍了卷积网络的基本知识,其在计算机视觉领域被应用得非常广泛,那么常见的卷机网络中用到的模块能够使用 pytorch 非常轻松地实现,下面我们来讲一下 pytorch 中的卷积模块"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1. 卷积\n",
- "卷积在 PyTorch 中有两种方式,一种是 `torch.nn.Conv2d()`,一种是 `torch.nn.functional.conv2d()`,这两种形式本质都是使用一个卷积操作。\n",
- "\n",
- "这两种形式的卷积对于输入的要求都是一样的,首先需要输入是一个 `torch.autograd.Variable()` 的类型,大小是 `(batch, channel, H, W)`,其中 `batch` 表示输入的一批数据的数目,第二个是输入的通道数,一般一张彩色的图片是 3,灰度图是 1,而卷积网络过程中的通道数比较大,会出现几十到几百的通道数,`H` 和 `W` 表示输入图片的高度和宽度,比如一个 `batch` 是 32 张图片,每张图片是 3 通道,高和宽分别是 50 和 100,那么输入的大小就是 `(32, 3, 50, 100)`\n",
- "\n",
- "下面举例来说明一下这两种卷积方式"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [],
- "source": [
- "import numpy as np\n",
- "import torch\n",
- "from torch import nn\n",
- "from torch.autograd import Variable\n",
- "import torch.nn.functional as F\n",
- "from PIL import Image\n",
- "import matplotlib.pyplot as plt\n",
- "%matplotlib inline"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [],
- "source": [
- "im = Image.open('./cat.png').convert('L') # 读入一张灰度图的图片\n",
- "im = np.array(im, dtype='float32') # 将其转换为一个矩阵"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
|