当前位置: 首页 > news >正文

深度学习之图像回归(一)

前言  

图像回归任务主要是理解一个最简单的深度学习相关项目的结构,整体的思路,数据集的处理,模型的训练过程和优化处理。

  因为深度学习的项目思路是差不多的,主要的区别是对于数据集的处理阶段,之后模型训练有一些小的差异。

  现在以回归项目进行切入点来理解模型训练的流程。

一 关于整体流程

模型训练的目的是通过训练集进行模型训练 最终得到一个优化后的最佳的模型 帮我们完成对数据的预测 比如根据一个数据的多个描述维度 最终得到标签对应的预测值 

整体步骤如下:

  1. 准备数据(输入 x 和目标 y)。

  2. 初始化模型参数。

  3. 用模型预测输出 y^​。

  4. 计算损失值(比如MSE)。

  5. 用梯度下降更新参数。

  6. 重复步骤3-5,直到损失值不再下降。

  7. 用测试数据评估模型性能。

简而言之 就是通过对数据集训练 输入x 然后经过模型训练 得到对应的y 计算loss 梯度回传更新模型 直到算出最好的一项

二 关于数据集处理  

代码

class Covid_dataset(Dataset):def __init__(self, file_path, mode):  # mode说明数据集是什么类型 训练集还是测试集with open(file_path, "r") as f:csv_data = list(csv.reader(f))data = np.array(csv_data[1:])if mode == "train":indices = [i for i in range(len(data)) if i % 5 != 0]elif mode == "val":indices = [i for i in range(len(data)) if i % 5 == 0]if mode == "test":x = data[:, 1:].astype(float)x = torch.tensor(x)else:x = data[indices, 1:-1].astype(float)x = torch.tensor(x)y = data[indices, -1].astype(float)self.y = torch.tensor(y)self.x = x - x.mean(dim=0, keepdim=True) / x.std(dim=0, keepdim=True)self.mode = modedef __getitem__(self, item):if self.mode == "test":return self.x[item].float()  # 测试集没标签。   注意data要转为模型需要的float32型else:  # 否则要返回带标签数据return self.x[item].float(), self.y[item].float()def __len__(self):return len(self.x)

实现思路

这个类有三个功能函数 分别对应初始化 取出特定的一个元素 计算数据集长度 

需要注意的是,数据的处理需要根据训练集 测试集 测试集三个不同的部分进行对应处理

IndexFeature1Feature2...FeatureNLabel
10.10.2...0.310
20.40.5...0.620
..................
  • 特征部分:从第二列到倒数第二列(Feature1FeatureN)。

  • 标签部分:最后一列(Label)。

如图是一个csv格式的数据

注意事项

1 测试集 训练集 验证集如何划分

对于训练集和验证集 按照4:1的比例进行划分

训练集需要的数据体量比较大 主要是为了保证训练的准确性 验证集比较小

2 测试集 训练集 验证集的特征值和标签

对于测试集

由于测试集主要是在模型训练完成之后评估模型性能的 因此特征值需要提取第二列到最后一列,此时最后一列也作为特征被提取 

不需要带标签 因为测试集用来测试模型对未知数据的预测能力 标签是未知的

对于验证集和训练集

需要提取第二列到倒数第二列作为特征值

同时需要提取对应的标签 

是否需要标签可以类比成做练习题 训练集是平时训练的题目 验证集是自己做的小测试 都是有答案的 这样可以方便调整 而测试集不带标签可以理解成最后的大考是没有答案的 

3 数据的处理

为什么特征值和标签需要处理成张量的形式还需要转换成浮点数

  • 转换为张量:是为了与 PyTorch 模型兼容,支持 GPU 加速和自动求导。

  • 转换为浮点数:是为了确保数据在数学运算中的精度,支持梯度下降和数据标准化。

4 归一化的原因和方式

归一化(Normalization)是数据预处理中非常重要的一步,尤其是在机器学习和深度学习中。它的目的是将特征值调整到一个统一的范围内,例如 [0, 1] 或 [-1, 1],或者使其符合某种分布(如均值为 0、标准差为 1 的正态分布)。归一化的处理可以显著提高模型的训练效率和性能。

以下是归一化处理的几个主要原因:

1. 加速模型收敛

  • 原因:不同的特征可能有不同的量纲和数值范围。例如,一个特征的范围可能是 [0, 1],而另一个特征的范围可能是 [0, 1000]。如果不对这些特征进行归一化,模型在训练时可能会因为特征的数值差异而难以收敛。

  • 解释:在梯度下降过程中,数值范围大的特征可能会主导梯度的方向,导致模型的更新方向不准确。通过归一化,所有特征的数值范围被统一,梯度下降的方向更加均衡,从而加速模型的收敛。


2. 提高模型性能

  • 原因:归一化可以减少特征之间的数值差异,使模型更容易学习到数据中的模式。

  • 解释:对于许多机器学习算法(如线性回归、支持向量机、神经网络等),特征的数值范围会影响模型的权重更新。如果特征的数值范围差异过大,模型可能会对某些特征过于敏感,而忽略其他特征。归一化可以避免这种情况,从而提高模型的性能。


3. 防止数值计算问题

  • 原因:在深度学习中,模型的训练过程涉及大量的矩阵运算和梯度计算。如果特征的数值范围过大,可能会导致数值计算问题,如梯度爆炸(Gradient Explosion)或梯度消失(Gradient Vanishing)。

  • 解释

    • 梯度爆炸:当数值范围过大时,梯度可能会变得非常大,导致模型的权重更新过大,从而使模型的训练不稳定。

    • 梯度消失:当数值范围过小时,梯度可能会变得非常小,导致模型的权重更新过慢,从而使模型难以收敛。

通过归一化,可以将特征值调整到一个合理的范围内,避免这些数值计算问题。


4. 提高模型的泛化能力

  • 原因:归一化可以减少模型对数据的依赖,使模型更加鲁棒。

  • 解释:如果特征的数值范围差异过大,模型可能会过度拟合训练数据中的数值差异,而无法泛化到新的数据。通过归一化,模型可以更好地学习数据中的模式,而不是数值差异,从而提高模型的泛化能力。


5. 常见的归一化方法

  • (1) Min-Max 归一化

    • 将特征值调整到 [0, 1] 范围内:

      x_normalized = (x - x_min) / (x_max - x_min)
    • 优点:简单直观,适用于特征值范围已知的情况。

    • 缺点:对异常值敏感,如果数据中存在极端值,可能会导致归一化后的数据范围不均匀。

  • (2) Z-Score 标准化

    • 将特征值调整到均值为 0、标准差为 1 的分布:

      x_normalized = (x - x_mean) / x_std
    • 优点:对异常值不敏感,适用于特征值呈正态分布的情况。

    • 缺点:如果数据不符合正态分布,归一化后的数据可能仍然存在数值范围差异。

  • (3) MaxAbs 归一化

    • 将特征值调整到 [-1, 1] 范围内:

      x_normalized = x / max(abs(x))
    • 优点:适用于稀疏数据,能够保留数据的稀疏性。

    • 缺点:对异常值敏感。


6. 总结

归一化处理是机器学习和深度学习中非常重要的一步,它可以帮助:

  • 加速模型的收敛。

  • 提高模型的性能。

  • 防止数值计算问题。

  • 提高模型的泛化能力。

归一化的方法选择取决于数据的特性和任务的需求。常见的归一化方法包括 Min-Max 归一化、Z-Score 标准化和 MaxAbs 归一化。

三 关于自定义的神经网络模型

class myModel(nn.Module):def __init__(self, dim):super(myModel, self).__init__()self.fc1 = nn.Linear(dim, 100)self.relu = nn.ReLU()self.fc2 = nn.Linear(100, 1)def forward(self, x):x = self.fc1(x)x = self.relu(x)x = self.fc2(x)if len(x.size()) > 1:return x.squeeze(1)else:return x

关注的问题:

1 模型结构

输入层、隐藏层(带 ReLU 激活函数)、输出层。

参数的计算 以便于帮我们更好地理解模型

维度变化
层级维度变化参数计算式参数量
fc1dim → 100(dim × 100) + 10010100
fc2100 → 1(100 × 1) + 1101
总计10201

本质上是y=wx+b的线性计算

dim对应的是对应的特征值 需要先进行线性运算 映射到一个隐藏层 隐藏层经过ReLU的激活 改变数值的分布 最后ReLU到fc2 继续线性变换后输出 由于是回归任务 因此是预测一个连续值 需要注意的是输出的维度需要统一成一维的

2 激活函数 

引入激活函数的原因

  1. 引入非线性

    • 使神经网络能够拟合任意复杂函数
    • 无激活函数时多层网络等价于单层线性变换 
  2. 特征空间映射

    • 将输入分布映射到特定输出范围(如(0,1)、(-1,1)等)在这个范围内 模型表现比较好
  3. 梯度调控

    • 通过导数控制反向传播的梯度流动

选择ReLU的核心原因
优势维度具体表现对比其他激活函数
梯度传导正区间梯度恒为1,避免梯度消失Sigmoid最大梯度仅0.25
计算效率无需指数运算,速度提升约6倍Tanh需计算双曲函数
稀疏激活约50%神经元被抑制,提升特征选择性Leaky ReLU保持全激活
生物学合理近似神经元"全或无"的放电特性更符合生物神经元工作机制

3 为什么要这样设计输出层?

  1. 统一输出形状

    • 在回归任务中,我们希望模型的输出是一个一维张量 [batch_size],而不是二维张量 [batch_size, 1]。这样可以方便后续的计算,例如计算损失函数时,损失函数通常期望输入是一维张量。

  2. 兼容不同批量大小

    • 当批量大小为 1 时,模型的输出可能是 [1] 而不是 [1, 1]。通过这段代码,可以确保无论批量大小是多少,输出的形状始终是一致的。

四 关于模型训练

# 训练函数
def train_val(model, train_loader, val_loader, device, epochs, optimizer, loss, save_path):model = model.to(device)# 记录每一轮的损失函数plt_train_loss = []plt_val_loss = []min_val_loss = 9999999999999# 训练for epoch in range(epochs):train_loss = 0.0val_loss = 0.0start_time = time.time()model.train()  # 模型调整为训练模式for batch_x, batch_y in train_loader:x, target = batch_x.to(device), batch_y.to(device)pred = model(x)  # 得到预测值train_bat_loss = loss(pred, target)train_bat_loss.backward()  # 梯度回传 更新模型optimizer.step()optimizer.zero_grad()  # 清零 训练完一轮了train_loss += train_bat_loss.cpu().item()plt_train_loss.append(train_loss / train_loader.dataset.__len__())# 验证 model.eval()with torch.no_grad():for batch_x, batch_y in val_loader:x, target = batch_x.to(device), batch_y.to(device)pred = model(x)  # 得到预测值val_bat_loss = loss(pred, target)val_loss += val_bat_loss.cpu().item()plt_val_loss.append(val_loss/val_loader.__len__())# 保存结果if val_loss < min_val_loss:torch.save(model, save_path)min_val_loss = val_lossprint('[%03d/%03d] %2.2f sec(s) TrainLoss : %.6f | valLoss: %.6f' % \(epoch, epochs, time.time() - start_time, plt_train_loss[-1], plt_val_loss[-1]))  # 打印训练结果。 注意python语法, %2.2f 表示小数位为2的浮点数, 后面可以对应。# 画图plt.plot(plt_train_loss)plt.plot(plt_val_loss)plt.title("loss图")plt.legend(["train", "val"])plt.show()

关于反向传播

        因为模型不可能一次训练就得到最优秀的结果 因此需要根据训练结果动态更新 最后得到的一个观测值 计算与标签的loss之后 可以通过反向求导计算梯度 之后利用梯度下降算法进行更新 直到表现最优秀

关于验证集

验证集不需要进行梯度更新 只有训练的时候需要

(1) 验证集的作用是评估模型
  • 验证集用于评估模型在未见过的数据上的表现,而不是用于训练模型。如果在验证集上更新梯度,模型会逐渐适应验证集的数据,这违背了验证集的初衷。

  • 验证集的核心目标:评估模型的泛化能力,确保模型在新的、未见过的数据上仍然表现良好。

(2) 防止过拟合
  • 如果在验证集上更新梯度,模型可能会逐渐过拟合验证集的数据,导致模型在训练集和验证集上表现良好,但在真实数据上表现不佳。

  • 过拟合:模型对训练数据(包括验证集)拟合得过于完美,但在新数据上表现差。

(3) 保持模型的独立性
  • 验证集应该保持独立性,即模型在验证集上的表现应该反映其在真实数据上的表现。

  • 如果在验证集上更新梯度,模型会逐渐依赖验证集的数据,失去独立性。

五 关于模型测试

这段代码实现了一个完整的测试流程,包括:

  1. 加载模型:从指定路径加载训练好的模型。

  2. 测试阶段:对测试数据进行预测,并将预测结果存储到列表中。

  3. 保存结果:将预测结果保存到一个 CSV 文件中,格式为 [id, 预测值]

def evaluate(save_path, device, test_loader, rel_path):model = torch.load(save_path).to(device)rel = []with torch.no_grad():for x in test_loader:pred = model(x.to(device))rel.append(pred.cpu().item())print(rel)with open(rel_path, "w", newline='') as f:csvWtiter = csv.writer(f)csvWtiter.writerow(["id", "test_positive"])for i, value in enumerate(rel):csvWtiter.writerow([str(i), str(rel[i])])print("文件已经保存到{}".format(rel_path))

六 关于超参数的设置

device = "cuda" if torch.cuda.is_available() else "cpu"train_file = "covid.train.csv"
test_file = "covid.test.csv"train_data = Covid_dataset(train_file, "train")
val_data = Covid_dataset(train_file, "val")
test_data = Covid_dataset(train_file, "test")train_loader = DataLoader(train_data, batch_size=16, shuffle=True)
val_loader = DataLoader(val_data, batch_size=16, shuffle=True)
test_loader = DataLoader(test_data, batch_size=1, shuffle=False)  # 测试集的batchsize一般为1 且不可以打乱dim = 93config = {"lr": 0.001,"momentum": 0.9,"epochs": 20,"save_path": "model_save/model.pth","rel_path": "pred.csv"
}model = myModel(dim)loss = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=config["lr"], momentum=config["momentum"])  # 优化器train_val(model, train_loader, val_loader, device, config["epochs"], optimizer, loss, config["save_path"])evaluate(config["save_path"], device, test_loader, config["rel_path"])

在这段代码中,超参数(Hyperparameters)是用于控制模型训练过程和行为的关键参数。它们在训练开始之前需要手动设置,并对模型的性能和训练效率有重要影响。以下是对代码中涉及的超参数的详细解释:


1. 设备选择(Device)

device = "cuda" if torch.cuda.is_available() else "cpu"
  • 超参数device

  • 作用:指定模型和数据运行的设备。

  • 解释

    • 如果 GPU(CUDA)可用,则使用 "cuda",否则使用 "cpu"

    • 使用 GPU 可以显著加速模型的训练和推理过程。


2. 数据加载器(DataLoader)

train_loader = DataLoader(train_data, batch_size=16, shuffle=True)
val_loader = DataLoader(val_data, batch_size=16, shuffle=True)
test_loader = DataLoader(test_data, batch_size=1, shuffle=False)
  • 超参数

    • batch_size:每个批次的样本数量。

    • shuffle:是否在每个 epoch 开始时随机打乱数据。

  • 作用

    • batch_size

      • 控制每次传递给模型的数据量。

      • 较大的 batch_size 可以提高训练效率,但会增加内存消耗。

      • 较小的 batch_size 可以减少内存消耗,但可能需要更多的迭代次数。

    • shuffle

      • 在训练和验证阶段,通常将数据打乱以防止模型学习到数据的顺序。

      • 在测试阶段,通常不打乱数据,以保持预测结果的顺序。


3. 模型参数

dim = 93
model = myModel(dim)
  • 超参数dim

  • 作用:输入特征的维度。

  • 解释

    • dim 是输入数据的特征数量,用于初始化模型的输入层。

    • 在这个例子中,输入特征的维度是 93。


4. 训练配置(Config)

Python复制

config = {"lr": 0.001,"momentum": 0.9,"epochs": 20,"save_path": "model_save/model.pth","rel_path": "pred.csv"
}
  • 超参数

    • lr(Learning Rate):学习率,控制参数更新的步长。

      • 较大的学习率可能导致模型训练不稳定,较小的学习率可能导致训练速度过慢。

    • momentum:动量因子,用于加速梯度下降过程,防止震荡。

      • 动量可以帮助优化器跳出局部最小值,加速收敛。

    • epochs:训练的总轮数。

      • 较多的轮数可以提高模型性能,但可能导致过拟合。

    • save_path:保存最佳模型的路径。

    • rel_path:保存预测结果的路径。


5. 损失函数和优化器

loss = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=config["lr"], momentum=config["momentum"])
  • 超参数

    • 损失函数(Loss Function)

      • nn.MSELoss():均方误差损失函数,适用于回归任务。

    • 优化器(Optimizer)

      • optim.SGD:随机梯度下降优化器。

      • lr:学习率。

      • momentum:动量因子。


6. 测试阶段

evaluate(config["save_path"], device, test_loader, config["rel_path"])
  • 超参数

    • test_loaderbatch_size 设为 1,因为测试集通常逐个样本进行预测。

    • shuffle=False,以保持预测结果的顺序。


总结

在这段代码中,涉及的超参数包括:

  1. 设备选择device

  2. 数据加载器

    • batch_size:控制每个批次的样本数量。

    • shuffle:是否随机打乱数据。

  3. 模型参数

    • dim:输入特征的维度。

  4. 训练配置

    • lr:学习率。

    • momentum:动量因子。

    • epochs:训练的总轮数。

    • save_path:保存模型的路径。

    • rel_path:保存预测结果的路径。

  5. 损失函数和优化器

    • 损失函数:nn.MSELoss()

    • 优化器:optim.SGD

七 最后的结果展示

 训练效果良好 损失快速下降并趋于平稳 没有明显的过拟合现象 模型在训练集和验证集上的表现都较为理想 

相关文章:

深度学习之图像回归(一)

前言 图像回归任务主要是理解一个最简单的深度学习相关项目的结构&#xff0c;整体的思路&#xff0c;数据集的处理&#xff0c;模型的训练过程和优化处理。 因为深度学习的项目思路是差不多的&#xff0c;主要的区别是对于数据集的处理阶段&#xff0c;之后模型训练有一些小…...

Docker 替换到 Containerd (nerdctl相关指令)

因为docker不给用了,所以使用Containerd来代替 前置准备 安装 Containerd # 安装 containerd yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y containerd.io # 生成默认配置文件 mkdir -p…...

Ollama API 参考文档

文档来源&#xff1a;API 参考文档 -- Ollama 中文文档|Ollama官方文档 端点 生成完成生成聊天完成创建模型列出本地模型显示模型信息复制模型删除模型拉取模型推送模型生成嵌入列出正在运行的模型版本...

PHP房屋出租出售高效预约系统小程序源码

&#x1f3e0; 房屋出租出售高效预约系统 —— 您的智能找房新选择 &#x1f4a1; 这是一款集智慧与匠心于一体的房屋出租出售预约系统&#xff0c;它巧妙地融合了ThinkPHP与Uniapp两大先进框架&#xff0c;精心打造而成。无论是小程序、H5网页&#xff0c;还是APP端&#xff…...

学习threejs,使用MeshBasicMaterial基本网格材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshBasicMaterial 二…...

Kafka Connect 功能介绍

Kafka Connect 是一款用于在 Apache Kafka 和其他系统之间进行数据传输的工具,它提供了以下功能: 1. 通用框架 标准化集成:Kafka Connect 提供了一个通用框架,用于将其他数据系统与 Kafka 集成,简化了连接器的开发、部署和管理。支持多种数据系统:可以快速定义连接器,将…...

从卡顿到丝滑:火山引擎DeepSeek-R1引领AI工具新体验

方舟大模型体验中心全新上线&#xff0c;免登录体验满血联网版Deep Seek R1 模型及豆包最新版模型:https://www.volcengine.com/experience/ark?utm_term202502dsinvite&acDSASUQY5&rcGO9H7M38 告别DeepSeek卡顿&#xff0c;探索火山引擎DeepSeek-R1的丝滑之旅 在A…...

Vulnhub-node靶机教学

本篇文章旨在为网络安全渗透测试靶机教学。通过阅读本文&#xff0c;读者将能够对渗透Vulnhub系列node靶机有一定的了解 一、信息收集阶段 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/node-1,252 因为靶机为本地部署虚拟机网段&#xff0c;查看dhcp地址池设置。得…...

php处理图片出现内存溢出(Allowed memory size of 134217728 bytes exhausted)

错误&#xff1a; 最近做图片上传功能时发现上传某些图片时报内存溢出错误。如下所示&#xff1a; {"code": 0,"msg": "Allowed memory size of 134217728 bytes exhausted (tried to allocate 24576 bytes)","data": {"code&q…...

网络IP跳动问题解决详

一、问题原因分析 DHCP服务器配置问题: DHCP服务器租期设置过短。 DHCP地址池范围过小&#xff0c;导致地址耗尽。 网络中可能存在多个DHCP服务器&#xff0c;导致IP分配冲突。 网络中存在IP地址冲突: 手动配置的IP地址与DHCP分配的地址冲突。 网络中存在未经授权的DHCP服…...

Linux firewalld 常用命令

本文参考RedHat官网文章How to configure a firewall on Linux with firewalld。 Firewalld 是守护进程名&#xff0c;对应命令为firewall-cmd。帮助详见以下命令&#xff1a; $ firewall-cmd --helpUsage: firewall-cmd [OPTIONS...]General Options-h, --help Pr…...

LeetCode 热题 100 49. 字母异位词分组

LeetCode 热题 100 | 49. 字母异位词分组 大家好&#xff0c;今天我们来解决一道经典的算法题——字母异位词分组。这道题在LeetCode上被标记为中等难度&#xff0c;要求我们将字母异位词组合在一起。下面我将详细讲解解题思路&#xff0c;并附上Python代码实现。 问题描述 给…...

从 DeepSeek 到飞算 JavaAI:AI 开发工具如何重塑技术生态?

在科技飞速发展的当下&#xff0c;AI 开发工具正以前所未有的态势重塑技术生态。从备受瞩目的 DeepSeek 到崭露头角的飞算 JavaAI&#xff0c;它们在不同维度上推动着软件开发领域的变革&#xff0c;深刻影响着开发者的工作方式与行业发展走向。 DeepSeek&#xff1a;AI 开发领…...

OceanBase 初探学习历程之二——操作系统参数最佳实践

本文章分享OB操作系统参数最佳实践值&#xff0c;相关参数部分来自PK项目得知&#xff0c;仅供参考&#xff0c;实际参数设置仍需结合现有设备条件及业务系统特点是否有必要如此设置&#xff0c;但我任务大部分场景均可用&#xff08;仅本人个人观点&#xff09;。 1、磁盘配置…...

全面指南:使用JMeter进行性能压测与性能优化(中间件压测、数据库压测、分布式集群压测、调优)

目录 一、性能测试的指标 1、并发量 2、响应时间 3、错误率 4、吞吐量 5、资源使用率 二、压测全流程 三、其他注意点 1、并发和吞吐量的关系 2、并发和线程的关系 四、调优及分布式集群压测&#xff08;待仔细学习&#xff09; 1.线程数量超过单机承载能力时的解决…...

《机器学习实战》专栏 No12:项目实战—端到端的机器学习项目Kaggle糖尿病预测

《机器学习实战》专栏 第12集&#xff1a;项目实战——端到端的机器学习项目Kaggle糖尿病预测 本集为专栏最后一集&#xff0c;本专栏的特点是短平快&#xff0c;聚焦重点&#xff0c;不长篇大论纠缠于理论&#xff0c;而是在介绍基础理论框架基础上&#xff0c;快速切入实战项…...

【vue项目中如何实现一段文字跑马灯效果】

在Vue项目中实现一段文字跑马灯效果&#xff0c;可以通过多种方式实现&#xff0c;以下是几种常见的方法&#xff1a; 方法一&#xff1a;使用CSS动画和Vue数据绑定 这种方法通过CSS动画实现文字的滚动效果&#xff0c;并结合Vue的数据绑定动态更新文本内容。 步骤&#xff…...

DeepSeek 细节之 MLA (Multi-head Latent Attention)

DeepSeek 系统模型的基本架构仍然基于Transformer框架&#xff0c;为了实现高效推理和经济高效的训练&#xff0c;DeepSeek 还采用了MLA&#xff08;多头潜在注意力)。 MHA&#xff08;多头注意力&#xff09;通过多个注意力头并行工作捕捉序列特征&#xff0c;但面临高计算成本…...

Python爬虫具体是如何解析商品信息的?

在使用Python爬虫解析亚马逊商品信息时&#xff0c;通常会结合requests库和BeautifulSoup库来实现。requests用于发送HTTP请求并获取网页内容&#xff0c;而BeautifulSoup则用于解析HTML页面并提取所需数据。以下是具体的解析过程&#xff0c;以按关键字搜索亚马逊商品为例。 …...

lerobot调试记录

这里写自定义目录标题 libtiff.so undefined symbol libtiff.so undefined symbol anaconda3/envs/lerobot3/lib/python3.10/site-packages/../.././libtiff.so.6: undefined symbol: jpeg12_write_raw_data, version LIBJPEG_8.01.安装库 conda install -c conda-forge jpeg …...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...