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

原视频: The spelled-out intro to neural networks and backpropagation: building micrograd 注意,可以透过将代码复制到 colab 或 jupyter notebook 运行, 部分生图的输出结果本文贴图效果不佳,所以建议亲自动手跟着视频操作理解。本文的笔记仅作参考。 1 2 3 4 5 6 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代码组成,是理解通用自动微分引擎工作原理的有效学习工具。 简单的使用示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 from micrograd.engine import Value a = Value(-4....

九月 11, 2024 · 24 分钟

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. 环境 我使用的设备环境: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 c.' [email protected] ,xNMM. ----------------------------- .OMMMMo OS: macOS 14.5 23F79 arm64 lMM" Host: MacBookPro18,4 ....

七月 13, 2024 · 6 分钟

记录一次由于 FX3 断电导致视频文件丢失并成功恢复的实践

今天在给甲方录制视频的时候,中间由于假电池断电,导致机器直接关机,而视频文件没有保存下来。当时我并没有发现,因为 FX3 之前我的印象是即使是录制途中强制关机,也会及时地保存视频文件。直到我回家打开内存卡那一刻我才懵逼了:第一段视频文件不见了! 我立刻开始寻找各种有可能恢复文件的方法,同时去淘宝寻求帮助。不过淘宝给出的价格是 600 元,而且不一定能够恢复。我靠,我一共才赚几个钱,600给你了我还赚啥? 恢复文件 首先就是恢复文件,由于我是使用了索尼 FX3 和索尼的 CFA 卡,所以我的第一反应就是通过查找这两个关键词找到了最靠谱,并且免费的官方恢复软件:Memory Card File Rescue 。你通过输入存储卡对应的信息,它会帮你选择下载对应的恢复软件,真的是太贴心啦哈哈。通过大概8分钟的扫描,我就得到了恢复的文件,它是一个 12.68G 的 DAT 文件。 我查询了很多网站,并没有什么软件可以直接将 DAT 文件直接转换为 MP4 之类的东西。也有博客称 vlc 能干这个事儿,但事实上并不行。于是又开始了大量的搜索。如果你也看到了 B 站某个 UP 主自己写的恢复脚本的话,我可以告诉你,恢复出来的视频是上半部分花屏。我也尝试了使用 ffmpeg 来进行处理,结果当然也是无效的。 处理 DAT 文件 我恢复出来的 DAT 文件与正常的 MP4 文件区别主要是缺少了 moov 数据块, mdat 主要记录的是视频中的帧信息,moov 主要存储的是视频帧信息的读取格式。由于机器是突然断电的,所以来不及写入 moov 数据块,因此核心任务就是恢复 moov数据块。 由于我的第二段视频(第一段中断之后我立刻换电池接上了第二段)和第一段视频的录制规格等等信息是完全一样的,所以第一段的 moov 完全可以抄第二段视频的作业。当然,如果你没有可以抄作业的视频,你可以使用和 DAT 文件一致的规格再随便录几秒视频即可。 untrunc 这个伟大的开源工具帮我解决了恢复 moov数据块这个难题,如果你是 Windows 用户的话,可以阅读 untrunc中文 来学习如何使用。 恢复如旧 通过使用 untrunc ,我成功将 12.68G 的 DAT 文件恢复为了 12.68G 的 MP4。更让我感动的是,恢复之后的视频保留了原有的码率、帧率以及分辨率,画面恢复如新!...

六月 21, 2024 · 1 分钟