Andrej Karpathy 的 Neural Networks: Zero to Hero 系列视频笔记:2 - Makemore

原视频: The spelled-out intro to language modeling: building makemore 注意,可以透过将代码复制到 colab 或 jupyter notebook 运行, 部分生图的输出结果本文贴图效果不佳,所以建议亲自动手跟着视频操作理解。本文的笔记仅作参考。 目标 Makemore 接收一个文本文件(例如提供的 names.txt),其中每一行都假定为一个训练“对象”。 然后,它生成更多类似的东西。 在内部,Makemore 是一个字符级语言模型。每一行都包含一个示例,即模型中的一系列单个字符。 这是Makemore操作的层面,试图预测序列/单词中的下一个字符。 Makemore 是一个以现代方式实现的字符级语言建模工具。 我们的目标是从零开始构建Makemore,并理解其工作原理。 import torch import torch.nn.functional as F import matplotlib.pyplot as plt %matplotlib inline device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # Use GPU if available (faster calculations with PyTorch) words = open('names.txt', 'r').read().splitlines() #Python list of strings print("First 10 names: ", words[:10]) # First ten names, each as separate string print("Dataset size: ", len(words)) # Amount of words in dataset print("Shortest name: ", min(len(w) for w in words)) # Smallest word in dataset print("Longest name: ", max(len(w) for w in words)) # Longest word in dataset First 10 names: ['emma', 'olivia', 'ava', 'isabella', 'sophia', 'charlotte', 'mia', 'amelia', 'harper', 'evelyn'] Dataset size: 32033 Shortest name: 2 Longest name: 15 采用字符级方法,每个单词实际上是一组打包的示例,这些示例说明了哪个字符跟在哪个字符后面 / 哪个字符先出现 / 字符序列中大概有多少字符。...

九月 12, 2024 · 20 分钟

Andrej Karpathy 的 Neural Networks: Zero to Hero 系列视频笔记:1 - Micrograd

原视频: The spelled-out intro to neural networks and backpropagation: building micrograd 注意,可以透过将代码复制到 colab 或 jupyter notebook 运行, 部分生图的输出结果本文贴图效果不佳,所以建议亲自动手跟着视频操作理解。本文的笔记仅作参考。 import os import math import torch import numpy as np import matplotlib.pyplot as plt %matplotlib inline 目的 目标是理解对于micrograd示例中的神经网络(Neural Network, NN)定义、训练和反向传播(backprop)是什么样子的。这个教程基本上是一个逐步的项目演示。 Micrograd是一个自动微分引擎(Autograd engine),它仅用150行代码就包含了训练神经网络的所有必要元素。 Micrograd还从头实现了反向传播(Backpropagation)。 反向传播允许你迭代调整神经网络的权重,以最小化给定的损失函数/提高预测准确性。 什么是 Micrograd? Micrograd是一个小巧友好的自动微分引擎,支持自动微分和高阶导数计算。 它由不到150行的Python代码组成,是理解通用自动微分引擎工作原理的有效学习工具。 简单的使用示例: from micrograd.engine import Value a = Value(-4.0) # create a "Value" object b = Value(2.0) c = a + b # transform a and b into c with "+" c += c + 1 c += 1 + c + (-a) print(c....

九月 11, 2024 · 20 分钟

OMR 相关论文阅读:基于端到端线性化编码的钢琴乐谱光学识别技术

核心观点 1. 研究背景 (Background of the Study): 文章探讨了如何通过深度学习方法实现光学音乐识别 (OMR) 的端到端系统,尤其是针对钢琴形式音乐的识别。尽管近年来在单声部音乐的光学识别方面取得了进展,但现有的 OMR 模型很难处理钢琴音乐中包含的多声部和多行谱表。 钢琴音乐的复杂性源于其多声部的独立并行,声部可以在乐曲中自由出现和消失。这种复杂性给 OMR 模型的输出带来了额外的挑战。 2. 核心贡献 (Key Contributions): Linearized MusicXML 编码: 提出了一个线性化的 MusicXML 格式 (Linearized MusicXML),以便端到端模型直接训练,同时保持与行业标准 MusicXML 格式的紧密一致性。 这种编码方法通过对 XML 树进行深度优先遍历,并将每个元素转换为相应的令牌,从而减少冗余,专注于乐谱的视觉表示,抑制语义信息并忽略声音、布局和元数据。 数据集构建与测试: 构建了一个基于 OpenScore Lieder 语料库的钢琴音乐基准测试集,包含合成训练图像和来自公共 IMSLP 扫描的真实世界图像。 数据集包括两种变体:合成和扫描,分别用于训练、开发和测试。合成数据用于模型的初始训练,扫描数据用于测试模型的真实性能。 模型训练与优化: 使用新的基于 LSTM 的模型架构进行训练,并进行了精调以作为基准。 模型在合成和扫描的测试集上都表现出色,显著超越了现有的钢琴音乐数据集上的最先进结果。 评价指标与结果分析: 采用 TEDn 度量模型来评估输出的 MusicXML 文件,并与当前最先进的结果进行比较,证明了新的编码和模型架构在钢琴音乐 OMR 任务中的有效性。 结果表明,使用 LMX 线性化的端到端 OMR 系统在钢琴音乐识别中达到了最先进的性能。 3. 技术实现 (Technical Implementation): 模型架构: 文章提出了一种新的 LSTM 解码器与 Bahdanou 注意力机制相结合的序列到序列架构,用于钢琴音乐的光学识别。 该模型首先通过多个卷积层处理输入图像,然后通过双向 LSTM 层进行上下文化,最后使用带有注意力机制的 LSTM 解码器生成输出。 数据增强与训练策略: 针对合成数据与真实扫描数据的差异,设计了一系列数据增强操作,如水平位移、旋转、垂直位移等,以提高模型的泛化能力。...

八月 27, 2024 · 2 分钟

如何理解批量归一化?

批量归一化(Batch Normalization, BN) 在理解这一部分的时候,我查阅了很多资料,但对于BN的具体实现以及作用还是不太清楚,前几天当面询问了老师,他给了我一个更容易理解的例子,我觉得很好,从他的例子再去看其他资料的解释,就很容易理解了。 原理 批量归一化的核心是对每一层网络的输入数据,计算出它们的均值和标准差,然后将这些数据进行标准化,使得这些数据的分布更接近标准正态分布(即均值为0,方差为1)。同时,为了不影响模型的学习能力,BN还会引入两个可训练的参数:缩放参数和偏移参数,这样即使数据被归一化了,网络仍然可以通过调整这两个参数来学习不同的特征。 如何理解? 批量归一化(Batch Normalization, BN)可以用一个简单的比喻来理解: 假设你在一个班级里,大家都要参加一次考试,但考试前每个人的学习状态不一样:有的人状态好,有的人状态差。如果直接考试,可能成绩会有很大波动,影响整体表现。 为了让大家在一个相对公平的状态下考试,老师先给大家做了一些准备活动,让每个人的状态都差不多,比如让大家一起做深呼吸、放松心情、统一考试前的精神状态。这样一来,每个人的初始状态更接近,考试的表现就更稳定了。 在深度学习中,批量归一化就类似于这个准备活动。它在每一层网络计算之前,先对数据进行一次“整理”,让数据的状态更一致。具体来说,它会对输入到每一层的批量数据进行归一化处理,调整数据的分布,使得每一层网络在处理这些数据时,能够更稳定、高效。 下面我们举一个例子: 假设你班上有五个学生,他们在考试前的学习状态(可以看作每个学生的“分数分布”)如下: 小明:状态 90 分 小红:状态 70 分 小刚:状态 50 分 小丽:状态 60 分 小强:状态 80 分 这时候,直接让他们去考试,最终成绩可能会因为初始状态的不同而差异很大。为了让大家在一个更公平的状态下考试,老师决定在考试前先做一个“批量归一化”的准备活动。 批量归一化的过程 1. 计算均值: 首先,老师计算一下大家状态的平均值: \[ \text{平均状态} = \frac{90 + 70 + 50 + 60 + 80}{5} = 70 \] 2. 计算标准差: 然后,老师计算一下大家状态的标准差(衡量数据的分散程度): \[ \text{标准差} = \sqrt{\frac{(90-70)^2 + (70-70)^2 + (50-70)^2 + (60-70)^2 + (80-70)^2}{5}} \approx 14.14 \] 3. 状态归一化: 接下来,老师会调整每个人的状态,使得它们的分布更加均匀。具体做法是:每个人的状态减去均值,再除以标准差,让数据的均值变为 0,标准差变为 1。...

八月 11, 2024 · 1 分钟

LeNet 学习笔记

讲几句废话 “当我以为自己掌握了大量知识的时候,才发现自己所知道的只是这个领域中的沧海一粟。”——bdim 学习感悟 最近一直在尝试学习图像识别相关的内容,其中就有 LeNet 这个经典的卷积神经网络,在这里记录一下学习过程。经过重复阅读 《深度学习图解》 这本书之后,终于能够理解 Lenet 的大部分细节。在这里我尝试通过自己的理解,尝试重新实现一个 LeNet,并通过查询资料将一些自己不是太理解的内容也来抽象理解一下,本文内容可能并不准确,并将持续更新细节。欢迎对本文提出质疑并与作者进行交流学习!! LeNet5 is one of the earliest Convolutional Neural Networks (CNNs). It was proposed by Yann LeCun and others in 1998. LeNet 论文链接 : Gradient-Based Learning Applied to Document Recognition. 环境 我使用的设备环境: c.' [email protected] ,xNMM. ----------------------------- .OMMMMo OS: macOS 14.5 23F79 arm64 lMM" Host: MacBookPro18,4 .;loddo:. .olloddol;. Kernel: 23.5.0 cKMMMMMMMMMMNWMMMMMMMMMM0: Uptime: 26 days, 21 hours, 14 mins .KMMMMMMMMMMMMMMMMMMMMMMMWd. Packages: 275 (nix-user) XMMMMMMMMMMMMMMMMMMMMMMMX....

七月 13, 2024 · 5 分钟