使用colab仿李沐的卷积神经网络小代码

import torch 
from torch import nn #神经网络模块
from d2l import torch as d2l #(drive into deep learning)class Reshape(torch.nn.Module):def forward(self, x):return x.view(-1, 16*3*3)net = torch.nn.Sequential( #序列化神经网络# 2d卷积层、输入通道数1,输出6,卷积核大小5*5,填充2nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),# 2*2 平均池化层,步幅2nn.AvgPool2d(2, stride=2),nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),nn.AvgPool2d(kernel_size=5, stride=2), nn.Flatten(), #扁平化层Reshape(),#重塑层nn.Linear(16*3*3,120), nn.Sigmoid(),nn.Linear(120,84), nn.Sigmoid(),nn.Linear(84,10))# 随机输入张量X
X = torch.rand(size=(1, 1, 28, 28), dtype=torch.float32)
for layer in net:X = layer(X)# 打印当前层的类名和输出张量的形状print(layer.__class__.__name__, 'output shape: \t', X.shape)

Conv2d output shape: torch.Size([1, 6, 28, 28])

Sigmoid output shape: torch.Size([1, 6, 28, 28])

AvgPool2d output shape: torch.Size([1, 6, 14, 14])

Conv2d output shape: torch.Size([1, 16, 10, 10])

Sigmoid output shape: torch.Size([1, 16, 10, 10])

AvgPool2d output shape: torch.Size([1, 16, 3, 3])

Flatten output shape: torch.Size([1, 144])

Reshape output shape: torch.Size([1, 144])

Linear output shape: torch.Size([1, 120])

Sigmoid output shape: torch.Size([1, 120])

Linear output shape: torch.Size([1, 84])

Sigmoid output shape: torch.Size([1, 84])

Linear output shape: torch.Size([1, 10])

这段代码是一个简单的神经网络模型,用于对手写数字进行分类。让我逐步解释它:

  1. import torch: 导入 PyTorch 库。
  2. from torch import nn: 从 PyTorch 库中导入神经网络模块。
  3. from d2l import torch as d2l: 从 D2L(Dive into Deep Learning)库中导入 PyTorch 版本的模块,并使用别名 d2l
  4. class Reshape(torch.nn.Module): 创建一个名为 Reshape 的类,继承自 torch.nn.Module。这个类用于重塑输入张量的形状。
    • def forward(self, x): 定义了一个前向传播函数,接受输入张量 x,并返回经过重塑后的张量。
  5. net = torch.nn.Sequential(...):创建一个序列化的神经网络模型 net,其中包含了一系列的神经网络层。
    • nn.Conv2d(1, 6, kernel_size=5, padding=2): 添加一个 2D 卷积层,将输入通道数设为 1,输出通道数设为 6,卷积核大小为 5x5,填充为 2。
    • nn.Sigmoid(): 添加一个 Sigmoid 激活函数层。
    • nn.AvgPool2d(2, stride=2): 添加一个 2x2 的平均池化层,步幅为 2。
    • nn.Conv2d(6, 16, kernel_size=5): 添加另一个 2D 卷积层,将输入通道数设为 6,输出通道数设为 16,卷积核大小为 5x5。
    • nn.Sigmoid(): 添加一个 Sigmoid 激活函数层。
    • nn.AvgPool2d(kernel_size=5, stride=2): 添加一个大小为 5x5 的平均池化层,步幅为 2。
    • nn.Flatten(): 添加一个扁平化层,将多维输入张量展平为一维。
    • Reshape(): 添加一个自定义的重塑层,用于将输入重塑为合适的形状。
    • nn.Linear(16*3*3, 120): 添加一个全连接层,将输入特征数设为 16x3x3,输出特征数设为 120。
    • nn.Sigmoid(): 添加一个 Sigmoid 激活函数层。
    • nn.Linear(120, 84): 添加另一个全连接层,输入特征数为 120,输出特征数为 84。
    • nn.Sigmoid(): 添加一个 Sigmoid 激活函数层。
    • nn.Linear(84, 10): 添加最后一个全连接层,输入特征数为 84,输出特征数为 10(对应于10个类别)。
  6. X = torch.rand(size=(1, 1, 28, 28), dtype=torch.float32): 创建一个大小为 1x1x28x28 的随机输入张量 X,用于模型的输入。
  7. for layer in net:: 遍历神经网络模型中的每一层。
    • X = layer(X): 将输入张量 X 输入到当前层,并将输出赋值给 X,以便将其作为下一层的输入。
    • print(layer.__class__.__name__, 'output shape: \t', X.shape): 打印当前层的类名和输出张量的形状。

在上述代码中,通过定义一个神经网络模型,该模型可以接受28x28像素的手写数字图像作为输入,并将其分类为数字0到9中的一个。这是因为该模型的最后一层是一个具有10个输出节点的全连接层,每个节点对应于一个数字类别。

在训练过程中,模型将学习如何从输入图像中提取特征,并通过这些特征对数字进行分类。具体来说,模型的各个层将在训练数据上进行参数优化,以便最小化预测输出与实际标签之间的差距(损失)。通过反向传播算法,模型将根据损失来更新自己的参数,从而逐渐提高对手写数字的分类准确率。

因此,这个模型被设计用于对手写数字进行分类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3+threejs新手从零开发卡牌游戏(七):创建卡组

在开始前先优化下之前的代码: 在之前hand/p1.vue中为了定位 utils文件夹下新建common.ts,将一些公用方法提取出来放在这里: 在game/Cards.ts中,我们调整下卡牌的厚度,由原来的0.02改为0.005,原因是之前的…

【Ucore操作系统】4. 地址空间

文章目录 【 0. 引言 】背景本章任务 【 1. C 中的动态内存分配 】1.1 C语言的内存分配1.2 kalloc 中的动态内存分配 【 2. 地址空间 】2.1 虚拟地址和地址空间2.1.1 地址虚拟化出现之前2.1.2 加一层抽象加强内存管理2.1.3 增加硬件加速虚实地址转换 2.2 分段内存管理2.2.1 等量…

Docker专题-04 Nginx部署

Docker专题-04 Nginx部署 注: 本教程由羞涩梦整理同步发布,本人技术分享站点:blog.hukanfa.com 转发本文请备注原文链接,本文内容整理日期:2024-03-21 csdn 博客名称:五维空间-影子,欢迎关注…

javaSwing扫雷游戏

一、介绍 1.1 背景 在1964年 有一个叫“方 块”的游戏,这是扫雷最原始的版本。后来,这个游戏被改成了另一种游戏,叫做“Rlogic”。在这个游戏中,玩家扮演了一名军队的军人,接受了一项艰难的任务:为指挥中…

24计算机考研调剂 | 中国科学院深圳

中国科学院深圳先进技术研究院(国科大)硕士招收调剂(仅内部调剂) 考研调剂招生信息 中国科学院深圳先进技术研究院集成所神经工程中心刘志远课题组接收2024年中国科学院大学硕士研究生调剂1名,最终录取为全日制专硕 材…

龙芯新世界系统(安同AOCS OS)安装使用HP 1010激光打印机

龙芯新世界系统(安同AOCS OS)安装及切换到Cinnamon桌面系统以后,缺少一个通用的打印机管理配置程序,因此通过以下命令就可以在控制面板中增加打印机配置项: sudo oma install system-config-printer 但是安装完成后&…

家政服务管理平台设计与实现|SpringBoot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,…

【c++】类和对象(三)构造函数和析构函数

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们带来类和对象重要的部分,构造函数和析构函数 目录 1.类的6个默认成员函数2.构造函数2.1构造函数其他特性 3.构析函数3.1特性:…

c语言函数大全(C开头)

c语言函数大全(C开头) There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave quickly. 函数名…

sql——对于行列转换相关的操作

目录 一、lead、lag 函数 二、wm_concat 函数 三、pivot 函数 四、判断函数 遇到需要进行行列转换的数据处理需求,以 oracle 自带的表作为例子复习一下: 一、lead、lag 函数 需要行列转换的表: select deptno,count(empno) emp_num from…

MongoDB 入门简介

什么是 MongoDB? MongoDB 是一个基于分布式文件存储的开源数据库系统。它是一个 NoSQL(Not only SQL,意为不仅仅是SQL)数据库,使用文档(BSON格式,类似于JSON)来存储数据。MongoDB 以…

【工具】DataX 数据同步工具

简介 DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databe…

基于java+springboot+vue实现的图书借阅系统(文末源码+Lw+ppt)23-328

摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套“期待相遇”图书借阅系统,帮助商…

代码随想录训练营第55天 | LeetCode 583. 两个字符串的删除操作、​​​​​​LeetCode 72. 编辑距离、总结

目录 LeetCode 583. 两个字符串的删除操作 文章讲解:代码随想录(programmercarl.com) 视频讲解:LeetCode:583.两个字符串的删除操_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 72. 编辑距离 文章讲解:代码随想录(programm…

哪些行业需要在线制作电子证书系统?

哪些行业需要在线制作电子证书系统? 1、教育机构:学校和培训机构需要为学生和培训者颁发证书,您的系统可以帮助他们快速生成和管理这些证书。 2、企业及政府部门:用于员工培训、资质认证等,提高内部管理效率。 3、专…

小白如何兼职赚得第一桶金?六大网络赚钱方式让你轻松开启副业之旅

小白如何兼职赚得第一桶金?六大网络赚钱方式让你轻松开启副业之旅 无需担忧,以下是一些精心挑选的线上兼职建议,将助你迅速开启赚钱之旅。 1,参与网络调查:各大市场调研公司及品牌商常常需要了解消费者心声&#xff0c…

在JavaScript中垂直过滤

垂直过滤是一种常见的数据处理技术,通过该技术可以筛选出符合特定条件的数据并进行展示。在JavaScript中,我们可以利用数组方法和条件判断语句来实现垂直过滤功能。下面是一个简单的示例,演示如何利用JavaScript实现一个基本的垂直过滤功能。…

06|Java集合框架初学者指南:List、Set与Map的实战训练

Java集合框架是Java语言的核心部分,它提供了丰富的类和接口,用来高效地管理和操作大量数据。这个强大的工具箱包括多种集合类型,其中最为常用的是List、Set和Map。 1.List - 有序且可重复的数据清单 概念: List就像一个购物清单,你可以按照加入顺序存放和检索项目,而且同…

[BT]BUUCTF刷题第7天(3.25)

第7天 Web(共5题) [BJDCTF2020]Easy MD5 打开网站发现只有一个输入框,F12后也没有明显提示,但是在数据包中看到Hint:select * from admin where passwordmd5($pass,true),意思是在admin表中查找password为…

oracle切换ADG后JVM组件查询报错ORA-29516处理

近期,某用户将数据库系统从EXADATA切换到普通X86 LINUX架构服务器上运行时,使用JAVA组件时报错ORA-29516: Aurora assertion failure: Assertion failure at jol.c:11157 joez mt-index botch; mt_index 65535, vtbl_len 12, static_len 2 对于此报错…