# AI基本功修炼 **Repository Path**: goodshred/AI-program-track ## Basic Information - **Project Name**: AI基本功修炼 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-09 - **Last Updated**: 2024-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 安装 pip install torch numpy sacrebleu scikit-learn sentencepiece torchvision tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple/ ## matplotlib最新版的有bug,3.3.2是稳定版 pip install matplotlib==3.3.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/ ## 参考文章 [This post is all you need(上卷)——层层剥开Transformer](https://zhuanlan.zhihu.com/p/420820453?utm_psn=1790019724526112769) 使用 torch.Tensor() 构造函数创建的张量会根据其形状进行初始化。对于较小的张量,如 (3,3),PyTorch 通常不会使用随机初始化,而是使用全零初始化。但是,如果你想要创建一个不是全零的 (3,3) 张量,你可以使用不同的方法来指定初始化方式。 torch.rand(3, 3),其元素值从均匀分布 [0,1) 中随机选择: 如花,小倩,小明 [[0,0,1],[1,1,1],[1,0,1],[0,1,1]] 标签:小强 [0,1,1,0] 测试数据 [1,1,0] 预测:小强去不去 ![img](img/如花去小强就去.png) 在PyTorch中,keepdim是一个参数,通常用于在进行降维操作(如求和、平均、最大值或最小值等)后保持结果张量的维度数。当使用keepdim=True时,操作会保留被操作维度的大小为1,而不是将其缩减到0维。 例如,在torch.sum、torch.mean、torch.max或torch.argmax等函数中,如果你希望在对张量进行操作后,结果张量仍然保持原有的维度结构,就可以使用keepdim=True。 使用keepdim=True在某些情况下很有用,比如在进行广播(broadcasting)操作时,保持维度一致性可以避免维度不匹配的问题。此外,它也常用于在计算梯度时保持维度的一致性,特别是在深度学习中构建复杂的模型时。 x = torch.tensor([[1, 2], [3, 4]]) sum_dim0 = torch.sum(x, dim=0, keepdim=True) # 结果是[[4, 6]], 维度从2降到1,但保持了维度数 x = torch.tensor([[1, 2], [3, 4]]) sum_dim0 = torch.sum(x, dim=0) # 默认keepdim=False, 结果是[4, 6],维度从2降到1 求索引 argmax_dim1 = torch.argmax(x, dim=1) # 默认keepdim=False, 结果是tensor([1, 1]) argmax_dim1 = torch.argmax(x, dim=1, keepdim=True) # 结果是tensor([[1], [1]]), 维度从2降到1,但保持了维度数 argmax 原理 argmax是一个函数,用于在给定的维度上找到最大元素的索引。对于一个张量,argmax会返回该张量中最大元素的位置。例如,如果你有一个包含概率分布的张量,argmax可以用来找到最大概率值对应的类别索引。 3. nn.Linear(inputs).argmax() 组合原理 当你将nn.Linear和argmax组合使用时,通常是为了进行分类任务。以下是这个过程的步骤: 前向传播:首先,输入数据inputs通过nn.Linear层进行线性变换,得到一个形状为[batch_size, num_classes]的张量,其中num_classes是类别的数量。 应用激活函数:在某些情况下,你可能还会在nn.Linear的输出上应用一个激活函数,如softmax,以获得一个概率分布。但在某些情况下,如使用交叉熵损失函数时,这一步可以省略,因为损失函数内部会应用log_softmax。 找到最大值索引:然后,使用argmax函数在这个输出张量上操作,通常是沿着类别维度(通常是第二个维度,即dim=1),找到每个样本最可能属于的类别索引。 输出预测结果:argmax的输出是一个包含每个样本最可能类别索引的张量,这个张量可以用于评估模型的性能,比如计算准确率。 这个组合操作的目的是将输入数据转换为一个类别概率分布,然后选择最有可能的类别作为预测结果。这是一种常见的分类任务处理流程。 ![img](img/小强同时喜欢如花大美.png) https://www.bilibili.com/video/BV1XE411C7mS?p=16&vd_source=d482cc951729db66c853a9d4fef3b529