当前位置:网站首页>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]
边栏推荐
- Gbase database helps the development of digital finance in the Bay Area
- Haut OJ 1245: large factorial of CDs --- high precision factorial
- Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade
- Use of room database
- Yolov5 adds attention mechanism
- Warning using room database: schema export directory is not provided to the annotation processor so we cannot export
- 剑指 Offer 53 - I. 在排序数组中查找数字 I
- A problem and solution of recording QT memory leakage
- Sword finger offer 06 Print linked list from beginning to end
- Sword finger offer 04 Search in two-dimensional array
猜你喜欢

Remote upgrade afraid of cutting beard? Explain FOTA safety upgrade in detail

Fried chicken nuggets and fifa22

个人开发的渗透测试工具Satania v1.2更新

浅谈JVM(面试常考)

Sword finger offer 05 Replace spaces

lxml. etree. XMLSyntaxError: Opening and ending tag mismatch: meta line 6 and head, line 8, column 8

用STM32点个灯

sync. Interpretation of mutex source code

Yolov5 adds attention mechanism

2017 USP Try-outs C. Coprimes
随机推荐
Sword finger offer 58 - ii Rotate string left
【Jailhouse 文章】Jailhouse Hypervisor
[sum of two numbers] 169 sum of two numbers II - enter an ordered array
剑指 Offer 53 - II. 0~n-1中缺失的数字
Hang wait lock vs spin lock (where both are used)
To the distance we have been looking for -- film review of "flying house journey"
Codeforces Round #716 (Div. 2) D. Cut and Stick
Yolov5 ajouter un mécanisme d'attention
Using HashMap to realize simple cache
剑指 Offer 09. 用两个栈实现队列
使用Electron开发桌面应用
Alu logic operation unit
Educational codeforces round 109 (rated for Div. 2) C. robot collisions D. armchairs
Sword finger offer 05 Replace spaces
EOJ 2021.10 E. XOR tree
【实战技能】如何做好技术培训?
Add level control and logger level control of Solon logging plug-in
Cluster script of data warehouse project
[to be continued] [UE4 notes] L1 create and configure items
YOLOv5-Shufflenetv2