算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。

news/2024/7/7 18:37:42/文章来源:https://www.cnblogs.com/suanfajin/p/18282771

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」

抱个拳,送个礼

读者参加面试,竟然在 LeNet 这个基础算法上被吊打~

LeNet 确实经典,值得好好说道说道

更多内容,见微*公号往期文章:有史以来最详细的卷积神经网络(CNN)及其变体讲解!!!(多图)

1. LeNet 的背景和发展

LeNet 是由 Yann LeCun 等人在 1989 年提出的一种卷积神经网络(CNN)结构,用于手写数字识别。LeNet 引入了许多在现代深度学习中广泛使用的概念和技术,是计算机视觉领域的重要里程碑之一。通过模拟人脑视觉皮层的工作方式,LeNet 成功提升了机器处理图像数据的能力,奠定了深度学习在图像识别任务中的基础。

深度学习三巨头

2. LeNet 的基本结构

整体架构 LeNet 的整体架构包括多个卷积层和池化层,最后通过全连接层输出结果。它的典型结构如下:

  • 输入层:接受 32x32 像素的灰度图像
  • 卷积层 C1:6 个 5x5 的卷积核,输出 6 个 28x28 的特征图
  • 池化层 S2:2x2 的平均池化,输出 6 个 14x14 的特征图
  • 卷积层 C3:16 个 5x5 的卷积核,输出 16 个 10x10 的特征图
  • 池化层 S4:2x2 的平均池化,输出 16 个 5x5 的特征图
  • 卷积层 C5:120 个 5x5 的卷积核,输出 120 个 1x1 的特征图
  • 全连接层 F6:84 个神经元
  • 输出层:10 个神经元,对应 10 个类别

各层功能

  • 卷积层:通过卷积运算提取图像的局部特征,并生成特征图
  • 池化层:通过下采样减小特征图的尺寸,减少计算量,并在一定程度上防止过拟合
  • 全连接层:将特征图展平并进行分类,输出最终结果

这种层次化的结构设计使得 LeNet 能够有效地处理图像数据,并在手写数字识别任务中取得了优异的表现。

LeNet

3. 卷积层

卷积层的作用 卷积层是 LeNet 中最核心的部分,其主要作用是通过卷积运算提取图像的局部特征。卷积运算可以看作是图像和卷积核(滤波器)之间的点积操作,这样可以检测出图像中的特定模式,如边缘、角点等。

卷积核 卷积核是一个小尺寸的权重矩阵,通常为 3x3 或 5x5。卷积核在图像上滑动(卷积),生成特征图。每个卷积核可以提取图像的一种特征。

卷积层的实现 在 LeNet 中,第一个卷积层(C1)使用 6 个 5x5 的卷积核,将输入图像转化为 6 个 28x28 的特征图。第二个卷积层(C3)使用 16 个 5x5 的卷积核,将池化后的特征图转化为 16 个 10x10 的特征图。最后一个卷积层(C5)使用 120 个 5x5 的卷积核,将特征图进一步压缩为 120 个 1x1 的特征图。

通过这些卷积层,LeNet 能够逐层提取图像的高级特征,为后续的分类任务奠定基础。

防失联,进免费知识星球,直达算法金 AI 实验室 https://t.zsxq.com/ckSu3

4. 池化层

池化层的作用 池化层(也称为下采样层或子采样层)的主要作用是通过降低特征图的分辨率来减少计算量,同时保留关键信息。池化层还能增强模型的鲁棒性,减少过拟合。

池化操作 池化操作可以有多种形式,常见的包括平均池化和最大池化。在 LeNet 中,使用的是平均池化。平均池化通过对特征图的局部区域(如 2x2)的像素值进行平均,从而生成下采样后的特征图。

池化层的实现 在 LeNet 中,池化层紧跟在每个卷积层之后:

  • 池化层 S2:对卷积层 C1 的 6 个 28x28 特征图进行 2x2 的平均池化,生成 6 个 14x14 的特征图
  • 池化层 S4:对卷积层 C3 的 16 个 10x10 特征图进行 2x2 的平均池化,生成 16 个 5x5 的特征图

通过池化层,LeNet 大幅减少了特征图的尺寸和计算量,同时保留了重要的特征信息,为后续的卷积和全连接层提供了更紧凑的特征表示。

5. 激活函数

激活函数的作用 激活函数引入非线性,使得神经网络可以表示更复杂的函数,从而增强模型的表达能力。如果没有激活函数,无论网络多么深,每一层的输出都只是输入的线性变换,最终网络的表达能力会受到限制。

LeNet 中的激活函数 在 LeNet 中,使用的是 Sigmoid 激活函数。Sigmoid 函数将输入值映射到 (0, 1) 之间,使得输出具有概率解释。

Sigmoid 函数的定义如下:

激活函数的计算 在每个卷积层和全连接层之后,都应用激活函数:

  • 在卷积层 C1 和 C3 之后,使用 Sigmoid 激活函数,将卷积操作的结果映射到 (0, 1) 之间
  • 在全连接层 F6 之后,使用 Sigmoid 激活函数,对输出进行非线性变换

激活函数的重要性 激活函数在神经网络中非常重要,它引入的非线性特性,使得网络能够学习和表达复杂的模式和特征。尽管现代神经网络中更常用 ReLU 激活函数,但在 LeNet 中,Sigmoid 激活函数同样起到了至关重要的作用。

6. 全连接层

全连接层的作用 全连接层(Fully Connected Layer, FC)是神经网络中将前一层所有的输入连接到每个神经元的一层。这一层主要用于将卷积和池化层提取的特征进行综合,并输出分类结果。

LeNet 中的全连接层 在 LeNet 中,全连接层位于卷积层和池化层之后,承担着将高层次特征映射到输出类别的任务。具体包括以下两层:

  • 全连接层 F6:这一层包含 84 个神经元。它接收来自上一层(C5 卷积层)的 120 个 1x1 特征图,将其展平为 120 个输入,并通过全连接操作输出 84 个特征。
  • 输出层:这一层包含 10 个神经元,对应手写数字识别任务中的 10 个类别(数字 0-9)。通过 Softmax 函数,将每个输出神经元的值转换为概率,表示输入图像属于每个类别的可能性。

全连接层的重要性 全连接层通过综合卷积和池化层提取的特征,完成最终的分类任务。尽管卷积和池化层主要用于特征提取,但全连接层将这些特征转化为分类结果,是整个神经网络模型不可或缺的一部分。

在 LeNet 的设计中,全连接层不仅实现了高效的特征综合,还通过使用 Sigmoid 激活函数引入了非线性特性,使得模型能够更好地适应复杂的模式和特征。

抱个拳,送个礼

点击 ↑ 领取

防失联,进免费知识星球,直达算法金 AI 实验室 https://t.zsxq.com/ckSu3

7. LeNet 的训练过程

训练数据 LeNet 的训练通常使用手写数字数据集,如 MNIST 数据集。该数据集包含 60,000 张训练图像和 10,000 张测试图像,每张图像是 28x28 像素的灰度图。

前向传播 在前向传播过程中,输入图像经过每一层的卷积、池化和激活函数运算,最终通过全连接层输出分类结果。前向传播的主要目标是计算每个样本的预测值。

损失函数 为了评估模型的预测性能,LeNet 使用交叉熵损失函数(Cross-Entropy Loss)来计算预测值与真实标签之间的差异。交叉熵损失函数的定义如下:

反向传播 反向传播(Backpropagation)是训练神经网络的关键步骤。在反向传播过程中,通过链式法则计算损失函数相对于每个参数的梯度,并使用梯度下降法(Gradient Descent)更新模型参数。梯度下降法的更新规则如下:

优化技术 为了加速训练过程和提高模型的性能,LeNet 使用了一些优化技术,如随机梯度下降(SGD),批量归一化(Batch Normalization)等。这些技术有助于提高模型的收敛速度和稳定性。

训练过程

  1. 初始化模型参数
  2. 输入训练数据,进行前向传播,计算预测值
  3. 计算损失函数
  4. 进行反向传播,计算梯度并更新参数
  5. 重复步骤 2-4,直到损失函数收敛或达到预设的训练轮次

通过上述训练过程,LeNet 能够从训练数据中学习到有效的特征表示,并在手写数字识别任务中取得优异的性能。

8. LeNet 的应用案例

手写数字识别 LeNet 最初被设计用于手写数字识别,特别是在 MNIST 数据集上。MNIST 数据集包含 0-9 的手写数字图像,LeNet 在该数据集上取得了超过 99% 的识别准确率。这个结果展示了卷积神经网络在图像处理任务中的强大能力。下面是一个详细的 LeNet 实现代码演示,涵盖整个过程,包括数据加载、模型定义、训练和评估

1. 输入:加载和预处理数据

import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np# 定义数据预处理
transform = transforms.Compose([transforms.Resize((32, 32)),  # 将图像调整为 32x32transforms.ToTensor(),  # 转换为张量transforms.Normalize((0.1307,), (0.3081,))  # 标准化
])# 加载训练数据
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)# 加载测试数据
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=1000, shuffle=False)# 展示部分输入数据
dataiter = iter(trainloader)

2. LeNet 的基本结构和各层实现

import torch.nn as nn
import torch.nn.functional as Fclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()self.conv1 = nn.Conv2d(1, 6, kernel_size=5)  # 输入通道为 1,输出通道为 6,卷积核大小为 5x5self.pool = nn.AvgPool2d(kernel_size=2, stride=2)  # 平均池化,窗口大小为 2x2,步幅为 2self.conv2 = nn.Conv2d(6, 16, kernel_size=5)  # 输入通道为 6,输出通道为 16,卷积核大小为 5x5self.conv3 = nn.Conv2d(16, 120, kernel_size=5)  # 输入通道为 16,输出通道为 120,卷积核大小为 5x5self.fc1 = nn.Linear(120, 84)  # 输入为 120,输出为 84self.fc2 = nn.Linear(84, 10)  # 输入为 84,输出为 10(对应 10 个类别)def forward(self, x):x = self.pool(F.sigmoid(self.conv1(x)))  # 卷积 -> 激活 -> 池化x = self.pool(F.sigmoid(self.conv2(x)))  # 卷积 -> 激活 -> 池化x = F.sigmoid(self.conv3(x))  # 卷积 -> 激活x = x.view(-1, 120)  # 展平为一维向量x = F.sigmoid(self.fc1(x))  # 全连接层 -> 激活x = self.fc2(x)  # 全连接层return x# 实例化模型
net = LeNet()

3. 训练过程

import torch.optim as optimcriterion = nn.CrossEntropyLoss()  # 交叉熵损失函数
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)  # 随机梯度下降优化器# 训练模型
for epoch in range(10):  # 训练 10 个 epochrunning_loss = 0.0for i, data in enumerate(trainloader, 0):inputs, labels = dataoptimizer.zero_grad()  # 梯度清零outputs = net(inputs)  # 前向传播loss = criterion(outputs, labels)  # 计算损失loss.backward()  # 反向传播optimizer.step()  # 优化running_loss += loss.item()if i % 100 == 99:  # 每 100 个 mini-batch 打印一次print(f'[Epoch {epoch + 1}, Batch {i + 1}] loss: {running_loss / 100:.3f}')running_loss = 0.0print('Finished Training')
[Epoch 1, Batch 100] loss: 2.313
[Epoch 1, Batch 200] loss: 2.311
[Epoch 1, Batch 300] loss: 2.309
[Epoch 1, Batch 400] loss: 2.308
...
[Epoch 10, Batch 400] loss: 0.304
[Epoch 10, Batch 500] loss: 0.268
[Epoch 10, Batch 600] loss: 0.286
[Epoch 10, Batch 700] loss: 0.281
[Epoch 10, Batch 800] loss: 0.257
[Epoch 10, Batch 900] loss: 0.269
Finished Training

4. 评估模型

correct = 0
total = 0# 不计算梯度
with torch.no_grad():for data in testloader:images, labels = dataoutputs = net(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f'Accuracy of the network on the 10000 test images: {100 * correct / total:.2f}%')

Accuracy of the network on the 10000 test images: 92.75%

5. 结果展示

展示输入图像和预测结果

import matplotlib.pyplot as plt
import numpy as np# 从测试集中获取一些图像
dataiter = iter(testloader)
images, labels = dataiter.next()# 展示图像的函数
def imshow(img):img = img / 2 + 0.5  # 反标准化npimg = img.numpy()plt.imshow(np.transpose(npimg, (1, 2, 0)))plt.show()# 打印图像
imshow(torchvision.utils.make_grid(images))# 打印真实标签
print('GroundTruth: ', ' '.join('%5s' % labels[j].item() for j in range(8)))# 打印预测标签
outputs = net(images)
_, predicted = torch.max(outputs, 1)
print('Predicted: ', ' '.join('%5s' % predicted[j].item() for j in range(8)))

展示中间层输出

我们可以通过提取中间层的输出,来直观地观察数据在各层的变化。

def visualize_layer(layer, data):layer_output = layer(data)layer_output = layer_output.detach().numpy()fig, axes = plt.subplots(1, len(layer_output[0]), figsize=(12, 12))for i, ax in enumerate(axes):ax.imshow(layer_output[0][i], cmap='gray')ax.axis('off')plt.show()# 展示卷积层 C1 的输出
dataiter = iter(testloader)
images, labels = dataiter.next()
visualize_layer(net.conv1, images)# 展示卷积层 C2 的输出
pool1_output = net.pool(F.sigmoid(net.conv1(images)))
visualize_layer(net.conv2, pool1_output)# 展示卷积层 C3 的输出
pool2_output = net.pool(F.sigmoid(net.conv2(pool1_output)))
visualize_layer(net.conv3, pool2_output)

抱个拳,送个礼

点击 ↑ 领取

防失联,进免费知识星球,直达算法金 AI 实验室 https://t.zsxq.com/ckSu3

9. LeNet 的局限性

局限性 尽管 LeNet 在图像识别任务中表现出色,但它也存在一些局限性:

  • 网络深度有限:LeNet 的层数较少,参数量相对较小,这限制了它对复杂任务的表现
  • 激活函数的选择:LeNet 使用 Sigmoid 激活函数,容易导致梯度消失问题,特别是在深层网络中
  • 池化操作:使用平均池化而非最大池化,可能会丢失一些重要的特征信息
  • 计算资源限制:LeNet 设计于计算资源有限的年代,其架构未能充分利用现代 GPU 的计算能力

改进方向 针对这些局限性,研究者们提出了许多改进方案:

  • 增加网络深度:通过增加卷积层和全连接层的数量,提升网络的特征提取能力
  • 使用 ReLU 激活函数:相比于 Sigmoid,ReLU 减少了梯度消失问题,并加速了模型训练
  • 引入最大池化:最大池化可以保留更多的重要特征信息,提高模型的识别能力
  • 利用现代计算资源:设计更复杂的模型架构,充分利用现代 GPU 的计算能力,如 VGG、ResNet 等

这些改进方向不仅提高了 LeNet 的性能,还为后续深度学习模型的发展提供了宝贵的经验。

10. LeNet 的创新点

创新之处 LeNet 作为早期的卷积神经网络,具有以下几大创新点:

  • 卷积操作:通过局部感受野和权重共享,有效减少了参数数量,提高了计算效率
  • 层次结构:采用多层卷积和池化的层次结构,使得网络能够逐层提取图像的高层次特征
  • 端到端训练:从输入图像到输出分类结果,整个过程可以通过反向传播进行端到端训练
  • 引入池化层:通过池化操作降低特征图的分辨率,减少计算量,并在一定程度上防止过拟合

影响 LeNet 的这些创新对后续算法的发展产生了深远的影响:

  • 卷积神经网络(CNN)的普及:LeNet 的成功验证了 CNN 在图像处理任务中的有效性,促使更多研究者投入到 CNN 的研究中
  • 现代深度学习模型:许多现代深度学习模型,如 AlexNet、VGG、ResNet 等,都在 LeNet 的基础上进行了改进和扩展
  • 应用领域的拓展:LeNet 的思想不仅应用于手写数字识别,还被广泛应用于图像分类、目标检测、图像分割等多个领域

这些创新和影响,使得 LeNet 成为深度学习发展史上的一个重要里程碑。

11. 实践中的 LeNet

操作和实现细节 在实践中,实现 LeNet 需要注意以下几点:

  • 数据预处理:对输入图像进行标准化处理,确保数据分布的一致性,有助于模型的训练和收敛
  • 模型初始化:使用合适的权重初始化方法,如 Xavier 初始化,可以加速模型训练
  • 批量训练:通过小批量(mini-batch)训练,提高模型的训练效率和稳定性
  • 学习率调整:根据训练过程中损失函数的变化,动态调整学习率,有助于模型更快地收敛

技巧和经验 在实际操作中,可以通过以下技巧提高 LeNet 的性能:

  • 数据增强:通过数据增强技术(如随机裁剪、旋转、翻转等),增加训练数据的多样性,提高模型的泛化能力
  • 正则化技术:使用 L2 正则化、Dropout 等技术,防止模型过拟合
  • 提前停止:在训练过程中监控验证集的表现,当验证误差不再下降时提前停止训练,防止过拟合

通过这些实践操作和技巧,大侠们可以更好地实现和优化 LeNet 模型,从而在实际应用中取得更好的效果。

[ 抱个拳,总个结 ]

LeNet 是卷积神经网络(CNN)领域的开创性工作之一。其通过引入卷积层和池化层的层次结构,实现了有效的特征提取和分类任务。尽管 LeNet 的结构较为简单,但它的创新点和实践经验对后续深度学习模型的发展产生了深远影响。在实践中,通过数据预处理、模型初始化、批量训练和学习率调整等操作,以及数据增强、正则化技术和提前停止等技巧,可以有效提升 LeNet 的性能。LeNet 的局限性和改进方向也为我们提供了宝贵的研究和应用经验,为现代深度学习的发展奠定了坚实基础。

希望这篇文章能帮助大侠更好地理解和应用 LeNet,为进一步研究和探索深度学习技术提供参考。

更多内容,见微*公号往期文章:有史以来最详细的卷积神经网络(CNN)及其变体讲解!!!(多图)

- 科研为国分忧,创新与民造福 -

日更时间紧任务急,难免有疏漏之处,还请大侠海涵 内容仅供学习交流之用,部分素材来自网络,侵联删

[ 算法金,碎碎念 ]

最近给某 985 大学同学讲算法,专门挑经典的比较源头的讲

经典的往往比较久远,现在用得不多(用改进版)

但思想 [钻石恒久远,一颗永流传]这样的内容如果做成一个专门的专栏专门用于算法入门,你会需要吗?会为此付费吗?期待你的反馈

全网同名,日更万日,让更多人享受智能乐趣

如果觉得内容有价值,烦请大侠多多 分享、在看、点赞,助力算法金又猛又持久、很黄很 BL 的日更下去;

同时邀请大侠 关注、星标 算法金,围观日更万日,助你功力大增、笑傲江湖

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

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

相关文章

[大疆航线] 系列(3) 无人机多角度航线规划软件μMAPLE

关键词:无人机航线、航点动作,航线软件 作者:ludwig1860 日期:2024.7.3 1. 多角度航线规划软件μMAPLE的编写 我们研究团队编写了一个名为μMAPLE (uav-based Multi-Angular flight PLannEr)的多角度航线规划软件。当然,我们也很乐意协助研究人员们开发符合各自需求的航线…

Windows Terminal 中设置常用命令的别名

Windows Terminal 中设置常用命令的别名 ‍ E:\zhpj\Desktop>cmd /? 启动 Windows 命令解释器的一个新实例 . . . 如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找 以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或 两个都存在,这两个变量会先被执行。HKE…

ssrf结合python反序列化

存储session对象时 当然不能直接存储对象 需要转换成有规律的字符串 这一过程就涉及到了序列化 将对象转换成字符串这一过程称之为序列化 PYTHON反序列化漏洞 本文中就涉及到了pickle这一序列化模块导致的反序列化漏洞 在反序列化结束时 会触发__reduce__魔术方法 类似于php中的…

Web基础知识扫盲

1、中间件 定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。常见的中间件:IIS、Apache、Nginx、Tomcat 2、NAT网络地址转换 这里只介绍动态转换一种 动态转换…

MySQL-16.MVCC(多版本并发控制)

C-16.多版本并发控制 1.什么是MVCCMVCC(Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一事务更…

[JLU] 数据结构与算法上机题解思路分享-课程设计第一次与第二次上机

这是吉林等通知大学数据结构与算法上机题的题解思路,没有精妙的解法,只是一个记录罢前言 首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。 这里只是思路解析的博客,代码仓库在 JLU_Data_Structures_Record 希望你能在这里找到你想要…

【Python】GUI开发笔记

一、环境搭建: 1、Pycharm开发工具pycharm历史版本 https://www.jetbrains.com/pycharm/download/other.html破解插件 https://blog.csdn.net/weixin_50737119/article/details/135628513 2、PYENV 版本管理 Python也有对应的版本管理工具,叫pyenv 这个东西挺奇怪的,直接发…

Day1| 704. 二分查找 27. 移除元素

704.二分查找 题目链接 : https://leetcode.cn/problems/binary-search/description/ 思路😗*切记二分查找要基于排序好的数组或者数据,否则二分查找必不能使用!!!!!!!!! ** 双指针写最简单,一个头指针从0开始,一个尾指针从数组长度-1开始,中间指针是头+尾/2,每次比较头尾中间…

不同操作系统下的换行符

1. 关键字 2. 换行符的比较 3. ASCII码 4. 修改换行符4.1. VSCode5. 参考文档1. 关键字 CR LF CRLF 换行符 2. 换行符的比较英文全称 英文缩写 中文含义 转义字符 ASCII码值 操作系统Carriage Return CR 回车 \r 13 MacIntosh(早期的Mac)Linefeed LF 换行/新行 \n 10 Unix/Li…

1s内控制向某个请求请求的次数

背景 有的时候后端提供的接口对相同的IP进行限制,在某个时间内不能发送超过X条的请求,一旦超过指定的请求数会导致后续请求接口会出现异常。 效果需求 比如:在1s内最多同时发送2个请求,多出来的请求在后续的1s或者后续的Ns中发起 代码 <template><div class="…

电脑hold escape key to prevent startlsback怎么处理?

电脑出现hold escape key to prevent StartlsBack from,一般遇到这种问题之后,一直按住ESC键就没有了。但是还需彻底的解决掉这个问题。 首先我们按下“ctrl +alt +del”组合键打开任务管理器,左上角“运行新任务”,输入“control”并确定,就可以打开控制面板,查看方式为…

7.3日RTOS自学心得

我现在用的单片机主要是裸机系统,轮询系统和前后台系统(中断处理),但是为了以后的职业发展肯定还是要学习下操作系统的,也就是多任务系统FreeRTOS,在看野火的资料【[野火]uCOS-III 内核实现与应用开发实战指南】,学习到了第六章,任务的定义与任务切换的实现。 总结如下…

fisher线性判别分析和多分类问题探究

本文继续来讨论另一种分类模型————fisher线性判别分析 目录一、模型思想二、SPSS的实现1.参数设置(1)定义范围(2) 统计(3)保存与分类2.结果分析(1)典则判别函数系数(2)分类结果(3)分类函数系数(4)保存预测结果四、多分类问题 一、模型思想 我们以二分类问题举例…

[Paper Reading] GAIA-1: A Generative World Model for Autonomous Driving

GAIA-1: A Generative World Model for Autonomous Driving GAIA-1 时间:23.09 机构:Wayve TL;DR 本文介绍一种生成世界模型,该模型利用视频、文本和动作输入来生成逼真的驾驶场景,同时提供对自身车辆行为和场景特征的细粒度控制。 Method模型输入 训练过程输入video/text(…

进度报告1

(1)1.在黑马程序员中找到java的教学网课,初步学习了Java语言的概述以及完成了java的开发环境搭建,成功安装了jdk并且利用命令行窗口顺利验证java和javac是否正常安装并且能使用。2.编写入门代码helloworld代码:public class HelloWorld{ public static void main(String[]…

模拟集成电路设计系列博客——8.4.2 时间-数字转换器

8.4.2 时间-数字转换器 在上一节我们介绍了TDC的一种典型实现,即单延时链TDC,通过\(2^N\)的延迟单元和D触发器可以实现N bit的时间数字转换功能,但这种结构的分辨率受到延迟单元的最小延迟时间限制,即: \[LSB=\tau_{delay}=\frac{T}{2^N} \tag{8.4.10} \]其中\(T\)为TDC的…

聊一聊领域驱动与贫血模型

写在前面 前段时间跟领导讨论技术债概念时不可避免地提到了代码的质量,而影响代码质量的因素向来都不是单一的,诸如项目因素、管理因素、技术选型、人员素质等等,因为是技术债务,自然就从技术角度来分析,单纯从技术角度来看代码质量,其实又细分很多原因,如代码设计、代码…

《智能计算系统》第五章 编程框架原理(上)课程笔记

《智能计算系统》第五章 编程框架原理(上)课程视频链接:https://www.bilibili.com/video/BV1Ei421i7Rg 本文源自于B站国科大计算所 智能计算系统课程官方账号 所公开上传的视频,在原有视频之上,提取了关键帧、将音频转成了文字并进行了校正,以便学习使用。在此,也感谢国…

点云分割网络---Point Transformer V2

PDF: 《Point Transformer V2: Grouped Vector Attention and Partition-based Pooling》 CODE: https://github.com/Gofinge/PointTransformerV2 一、大体内容 前面一篇文章介绍了Point Transformer,这一篇在其基础上进行改进,提出了强大且高效的Point Transformer V2模型,…

【坚果识别】果实识别+图像识别系统+Python+计算机课设+人工智能课设+卷积算法

一、介绍 坚果识别系统,使用Python语言进行开发,通过TensorFlow搭建卷积神经网络算法模型,对10种坚果果实(杏仁, 巴西坚果, 腰果, 椰子, 榛子, 夏威夷果, 山核桃, 松子, 开心果, 核桃)等图片数据集进行训练,得到一个识别精度较高的模型文件,让后使用Django搭建Web网页端…