import torch
# 定義輸入、輸出通道
in_channels, out_channels =5,
10# 定義影象尺寸
width, height =
100,
100# 定義卷積核的大小,下式表示大小為3*3的正方形,同時,卷積核的通道數與輸入影象的通道數一致,均為5
kernel_size =
3# 定義一次輸入影象的數量
batch_size =
1input
= torch.randn(batch_size,
in_channels,
width,
height)
# out_channels 決定了卷積核的數量, 即一共有10個3*3*5的卷積核
conv_layer = torch.nn.conv2d(in_channels,
out_channels,
kernel_size=kernel_size)
output = conv_layer(
input
)print
(input
.shape)
print
(output.shape)
print
(conv_layer.weight.shape)
torch.size([1, 5, 100, 100])
torch.size([1, 10, 98, 98])
torch.size([10, 5, 3, 3])
有時,我們希望獲得與原影象相同大小的卷積後的影象,這時需要屬性padding,預設為0
conv_layer_with_padding = torch.nn.conv2d(in_channels,
out_channels,
padding=1,
kernel_size = kernel_size)
output_with_padding = conv_layer_with_padding(
input
)print
(output_with_padding.shape)
torch.size([1, 10, 100, 100])
還有時,我們希望再次降低網路的大小,以降低運算量。此時引入卷積核移動步長stride的概念,預設為1
conv_layer_with_stride = torch.nn.conv2d(in_channels,
out_channels,
stride=2,
kernel_size=kernel_size)
output_with_stride = conv_layer_with_stride(
input
)print
(output_with_stride.shape)
torch.size([1, 10, 49, 49])
下取樣與卷積無本質區別,不同的在於目的。下取樣的目的是將資料維度再次減少。
最常用的下取樣手段是max pooling 最大池化。
input=[
3,4,
6,5,
2,4,
6,8,
1,6,
7,8,
9,7,
4,6,
]input
= torch.tensor(
input
).view(1,
1,4,
4)maxpooling_layer = torch.nn.maxpool2d(kernel_size=2)
# 注意,我們將kernel_size設為2,此時stride預設也為2
output = maxpooling_layer(
input
)print
(output)
tensor([[[[4., 8.],
[9., 8.]]]])
卷積神經網路網路篇
深度學習演算法有多種多樣化的模型組成,這是由於神經網路在構建乙個完整的端到端的模型時所提供的靈活性。1.定義 通過建立人工模型來由人類執行的視覺任務。其本質是人類的感知與觀察是乙個過程,它可在人工系統中被理解和實現。2.計算機視覺任務的主要型別 1 物體識別 分類 在物體識別中,給出一張原始影象,你...
卷積神經網路基礎
卷積神經網路出現的意義 計算機視覺問題中,輸入的往往畫素都很高。例如,一張普通的畫素為1000 1000,那麼輸入x的維數就是1000 1000 3,w 1 就是乙個3,000,000列的矩陣。在神經網路中引數如此多的情況下,找到足夠多的資料來保證不發生overfitting是很難的。卷積神經網路就...
卷積神經網路 基礎
啟用函式 常用的啟用函式有sigmoid tanh relu等等,前兩者sigmoid tanh比較常見於全連線層,後者relu常見於卷積層。在卷積神經網路中,啟用函式一般用relu the rectified linear unit,修正線性單元 收斂快,求梯度簡單。計max 0,t 就是如果這個...