当前位置:网站首页>Convolution neural network -- convolution layer
Convolution neural network -- convolution layer
2022-07-05 05:33:00 【Li Junfeng】
Convolution layer
In convolutional neural networks , The most important thing is convolution layer , It is responsible for extracting feature information from pictures .
First consider the simplest picture , A two-dimensional picture , Then the convolution kernel is also two-dimensional .
Convolution operation
It sounds tall , In fact, it is the sum of products .
for instance :
Suppose the picture is like this
| 1 | 2 | 4 |
|---|---|---|
| 3 | 5 | 4 |
The convolution kernel is
| 6 | 1 |
|---|---|
| 4 | 4 |
Then the result of convolution operation is :
6 × 1 + 1 × 2 + 4 × 3 + 4 × 5 = 40 6 × 2 + 1 × 4 + 4 × 5 + 4 × 4 = 52 6\times 1+1\times 2 + 4\times 3 + 4\times 5 =40 \newline 6\times 2 + 1\times 4 + 4\times 5+4\times 4 =52 6×1+1×2+4×3+4×5=406×2+1×4+4×5+4×4=52
fill
Through the simple example above , It's not hard to find out , After convolution , The size of the matrix changes . This will bring about a serious problem , After continuous convolution , The picture is getting smaller and smaller , So that the convolution operation cannot be carried out in the end .
To solve this problem , We hope that after convolution , The size of the picture does not change , At this time, you need to fill the corresponding value to the edge of the image .
Matrix size
How much to fill the edge of the picture , This is closely related to the size of convolution kernel . So is there a relationship between this size change . The answer is yes .
Might as well set H , W H,W H,W Represents the length and height of the original matrix , O H , O W OH,OW OH,OW Represents the length of the convolution result 、 high , F H , F W FH,FW FH,FW Represents the length of convolution kernel 、 high , P P P Indicates filling , S S S Indicates the stride .
O H = H + 2 ⋅ P − F H S + 1 O W = W + 2 ⋅ P − F W S + 1 OH =\frac{H + 2\cdot P - FH}{S}+1 \newline OW = \frac{W + 2\cdot P - FW}{S}+ 1 OH=SH+2⋅P−FH+1OW=SW+2⋅P−FW+1
Code implementation
The principle of convolution operation is very simple , And the code implementation is also very simple .
Through a few for Loop can easily solve , But there are more efficient ways .
We can change the numbers corresponding to the same convolution kernel in the picture into one line , Change the convolution kernel into a column . Then use Matrix multiplication , Convolution operation can be perfectly realized , And one matrix multiplication can calculate the result of the whole picture .
How to change it into one line , The code is given below .
def im2col(input_data, filter_h, filter_w, stride=1, pad=0):
""" Parameters ---------- input_data : from ( Data volume , passageway , high , Long ) Of 4 Input data made up of dimension array filter_h : The height of the filter filter_w : The length of the filter stride : Stride pad : fill Returns ------- col : 2 Dimension group """
N, C, H, W = input_data.shape
out_h = (H + 2*pad - filter_h)//stride + 1
out_w = (W + 2*pad - filter_w)//stride + 1
img = np.pad(input_data, [(0,0), (0,0), (pad, pad), (pad, pad)], 'constant')
col = np.zeros((N, C, filter_h, filter_w, out_h, out_w))
for y in range(filter_h):
y_max = y + stride*out_h
for x in range(filter_w):
x_max = x + stride*out_w
col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]
col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N*out_h*out_w, -1)
return col
def col2im(col, input_shape, filter_h, filter_w, stride=1, pad=0):
""" Parameters ---------- col : input_shape : The shape of the input data ( example :(10, 1, 28, 28)) filter_h : filter_w stride pad Returns ------- """
N, C, H, W = input_shape
out_h = (H + 2*pad - filter_h)//stride + 1
out_w = (W + 2*pad - filter_w)//stride + 1
col = col.reshape(N, out_h, out_w, C, filter_h, filter_w).transpose(0, 3, 4, 5, 1, 2)
img = np.zeros((N, C, H + 2*pad + stride - 1, W + 2*pad + stride - 1))
for y in range(filter_h):
y_max = y + stride*out_h
for x in range(filter_w):
x_max = x + stride*out_w
img[:, :, y:y_max:stride, x:x_max:stride] += col[:, :, y, x, :, :]
return img[:, :, pad:H + pad, pad:W + pad]
边栏推荐
- [es practice] use the native realm security mode on es
- Haut OJ 1245: large factorial of CDs --- high precision factorial
- Acwing 4301. Truncated sequence
- Pointnet++的改进
- Fried chicken nuggets and fifa22
- 软件测试 -- 0 序
- 每日一题-无重复字符的最长子串
- Sword finger offer 05 Replace spaces
- Web APIs DOM node
- [to be continued] [depth first search] 547 Number of provinces
猜你喜欢

剑指 Offer 06.从头到尾打印链表

Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade

The present is a gift from heaven -- a film review of the journey of the soul

【Jailhouse 文章】Look Mum, no VM Exits

Educational Codeforces Round 116 (Rated for Div. 2) E. Arena

sync. Interpretation of mutex source code

【实战技能】非技术背景经理的技术管理

object serialization

剑指 Offer 05. 替换空格

剑指 Offer 58 - II. 左旋转字符串
随机推荐
Sword finger offer 09 Implementing queues with two stacks
个人开发的渗透测试工具Satania v1.2更新
The number of enclaves
剑指 Offer 09. 用两个栈实现队列
YOLOv5-Shufflenetv2
Palindrome (csp-s-2021-palin) solution
To the distance we have been looking for -- film review of "flying house journey"
CCPC Weihai 2021m eight hundred and ten thousand nine hundred and seventy-five
YOLOv5添加注意力机制
过拟合与正则化
[to be continued] [UE4 notes] L2 interface introduction
Sword finger offer 53 - I. find the number I in the sorted array
Haut OJ 1347: addition of choice -- high progress addition
[merge array] 88 merge two ordered arrays
Haut OJ 1316: sister choice buys candy III
剑指 Offer 06.从头到尾打印链表
Alu logic operation unit
【Jailhouse 文章】Jailhouse Hypervisor
Zzulioj 1673: b: clever characters???
Double pointer Foundation