【项目实战】CNN手写识别
2024-10-20 13:33:45
由于只需要修改之前基于ANN模型代码的模型设计部分所以篇幅较短,简单的加点注释给自己查看即可
视频链接:https://www.bilibili.com/video/BV1Y7411d7Ys?p=10
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(2) #池化层
self.fc = torch.nn.Linear(320, 10)
def forward(self, x):
# flatten data from (n,1,28,28) to (n, 784)
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) # -1 此处自动算出的是320
x = self.fc(x)
return x
留下来的作业是自己修改卷积层,这是我的代码
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.conv3 = torch.nn.Conv2d(20, 30, kernel_size=2)
self.pooling = torch.nn.MaxPool2d(2)
self.fc1 = torch.nn.Linear(30, 20)
self.fc2 = torch.nn.Linear(20, 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 = F.relu(self.pooling(self.conv3(x)))
x = x.view(batch_size, -1)
x = self.fc1(x)
x = self.fc2(x)
return x
这个作业完成过程让我理解了
self.conv1 = torch.nn.Conv2d(1, 10, kernel_size=5)
这句代码的意思。他的意思是一层变成10层,卷积为5*5,所以在执行完
self.conv3 = torch.nn.Conv2d(20, 30, kernel_size=2)
这一步后,你就要知道,你传入20通道,输出是30通道,卷积层为2x2,这个时候你的通道数量只有30,而图像也变成1x1了(卷积导致),所以你的全连接层只有30往下降维
另外我用CPU和GPU 分别跑了一下这个任务
开头加入了
start = time.time()
程序结尾加入
end = time.time()
print("程序运行时间为:{}".format(end-start))
这样一来就可以看到分别在CPU和GPU的运行时间
CPU:226s GPU:148s
确实GPU快
最新文章
- C#语言各种集合介绍
- java操作office和pdf文件页面列表导出cvs,excel、pdf报表.
- windws 安装jdk
- iOS开发——实用篇Swift篇&;状态栏操作
- android 更新uI主线程
- Delphi中的异常处理(10种异常来源、处理、精确处理)
- iOS中UIWebView使用JS交互 - 机智的新手
- pl/sql oracle
- phpmyadmin修改mysql数据库密码
- Aurora Player 开源啦~~~
- js_9_dom属性
- HTML中的javascript交互
- BZOJ.4212.神牛的养成计划(Trie 可持久化Trie)
- django项目 报错:ImportError: cannot import name choice
- unity3d-游戏实战突出重围,第三天 绘制数字
- wqCms6.0在IIS6的Getshell
- Async:简洁优雅的异步之道
- 云中树莓派(3):通过 AWS IoT 控制树莓派上的 Led
- list对象指针与指针类型list
- [Hook] 跨进程 Binder设计与实现 - 设计篇
热门文章
- SpringCloudGateway微服务网关实战与源码分析 - 中
- idea的使用技巧和必要的设置
- 分享一些小tips
- python jinjia2 高级
- python在执行命令时添加环境变量或指定执行路径
- Canal实时解析mysql binlog数据实战
- Java学习 (八)基础篇 运算符
- Apache DolphinScheduler 1.3.8 发布
- Luogu1527 [国家集训队]矩阵乘法 (整体二分)(Unfinished)
- Luogu2858[USACO06FEB]奶牛零食Treats for the Cows (区间DP)