分类实战——以AlexNet为例的代码详解
分类实战——以AlexNet为例的代码详解12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091from torchvision import modelsimport torchimport torch.nn as nn# 定义一个自定义的神经网络模型类,继承自 nn.Moduleclass myModel(nn.Module): def __init__(self, num_cls): super(myModel, self).__init__() # 调用父类的构造函数 # 定义第一个卷积层 # 输入通道数为3(RGB图像),输出通道数为64,卷积核大小为11x11,步长为4,padding为2 self.conv1 = nn.C ...
初识神经网络的分类问题
初识神经网络的分类问题在接触分类问题之前,我们先学过了回归问题
回归问题是找一个神秘的函数关系,来匹配并预测每个数据点的位置
而分类问题是要寻找到一个方法,将数据集划分为若干类,每个类中都有神秘的共性,我们要找的模型就是区分他们的方法
以图片分类为例,我们给电脑投喂一组照片,里面有[猫,狗,树],但我们知道,机器学习的输出是数学形式,所以我们要使用One-hot独热编码来表示模型输出的结果
类似于计组中的指令编码方法,每一类表达不同的种类的概率,在上述例子中,每位分别表示图片为狗、猫、树的概率
简述训练流程的各种问题
输入一幅图片(图片天生就是矩阵),模型对矩阵进行预测,然后输出各个分类的概率,在对概率进行处理,最后得到分类的结果
如何理解图片作为输入源
所有颜色都可以通过RGB三维色彩坐标来表示,所以所有图片可以拆解为红绿蓝三层
对于不同中的像素点,对于该层的颜色来说,又有不同的灰度,这时的灰度值就作为这个该层中此像素点的值
但是在上次学的回归中,输入的都是一维张量,对于矩阵来说,我们同样可以将他们转换为一维的,只需要将每层的矩阵拉平,再将不同层拼接即可
训练模型的时候, ...
回归实战:预测新冠感染人数
回归实战:预测新冠感染人数先回顾下回归是个啥玩意
首先需要一组训练集,说人话就是通过一系列x[x1,x2…xn]通过神秘计算得到y的过程,当然人和机器现在都不知道什么计算是什么,这是一个黑箱。
黑箱比喻:把模型想象成自动售货机,投币(输入特征x)→ 内部神秘机制(模型计算)→ 吐出饮料(预测值y^)。
核心任务:通过不断调整内部零件(参数w),让售货机吐出的饮料尽可能接近真实需求(真实值y)。
然后我们先随机的选定一系列参数,然后把参数和x带入神秘公式,计算出预测值y^
将y^与实际的y进行计算,得到误差loss,预测y^与实际y相聚越远,loss显然越大,所以我们可以通过loss来评价一个模型的好坏
光知道这模型不准还没用,我们需要让预测值越来越接近,具体来说,就要使用梯度下降来将误差反馈给参数w
for example:
w = w - d(loss)/d(w) * lr
在这循环往复的过程中,实现了机器的自主学习(额额。。参数不调好,也会越学越垃圾的,就像人学新知识也常常伴随踩雷和反复)
训练过程
随机初始化:给售货机随便装一堆零件(随 ...
神经网络代码入门解析
import torchimport matplotlib.pyplot as plt
import random
def create_data(w, b, data_num): # 数据生成 x = torch.normal(0, 1, (data_num, len(w))) y = torch.matmul(x, w) + b # 矩阵相乘再加b
noise = torch.normal(0, 0.01, y.shape) # 为y添加噪声
y += noise
return x, y
num = 500
true_w = torch.tensor([8.1, 2, 2, 4])true_b = 1.1
X, Y = create_data(true_w, true_b, num)
plt.scatter(X[:, 3], Y, 1) # 画散点图 对X取全部的行的第三列,标签Y,点大小plt.show()def data_provider(data, label, batchsize): # 每次取batchsize个数据 length = len ...
一个普通学生的(365>>1)天跋涉_研途小记
一个普通学生的(365>>1)天跋涉_研途小记距离考研结束已经有一段时间了,成绩也已公布,回望这半年多的备考时光,我觉得有必要记录下这段旅程。无论结果如何,这段经历本身就是一笔宝贵的财富。
2024 年 6 月,我经历了一轮求职,但结果并不尽如人意。这让我重新审视自己的未来规划,也促使我坚定了考研的决心。既然要做,就全力以赴。从那时起,我开始了“两点一线”的生活——白天图书馆,晚上寝室,朝八晚十,持续到考研结束。这半年是挑战,也是蜕变。
这段考研的日子,我开始慢慢改变。曾经沉迷社交软件的我,开始践行”吸引力法则”:把刷短视频的15分钟换成背10个考研词汇,把焦虑内耗的深夜变成整理408考点的仪式。当自习室常坐的桌子逐渐聚起研友,我们默契地形成了”占座互助小组”,共同对抗臭脚各和眼罩姐,偶尔抬头看见周围伏案的背影,恍惚间竟觉得连空气都流动着向上的力量~
最珍贵的收获,是那些在自习时结识的陌生人。隔壁桌二战学长分享的408笔记,现在还静静躺在我的文档里。图书馆考前清场大家互相祝福的场景,让我突然读懂罗素说的”参差多态才是幸福本源”——原来追光的路上,我们早已成为彼此的光。
这些 ...
力扣刷题: 142.环形链表II
[力扣刷题] 142.环形链表II给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。
示例 1:
123输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
123输入:head = [1,2], pos = 0输出:返回索引为 0 的链表节点解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
123输入:head = [1], pos = -1输出:返回 null解释:链表中没有环。
提示:
链表中节点的数目范围在范围 [0, 104] 内
-105 <= Node.val <= 105
pos 的 ...