padding操作是給圖像外圍加像素點。
為了實際說明操作過程,這里我們使用一張實際的圖片來做一下處理。
這張圖片是大小是(256,256),使用pad來給它加上一個黑色的邊框。具體代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import
torch.nn,functional as F
import
torch
from
PIL
import
Image
im
=
Image.
open
(
"heibai.jpg"
,
'r'
)
X
=
torch.Tensor(np.asarray(im))
print
(
"shape:"
,X.shape)
dim
=
(
10
,
10
,
10
,
10
)
X
=
F.pad(X,dim,
"constant"
,value
=
0
)
padX
=
X.data.numpy()
padim
=
Image.fromarray(padX)
padim
=
padim.convert(
"RGB"
)
#這里必須轉為RGB不然會
padim.save(
"padded.jpg"
,
"jpeg"
)
padim.show()
print
(
"shape:"
,padX.shape)
|
輸出:
1
2
|
shape: torch.Size([
256
,
256
])
shape: (
276
,
276
)
|
可以看出給原圖四個方向給加上10維度的0,維度變為256+10+10得到的圖像如下:
再舉幾個簡單例子:
1
2
3
4
5
6
7
8
9
10
11
12
|
x
=
np.asarray([[[
1
,
2
],[
1
,
2
]]])
X
=
torch.Tensor(x)
print
(X.shape)
pad_dims
=
(
2
,
2
,
2
,
2
,
1
,
1
,
)
X
=
F.pad(X,pad_dims,
"constant"
)
print
(X.shape)
print
(X)
|
輸出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
torch.Size([
1
,
2
,
2
])
torch.Size([
3
,
6
,
6
])
tensor([[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]],
[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
1.
,
2.
,
0.
,
0.
],
[
0.
,
0.
,
1.
,
2.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]],
[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]]])
|
可以知若pad_dims為(2,2,2,2,1,1)則原維度變化是2+2+2=6,1+1+1=3.也就是第一個(2,2) pad的是最后一個維度,第二個(2,2) pad是倒數第二個維度,第三個(1,1) pad是第一個維度。
再舉一個四維度的,但是只pad三個維度:
1
2
3
4
5
6
7
8
9
10
11
12
|
x
=
np.asarray([[[[
1
,
2
],[
1
,
2
]]]])
X
=
torch.Tensor(x)
#(1,2,2)
print
(X.shape)
pad_dims
=
(
2
,
2
,
2
,
2
,
1
,
1
,
)
X
=
F.pad(X,pad_dims,
"constant"
)
#(1,1,12,12)
print
(X.shape)
print
(X)
|
輸出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
torch.Size([
1
,
1
,
2
,
2
])
torch.Size([
1
,
3
,
6
,
6
])
tensor([[[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]],
[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
1.
,
2.
,
0.
,
0.
],
[
0.
,
0.
,
1.
,
2.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]],
[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]]]])
|
再舉一個四維度的,pad四個維度:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
x
=
np.asarray([[[[
1
,
2
],[
1
,
2
]]]])
X
=
torch.Tensor(x)
#(1,2,2)
print
(X.shape)
pad_dims
=
(
2
,
2
,
2
,
2
,
1
,
1
,
2
,
2
)
X
=
F.pad(X,pad_dims,
"constant"
)
#(1,1,12,12)
print
(X.shape)
print
(X)
|
輸出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
torch.Size([
1
,
1
,
2
,
2
])
torch.Size([
5
,
3
,
6
,
6
])
tensor([[[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]],
[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]],
[[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
],
[
0.
,
0.
,
0.
,
0.
,
0.
,
0.
]]],
|