我是靠谱客的博主 怕孤单大侠,这篇文章主要介绍一个简单的卷积神经网络,现在分享给大家,希望可以做个参考。

一、图像成像原理

区域经过透镜,形成了一个锥型区域,该光线被光敏电阻所感知。多个光敏电阻并列即可呈现图像。一个光敏电阻一个像素,如下就可形成2像素的图片。

对彩色图像而言,需对传感器器件进行改进,如绿色、红色、蓝色的传感器合成一组,最终像素值来自于三种不同的光敏器件。

二、卷积

 单通道进行卷积

 

多通道进行卷积,以3通道为例

 

 

 

卷积核的输入通道数、输出通道数、宽度和高度,确定了一个卷积核。

其中:输出通道数:等于卷积核的个数;输入通过数:等于上一层的通道数。

 

代码示例:

import torch
in_chanels,outchuaels=
5,10
width,height=100,100
kernel_size=3
batch_size=1
#batch1 小批量第几个,输入通道为5,宽和高为100*100的图片
input=torch.randn(batch_size,in_chanels,width,height)
conv_layer=torch.nn.Conv2d(in_chanels,outchuaels,
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])

1为样本数量,卷积核:输出通道为10,输入通道为5,大小为3*3

三、padding

外围按0进行填充

 

代码实现:

复制代码
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
input=[3,4,6,5,7,        2,4,6,8,2,        1,6,7,8,4,        9,7,4,6,2,        3,7,5,4,1] #转化成(B,C,W,H),批量维度,通道,宽,高 input=torch.Tensor(input).view(1,1,5,5) conv_layer=torch.nn.Conv2d(1,1,kernel_size=3,padding=1,bias=False) kennel=torch.Tensor([1,2,3,4,5,6,7,8,9]).view(1,1,3,3) conv_layer.weight.data=kennel.data output=conv_layer(input) print(output)

四、最大池化层

 

  • 一个简单的卷积神经网络

 

复制代码
1
样本数量、通道数、宽度、高度确立了一个卷积层。
复制代码
1
(batch,20,4,4)展开为1为一行,进行变换得到10*1的结果。
复制代码
1
利用卷积神经网络做手写数字的识别:

 

复制代码
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import torch from torchvision import transforms from torchvision import datasets from torch.utils.data import  DataLoader import torch.nn.functional as F import torch.optim as optim batch_size=64 #利用transforms 转换为tensor 类型的图片, transform =transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,),(0.3081,))                                ]) train_dataset=datasets.MNIST(root='../data/mnist',train=True,download=True,transform=transform) train_loader= DataLoader(train_dataset,shuffle=True,batch_size=batch_size) test_dataset=datasets.MNIST(root='../data/mnist',train=False,download=True,transform=transform) test_loader=DataLoader(train_dataset,shuffle=False,batch_size=batch_size) class Net(torch.nn.Module):     def __init__(self):         super(Net,self).__init__()         self.conv1=torch.nn.Conv2d(1,10,kernel_size=5)         self.conv2=torch.nn.Conv2d(10,20,kernel_size=5)         self.pooling=torch.nn.MaxPool2d(20)         self.fc=torch.nn.Linear(320,10)     def forward(self,x):         batch_size=x.size(0)         x=F.relu(self.pooling(self.conv1(x)))         x=F.relu(self.pooling(self.conv2(x)))         x=x.view(batch_size,-1#变成全连接网络需要的输入         x=self.fc(x)         return  x model=Net() crierion=torch.nn.CrossEntropyLoss() optimizer=optim.SGD(model.parameters(),lr=0.01,momentum=0.5) def train(epoch):     running_loss=0.0     for batch_idx,data in enumerate(train_loader,0):         inputs,target=data         optimizer.zero_grad()         #forward +backward+update         outputs=model(inputs)         loss=crierion(outputs,target)         loss.backward()         optimizer.step()         running_loss+=loss.item()         if batch_idx%300==299:             print('[%d,%5d] loss:%.3f' %(epoch+1,batch_idx+1,running_loss/300))             running_loss==0.0 def test():     correct=0     total=0     with torch.no_grad():         for data in test_loader:             images,labels=data             outputs=model(images)             _,predicted=torch.max(outputs.data,dim=1)             total+=labels.size(0)             correct+=(predicted==labels).sum().item()     print('Accuacy on test set%d %%'%(100*correct/total)) if __name__=='__main__':     for epoch in range(10):         train(epoch)         test()
复制代码
1

最后

以上就是怕孤单大侠最近收集整理的关于一个简单的卷积神经网络的全部内容,更多相关一个简单内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部