自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 收藏
  • 关注

原创 深度学习处理文本(6)

例如,在一个合理的词向量空间中,同义词应该被嵌入到相似的词向量中,一般来说,任意两个词向量之间的几何距离(比如余弦距离或L2距离)应该与这两个单词之间的“语义距离”有关。但从更实际的角度来说,一个好的词嵌入空间在很大程度上取决于你的任务,英语影评情感分析模型的完美词嵌入空间,可能不同于英语法律文件分类模型的完美词嵌入空间,因为某些语义关系的重要性因任务而异。(维度大小等于词表中的单词个数)​,而词嵌入是低维的浮点向量(密集向量,与稀疏向量相对)​,如图11-2所示。词嵌入是密集的表示,也是。

2025-04-01 08:46:50 523

原创 深度学习处理文本(5)

第二,这个模型的测试精度只有87%,性能还不如一元语法二进制模型,后者的速度还很快。显然,使用one-hot编码将单词转换为向量,这是我们能做的最简单的事情,但这并不是一个好主意。奇怪的是,一维卷积神经网络在NLP中一直没有很流行,尽管根据我自己的经验,一维深度可分离卷积的残差堆叠通常可以实现与双向LSTM相当的性能,而且计算成本大大降低。但如果想导出一个独立于这个管道的模型,我们应该确保模型包含文本预处理(否则需要在生产环境中重新实现,这可能很困难,或者可能导致训练数据与生产数据之间的微妙差异)​。

2025-04-01 08:46:24 470

原创 深度学习处理文本(4)

同时,某个词在数据集所有文档中的出现频次也很重要:如果一个词几乎出现在每个文档中(比如“the”或“a”​)​,那么这个词就不是特别有信息量,而仅在一小部分文本中出现的词(比如“Herzog”​)则是非常独特的,因此也非常重要。如果你做的是文本分类,那么知道一个单词在某个样本中的出现次数是很重要的:任何足够长的影评,不管是哪种情绪,都可能包含“可怕”这个词,但如果一篇影评包含许多个“可怕”​,那么它很可能是负面的。我们在这个二进制编码的二元语法袋上训练模型,并测试模型性能,如代码清单11-8所示。

2025-03-31 09:18:24 717

原创 深度学习处理文本(3)

最后,你也可以采用混合方法:Transformer架构在技术上是不考虑顺序的,但它将单词位置信息注入数据表示中,从而能够同时查看一个句子的不同部分(这与RNN不同)​,并且仍然是顺序感知的。今天,这两种方法仍然都是有价值的。请注意,本例的数据集是一个平衡的二分类数据集(正面样本和负面样本数量相同)​,所以无须训练模型就能实现的“简单基准”的精度只有50%。这些数据集生成的输入是TensorFlow tf.string张量,生成的目标是int32格式的张量,取值为0或1,如代码清单11-2所示。

2025-03-31 09:18:02 444

原创 深度学习处理文本(2)

接下来,如果想将模型导出到生产环境中,你可能希望导出一个接收原始字符串作为入的模型(类似上面第二种用法的代码片段)​,否则,你需要在生产环境中(可能是JavaScript)重新实现文本标准化和词元化,可能会引入较小的预处理偏差,从而降低模型精度。对于编码为整数序列的文本,如果你需要将其转换回单词,那么这种方法很有用。你可以用无状态的方式来执行此操作,比如将每个词元哈希编码为一个固定的二进制向量,但在实践中,你需要建立训练数据中所有单词(​“词表”​)的索引,并为词表中的每个单词分配唯一整数,如下所示。

2025-03-30 18:58:23 565

原创 深度学习处理文本(1)

在计算机科学领域,我们将人类语言(如英语或普通话)称为“自然”语言,以区别于为机器设计的语言(如汇编语言、LISP或XML)​。每一种机器语言都是设计出来的:人类工程师写下一组正式规则,描述用这种语言可以编写哪些语句以及这些语句的含义。**规则在先,只有这组规则是完备的,人们才会开始使用这种语言。**人类语言正好相反:**使用在先,规则出现在后。自然语言是进化形成的,就像生物体一样,这是我们称其为“自然语言”的原因。**自然语言的“规则”​(比如英语语法)是在事后确立的,而且经常被使用者忽视或破坏。

2025-03-30 18:12:37 792

原创 深度学习处理时间序列(7)

遇到一个新问题时,最好首先为你选择的指标建立基于常识的基准。如果没有需要超越的基准,那么就无法判断是否取得了真正的进展。在尝试计算代价较高的模型之前,先尝试一些简单的模型,以证明增加计算代价是有意义的。有时简单模型就是你的最佳选择。如果顺序对数据很重要,特别是对于时间序列数据,那么循环神经网络(RNN)是一种很适合的方法,与那些先将时间数据展平的模型相比,其性能要更好。Keras中的两个基本的RNN层是LSTM层和GRU层。

2025-03-29 10:57:23 1139

原创 零基础入门多媒体音频(5)-aidl通信

从机制的角度来看,Binder在Android中起到了一种桥梁的作用,使得进程之间可以建立起通信管道,在需要的时候进行数据交换和消息传递。它允许一个进程调用另一个进程中的方法,就像调用本地方法一样,这使得应用程序可以在不同的进程之间共享功能和服务。然后,在客户端,开发者可以使用这些接口来调用服务端的方法,实现跨进程通信。总的来说,Binder是Android系统中实现进程间通信的重要机制,它为开发者提供了方便而强大的工具,使得不同进程之间的通信和数据共享变得简单而高效。

2025-03-29 10:48:42 452

原创 零基础入门多媒体音频(4)-GENIVIProjectAudioManager总览

共包含三部分,command(项目软件与项目以外的软件的信息传递,调用传递),control(音频功能的核心决策层,负责业务逻辑的处理),routing(音频业务的具体执行者)。它能够识别和管理多种音频源,如收音机、CD播放器、蓝牙设备、USB接口等,并根据用户的选择或系统的设定,将音频信号传输到相应的音响设备,如扬声器、耳机等。此外,AudioManager还具备音频信号处理的能力,可以对音频信号进行放大、均衡、混响等处理,以提升音频的音质和听感。这两者都实现了将音频系统状态的变化传递给系统的关注者。

2025-03-29 10:47:53 586

原创 深度学习处理时间序列(6)

我们回头来看基于LSTM的模型,它是第一个能够超越常识基准的模型。2016年,Yarin Gal在他关于贝叶斯深度学习的博士论文中,确定了在RNN中使用dropout的正确方式:在每个时间步都应该使用相同的dropout掩码(相同模式的舍弃单元)​,而不是在不同的时间步使用随机变化的dropout掩码。由于使用了dropout,我们不需要过分依赖网络尺寸来进行正则化,因此我们将使用具有两倍单元个数的LSTM层,希望它的表示能力更强(如果不使用dropout,这个网络会马上开始过拟合,你可以试试看)​。

2025-03-29 10:05:09 1142

原创 深度学习处理时间序列(5)

但是,如果所有序列的长度相同,那么我建议指定完整的输入形状,因为这样model.summary()能够显示输出长度信息,这总是很好的,而且还可以解锁一些性能优化功能。RNN单元的类型(如前所述)决定了假设空间,即在训练过程中搜索良好模型配置的空间,但它不能决定RNN单元的作用,那是由单元权重来决定的。相同的单元具有不同的权重,可以起到完全不同的作用。值得庆幸的是,SimpleRNN层并不是Keras中唯一可用的循环层,还有另外两个:LSTM层和GRU层,二者都是为解决这个问题而设计的。

2025-03-29 09:43:18 972

原创 Android audio(10)-AudioFlinger的track数据管理

源码位置:/frameworks/av/services/audioflinger/Threads.h……回放线程基类,不同输出flag的音频流对应不同类型的 PlaybackThread 实例(分为四种:MixerThread、DirectOutputThread、DuplicatingThread、OffloadThread),所有的 PlaybackThread 实例都会添加到 AudioFlinger.mPlaybackThreads 向量中。

2025-03-28 13:36:37 695

原创 深度学习处理时间序列(4)

智能生物处理信息是渐进式的,保存一个关于所处理内容的内部模型,这个模型是根据过去的信息构建的,并随着新信息的进入而不断更新。在处理两个彼此独立的序列(比如批量中的两个样本)之间,RNN的状态会被重置,所以你仍然可以将一个序列看作单个数据点,即神经网络的单个输入。这个RNN对时间步进行遍历,在每个时间步t,它都会考虑t的当前状态和t的输入(形状为(input_features,))​,并对二者计算得到t的输出。出张量中的每个时间步t都包含入序列中时间步0到t的信息,即关于过去的全部信息。NN实现起来很简单。

2025-03-28 09:04:51 815

原创 深度学习处理时间序列(3)

同样,在开始研究复杂且计算代价很大的模型(如RNN)之前,尝试简单且计算代价很小的机器学习模型(比如小型的密集连接网络)也是很有用的。我们使用均方误差(MSE)作为损失,而不是平均绝对误差(MAE)​,因为MSE在0附近是光滑的(而MAE不是)​,这对梯度下降来说是一个有用的属性。这个假设的含义是,如果沿着序列滑动一个窗口,那么窗口的内容应该遵循相同的属性,而与窗口位置无关。在本例中,我们可以放心地假设:温度时间序列是连续的(明天的温度很可能接近今天的温度)​,并且具有每天的周期性变化。

2025-03-28 09:04:24 1330

原创 Python实战(6)-网络编程

Twisted是由Twisted Matrix Laboratories(http://twistedmatrix.com)开发的,这是一个事件驱动的Python网络框架,最初是为编写网络游戏开发的,但现被各种网络软件使用。在Twisted中,你能实现事件处理程序,就像在GUI工具包中一样。实际上,Twisted与多个常用的GUI工具包(Tk、GTK、Qt和wxWidgets)配合得天衣无缝。本节介绍一些基本概念,并演示如何使用Twisted完成一些简单的网络编程任务。掌握这些基本概念后,你就可参考Twis

2025-03-27 08:53:26 1040

原创 Python实战(5)-网络编程

如果处理的是流(使用TCPServer时很可能如此)​,可使用StreamRequestHandler类,它包含另外两个属性:self.rfile(用于读取)和self.wfile(用于写入)​。对进程(运行的程序)进行分叉时,基本上是复制它,而这样得到的两个进程都将从当前位置开始继续往下执行,且每个进程都有自己的内存副本(变量等)​。模块SocketServer还包含很多其他的类,它们为HTTP服务器提供基本的支持(如运行CGI脚本)​,以及XML-RPC支持(这将在第27章讨论)​。

2025-03-27 08:52:56 960

原创 android音效算法集成框架(3)

同一个音效,它绑定到不同的seesionId时,会被重新创建一个新的EffectModule对象。比如BassBoost低音增强音效,它被分别绑定到QQ音乐和酷狗音乐的sessionId时,就会创建两个不同的BassBoost对象。这样两个音效处理就会各不干扰。前面讲了多个EffectChain之间的执行顺序,那么在EffectChain中的多个EffectModule,它们的执行顺序是什么呢?

2025-03-26 08:48:01 717

原创 android音效算法集成框架(4)

因为在EffectModule::process()函数中,没有进行音效处理类型(EFFECT_FLAG_TYPE_PRE_PROC或EFFECT_FLAG_TYPE_POST_PROC)的判断,只判断了此音效算法是否声明了EFFECT_FLAG_NO_PROCESS flag。EffectChain中包含的所有EffectModule对象,它们的输入和输出共享内存块都使用的是EffectChain的输入内存块,只有最后一个EffectModule的输出内存块使用的是EffectChain的输出内存块。

2025-03-26 08:47:13 1214

原创 android音效算法集成框架(2)

当然,如果音效处理前后的数据所需的内存大小完全一样,也可以将输入和输出指向同一块共享内存。AndroidFlinger在接收到AudioTrack的创建请求时(AudioFlinger.cpp->createTrack()函数中),会为每个Track新分配一个唯一的seesionId,它是一个正整数,根据Track创建的先后顺序递增,也就是说越晚创建的Track,它被分配的seesionId的数值越大。标为红色的downmix_module_t代表的是音效算法的实现方,中间白色部分是前文提到的音效框架。

2025-03-25 09:01:32 805

原创 android音效算法集成框架(1)

Android的音效架构中,将所有的音效算法全部挂载到AudioHAL进程中运行。根据音效算法作用的位置,可以分为三类:Track音效、Stream音效、Device音效。即:针对某一个Track的处理音效、针对某种StreamType的处理音效、针对某个Device的处理音效。Track只是在APP层和AudioServer框架层中的概念,到了AudioHAL层已经没有Track的概念,只有Stream和Device。

2025-03-25 09:00:46 476

原创 Android Audio基础(13)——audiomixer

在 Android 平台上,音频混合器 AudioMixer 主要用在 AudioFlinger 里,将多路音频源数据混音(包括混音、音量处理、重采样及处理声道等)。位于 framework 的音频处理模库 libaudioprocessing(frameworks/av/media/libaudioprocessing)中。

2025-03-24 12:38:17 1037

原创 Android Audio焦点(27)——音量调节基础

前面的文章中提到过,AudioService 的主要功能之一就是负责调节音量,本文主要详细介绍一下 AudioService 中音量调节相关的内容。我们先思考一个问题,音量处理的关键点是哪些?我的总结是以下两点。a.音量处理作用位置(作用在track数据,作用在output数据,作用在全局)b.音量值(最大,最小值,步进)不难发现音量处理和音效处理有很大的相似之处,或者说音量处理就是一种音效。一种最常见的音效。音效处理最关键的两个点也是作用位置和音效参数。

2025-03-24 12:37:45 482

原创 连续型随机变量及其分布

①对于一个连续型随机变量X,若已知它的概率密度f(x)​,根据定义可以求得分布函数F(x)​,同时可以通过密度函数的积分来求X落在任何区间上的概率,即。由此性质可见,连续型随机变量X取任意值a的概率为0,这说明概率为零的事件不一定是不可能事件.同样,概率为1的事件也不一定是必然事件.这表明均匀分布的随机变量X落入[a,b]任意子区间的概率与该子区间的长度成正比,而与子区间的位置无关.[定义1] 若对于随机变量X的分布函数F(x)​,存在非负可积函数f(x)​,使得对于任意实数x,有。(2)求X的分布函数;

2025-03-23 21:51:08 408

原创 Python实战(4)-网络编程

本章将通过示例展示如何使用Python来编写以各种方式使用网络(如互联网)的程序。Python提供了强大的网络编程支持,有很多库实现了常见的网络协议以及基于这些协议的抽象层,让你能够专注于程序的逻辑,而无需关心通过线路来传输比特的问题。另外,对于有些协议格式,可能没有处理它们的现成代码,但编写起来也很容易,因为Python很擅长处理字节流中的各种模式(从本书前面介绍的各种处理文本文件的方式中,你可能领教了这一点)​。鉴于Python提供的网络工具众多,这里只能简要地介绍它的网络功能。

2025-03-23 20:49:01 834

原创 android 音量调节

安卓音频数据的最终音量由三部分组成,分别是master volume(全局音量,对整个系统所有的音频数据生效),stream volume(流音量,只针对特定类型的音频数据生效)和track volume(track音量,只针对某个audiotrack的数据生效)。音频数据音量大小公式:playbackthread负责这个具体值的计算并设置到audiomixer中生效。其中master_volume,stream_volume和track_volume都是百分比,1表示音量调到最大;

2025-03-22 15:24:32 1046

原创 android音频概念解析

output在创建同时,会创建一个与之一一对应的PlaybackThread,句柄为output,保存在AudioFlinger的mPlaybackThreads中;Output的描述符,真正的output实体,以output为句柄,保存在AudioPolicyManager的mOutputs中;对于module里的每一个output, new IOProfile, 放入module的mOutputProfiles;配置文件中的每一个module都被描述为HwModule,保存在mHwModules中;

2025-03-22 14:48:17 1047

原创 随机变量及其分布函数

前面我们讨论了随机事件及其概率,为了更全面、系统地研究,找到随机现象的,有必要将随机试验的.为此,人们引入了的概念.随机变量及其与之相关的一系列概念的引入,使概率论的研究能够借助数学分析工具,为概率论的研究获得了飞速发展.

2025-03-22 13:52:56 1171

原创 Python实战(3)-数据库操作

前面说过,可用的SQL数据库引擎有很多,它们都有相应的Python模块。这些数据库引擎大都作为服务器程序运行,连安装都需要有管理员权限。为降低Python DB API的使用门槛,我选择了一个名为SQLite的小型数据库引擎。它不需要作为独立的服务器运行,且可直接使用本地文件,而不需要集中式数据库存储机制。在较新的Python版本(从2.5开始)中,SQLite更具优势,因为标准库包含一个SQLite包装器:使用模块sqlite3实现的PySQLite。

2025-03-21 21:25:59 1134

原创 AudioTrack

①java层的AudioTrack只是java语言的api(包皮公司),我们对java层AudioTrack的api调用,实际都会传递到native层的AudioTrack去执行;②native层的AudioTrack在初始化的时候,会跨进程的调用AudioFlinger的createTrack方法,并返回一个IAudioTrack的对象,native层的AudioTrack以及AudioFlinger通过这个对象进行交互;

2025-03-21 20:38:28 995

原创 Android13音频子系统分析(四)---座舱的多音区框架

目录一、AAOS架构二、CarAudioService初始化2.1 car_audio_configuration.xml配置文件2.2 AudioPolicy的数据结构2.3 CarAudioService.java->init()函数三、多音区的路由策略四、多音区的音量控制4.1 默认物理音量按键调节4.2 各个乘员区的音量按键调节4.3 通过CarAudioManager调节Google在Android核心系统的基础上,为车机系统扩展了一套针对智能座舱场景下的多音区框架,多音区是指在汽车中,不同的用户

2025-03-20 08:50:15 619

原创 时空(3)

我们必须确定一种方法来测量斜边s的长度,即时空中两个事件的距离。应该选择欧几里得空间吗?选择欧几里得空间,我们就可以使用勾股定理了。还是选择更复杂的几何空间?也许空间是弯曲的,像地球表面或者其他更复杂的形状。事实上,我们可以想象出无数种计算距离的方法。不妨进行猜测,猜测是物理学家经常做的事情。我们以奥卡姆剃刀原理为指导进行猜测。奥卡姆剃刀原理非常重要,且很有用,它是以生活在14世纪初的英国思想家威廉的名字来命名的。这个想法说起来很简单,实行起来却不容易。它可以被概括为“不要把事情复杂化”。奥卡姆本人将其表述

2025-03-20 08:06:17 286

原创 时空(2)

把预言的娱乐成分放在一边,让我们引入一些重要的专业术语。诺查丹玛斯的死是一个“事件”,跟阿道夫·希特勒(Adolf Hitler)的诞生和伦敦大火一样。诺查丹玛斯看到他死后的事件,比如那场伦敦大火,就颠倒了大火和他的死亡这两件事件的顺序。再明显不过,诺查丹玛斯死在大火之前,因此他不可能看到它。他若要在死前看到它,那么必须颠倒事件顺序,让大火在他死前发生。更明确点说,假设诺查丹马斯巧妙地安排了这场大火。比如,他死时留下一笔银行存款,鼓励某人于1666年9月2日午夜后不久在布丁巷放火。这样,诺查丹玛斯的生死和伦

2025-03-20 08:05:56 307

原创 Python实战(2)-数据库支持

使用简单的纯文本文件可实现的功能有限。诚然,使用它们可做很多事情,但有时可能还需要额外的功能。你可能希望能够自动完成序列化,此时可求助于shelve和pickle(类似于shelve)​。不过你可能需要比这更强大的功能。例如,你可能想自动支持数据并发访问,即允许多位用户读写磁盘数据,而不会导致文件受损之类的问题。还有可能希望同时根据多个数据字段或属性进行复杂的搜索,而不是采用shelve提供的简单的单键查找。

2025-03-19 19:55:15 561

原创 Python实战(1)-GUI文本编辑器

至此,我们大致具备了编写前述程序所需的知识,但还需获悉用于创建小型文本框和大型文本区域的控件的名称,通过快速浏览文档可知,要创建单行文本框,可使用控件Entry。在这里,我们将使用’1.0’来指定第1行的第0个字符(即第一个字符前面),1使用END来指定文本未尾,并使用INSERT来指定当前插入点,最终的程序如代码清单12-1和图12-2所示。例如,对于鼠标单击事件,它提供了x和y坐标,在这个示例中将它们打印出来了。要让控件对特定的事件进行处理,可对其调用方法bind,并指定事件的名称和要使用的函数。

2025-03-19 19:18:23 1104

原创 Android13音频子系统分析(二)---初始化

目录一、AudioPolicyService初始化1.1 AudioPolicyService::onFirstRef()函数1.2 AudioCommandThread线程1.3 AudioPolicyManager初始化1.3.1 解析audio_policy_configuration.xml配置文件1.3.2 解析audio_policy_engine_configuration.xml配置文件1.3.3 AudioPolicyManager::onNewAudioModulesAvailableI

2025-03-19 11:54:37 674

原创 Android13音频子系统分析(一)---整体架构

在Java世界中的定义是:AudioPort.java和AudioPortConfig.java,位于/frameworks/base/media/java/android/media/目录中。Track:代表的是应用层的一个播放对象,一个应用进程中可以创建多个Track。在/frameworks/base/services/core/java/com/android/server/audio/这个目录中,我并没有看到音量控制相关的类,因为它是由AudioService.java自己实现的。

2025-03-19 11:54:14 818

原创 时空(1)

在前面的内容中,我们紧随历史,领略了相对论的来龙去脉。一路走来,我们的思考与爱因斯坦当初发现相对论时的思索相差无几。回想一下,不得不承认,空间不是上演生活琐事的大舞台,时间也不是恒常流失的时间。相反,我们逐步认识到,时空是可伸缩的,是依赖于观测者的,也就是个体化的。不再有一个大钟能放之四海皆准,它被推倒了,被抛弃了。传统空间的命运也是如此。我们之所以认为它是包裹着生活的大盒子,只是因为这样做能让我们最便捷、最快速梳理身边的事情。空间也只是一个空间意识,一个想象的网格,套在运动的物体上,赋予它们位置,这样,危

2025-03-19 08:58:38 515

原创 MTK ADSP

息队列msg_idx_queue,此时会唤醒之前block在msg_idx_queue的task_common_task_loop任务并完成对相关消息的处理。audio init函数最终会调用到create_all_audio_task函数完成对所有任务的创建。DL_2ch_xx (fe)=> I2SOUTxx(be)(master) D表示down。2.audio_task包含成员变量和成员函数指针。task_common_task_loop中对IPI消息的分析后面具体分析。

2025-03-19 08:58:09 1153

原创 Android Audio基础(18)——最小缓冲区

在分析获取最小帧数前,我们先来了解几个相关的概念。帧帧(frame):表示一个完整的声音单元,所谓的声音单元是指一个采样样本。如果是双声道,那么一个完整的声音单元就是 2 个样本,如果是 5.1 声道,那么一个完整的声音单元就是 6 个样本了。帧的大小(一个完整的声音单元的数据量)等于声道数乘以采样位宽,即 frameSize = channelCount * bytesPerSample。无论是框架层还是内核层,都是以帧为单位去管理音频数据缓冲区的。在音频开发领域通常也会说采样点来对应帧这个概念。

2025-03-18 11:45:27 1116

原创 Android audio(8)-native音频服务的启动与协作(audiopolicyservice和audioflinger)

本文讲解音频系统的“核心组成:音频策略的制定者AudiopolicyService以及音频策略的执行者AudioFlinger。其它的文章深度都不高,而且独立性较强,分别讲解audiofligner和audiopolicyservice服务能够独立完成的业务功能,本篇重点讲解audioflinger和audiopolicyservice如何协同工作以及分工,共同保障音频系统的正常工作。

2025-03-18 11:42:30 1313

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除