- 博客(107)
- 收藏
- 关注
原创 pythonpython爬虫预备知识二-序列化和反序列化
序列化是为了将内存中的数据保存在磁盘上或者用于传输,实现程序状态的保存和共享。反序列化反之。序列化后的变量再被反序列化回来之后,两者之间已经没有任何关系。序列化后的文件是在不同程序或者说不同语言之间传递数据的关键方法之一,可以将内容标准化为xml、json等格式,用于存储或者网络传输。
2024-08-06 21:56:07 859
原创 python爬虫预备知识一
正常的文件读取使用的过程是,打开文件,建立文件对象,读取内容或者写入内容,关闭文件对象释放资源。分离一个路径的目录名和文件名,os.path.split(r’/home/data/test.txt’),返回一个元组(‘/home/data’,’test.txt’)分离扩展名,os.path.splitext(r’/home/data/test.txt’),返回一个元组(‘/home/data/test’,’.txt’)只有name是必须得,后面的模式、缓冲是可选的,默认是读模式,默认无缓冲区。
2024-08-06 21:54:12 545
原创 python爬虫预备知识一-读写文件及IO异常
正常的文件读取使用的过程是,打开文件,建立文件对象,读取内容或者写入内容,关闭文件对象释放资源。文件读取一般分为按照字节、按照字符读取,常用方法是read()、readlines()、close()。如果是大文件,比较合适的是循环使用read(size)方法,配置文件适合使用readline()方法。只有name是必须得,后面的模式、缓冲是可选的,默认是读模式,默认无缓冲区。该参数是0时,表示没有缓冲区,是负数时代表使用默认缓冲区大小,是正数时代表缓冲区大小。read()方法是一次性读取。
2024-08-03 08:52:31 442
原创 python爬虫预备知识二-文件写入及常用方法
分离一个路径的目录名和文件名,os.path.split(r’/home/data/test.txt’),返回一个元组(‘/home/data’,’test.txt’)分离扩展名,os.path.splitext(r’/home/data/test.txt’),返回一个元组(‘/home/data/test’,’.txt’)获取当前系统平台使用的行终止符,windows使用’\r\n’,linux使用’\n’,Mac使用’\r’复制文件,oldfile只能是文件,newfile可以是文件也可以是目录。
2024-08-03 08:51:23 373
原创 python爬虫预备知识三-序列化和反序列化
序列化后的文件是在不同程序或者说不同语言之间传递数据的关键方法之一,可以将内容标准化为xml、json等格式,用于存储或者网络传输。序列化是为了将内存中的数据保存在磁盘上或者用于传输,实现程序状态的保存和共享。python中常见序列化和反序列化模块cPickle和pickle。例子4:用loads方法或者load方法将序列化文件内容反序列化。loads方法:把序列化后的文件读取的str反序列化为对象。方法将序列化后的文件内容读取为字符串,并且反序列化展示。load方法:将文件直接反序列化为对象。
2024-08-03 08:49:01 982
原创 昇思MindSpore学习入门-自动混合精度
当用户需要在单个运算,或多个模块组合配置运算精度时,Cell粒度往往无法满足,此时可以直接通过对输入数据的类型进行cast来达到自定义粒度控制的目的。
2024-07-29 21:21:57 345
原创 昇思MindSpore学习入门-静态图高级编程技巧二
在MindSpore框架内部,针对副作用的问题会插入Load算子,该算子属于虚拟算子,不需要在后端执行,不占用显存,仅用于表示需要读取全局变量的值。在图模式下,需要编译完整个图之后才将图中的各个算子下发到后端执行,使用Load算子多次读取全局变量,而不是多次使用真实算子多次保存全局变量的值,这样可以减少显存的消耗。对于将会被编译成静态计算图的函数,如Cell的construct函数、@jit修饰的函数或前两者调用的子函数,如果需要在函数内创建@jit_class所修饰的类的实例,参数要求为常量。
2024-07-28 20:47:54 637
原创 昇思MindSpore学习入门-静态图高级编程技巧
以Pangu_alpha网络为例,PipelineCell函数体中处理的network为PanGUAlphaWithLoss类的实例,为实现延迟inline,我们需要对PanGUAlphaWithLoss类的__init__函数加上@lazy_inline装饰器,以标记PanGUAlphaWithLoss类的子图结构需要被保留下来,不做inline或者延迟inline。如上面的例子,在网络脚本中,往需要延迟inline和复用子图结构的Cell类的__init__函数加上@lazy_inline装饰器。
2024-07-27 22:08:37 344
原创 昇思MindSpore学习入门-高阶自动微分
mindspore.ops模块提供的grad和value_and_grad接口可以生成网络模型的梯度。grad计算网络梯度,value_and_grad同时计算网络的正向输出和梯度。本文主要介绍如何使用grad接口的主要功能,包括一阶、二阶求导,单独对输入或网络权重求导,返回辅助变量,以及如何停止计算梯度。
2024-07-25 16:49:52 1133
原创 昇思MindSpore学习入门-数据处理管道支持python对象
与其他类型相比,Python字典类型在数据管道中不会被转换成C++中的类型,而是以引用的形式保留在数据管道中。注意,虽然目前数据管道只新增了识别字典类型的对象,但并不限制字典中的对象内容,因此也可以将其他Python类型封装进字典中并传入到数据处理管道中,以达到支持任意Python对象的目的。因此此教程主要介绍如何构造字典类型的数据输入到数据管道,并在迭代器中取得数据。当对数据集使用batch操作时,如果有一个数据列中包含有字典对象,数据处理管道会将多组样本中的字典的相同键组合在一起。值的数量和的类型)。
2024-07-24 20:59:17 1062
原创 昇思MindSpore学习入门-轻量化数据处理
基于Pipeline模式执行的最大特点是需要使用map方法,如下图中将Resize、Crop、HWC2CHW交由map调度,由其负责启动和执行给定的Transform,对Pipeline的数据进行映射变换。虽然构建数据管道可以批量处理输入数据,但是数据管道的API设计要求用户从构建输入源开始,逐步定义数据管道中的各个Transform,仅当在定义map的时候才会涉及与用户输入数据高度相关的Transform。通用Transform的Eager模式支持numpy.array类型的数据作为入参。
2024-07-23 21:23:46 481
原创 昇思MindSpore学习入门-格式转换
其目标是归一化用户的数据集,并进一步通过MindDataset接口实现数据的读取,并用于训练过程。其中数据文件包含文件头、标量数据页、块数据页,用于存储用户归一化后的训练数据,且单个MindSpore Record文件建议小于20G,用户可将大数据集进行分片存储为多个MindSpore Record文件。本示例主要以包含100条记录的CV数据集并将其转换为MindSpore Record格式为例子,介绍如何将CV类数据集转换成MindSpore Record文件格式,并使用MindDataset接口读取。
2024-07-22 20:07:24 678
原创 昇思MindSpore学习入门-数据采样
用户可以自定义采样器,并把它应用到数据集上。__iter__ 模式用户可以继承Sampler基类,通过实现__iter__方法来自定义采样器的采样方式。下面的样例定义了一个从下标0至下标9间隔为2采样的采样器,将其作用于自定义数据集,并展示已读取数据。从上面的打印可以看出,自定义的采样器读取了下标为0、2、4、6、8的样本数据,这与自定义采样器的采样目的一致。
2024-07-21 07:57:30 579
原创 昇思MindSpore学习入门-损失函数
自定义损失函数的方法有两种:一是基于nn.Cell来定义损失函数;二是nn.LossBase来定义损失函数。nn.LossBase继承自nn.Cell,额外提供了get_loss方法,利用reduction参数对损失值求和或求均值,输出一个标量。下面将分别使用继承Cell和继承LossBase的方法,来定义平均绝对误差损失函数(Mean Absolute Error,MAE),MAE算法的公式如下所示:上式中𝑓(𝑥)为预测值,𝑦为样本真实值,𝑙𝑜𝑠𝑠为预测值与真实值之间距离的平均值。
2024-07-18 07:28:35 1034
原创 昇思MindSpore学习入门-参数初始化
通常情况下,MindSpore提供的默认参数初始化可以满足常用神经网络层的初始化需求,在遇到需要自定义的参数初始化方法时,可以继承Initializer自定义参数初始化方法。
2024-07-11 18:44:57 439
原创 昇思MindSpore学习入门-CELL与参数二
通常情况下,MindSpore提供的神经网络层接口和function函数接口能够满足模型构造需求,但由于AI领域不断推陈出新,因此有可能遇到新网络结构没有内置模块的情况。此时我们可以根据需要,通过MindSpore提供的function接口、Primitive算子自定义神经网络层,并可以使用Cell.bprop方法自定义反向。下面分别详述三种自定义方法。使用function接口构造神经网络层MindSpore提供大量基础的function接口,可以使用其构造复杂的Tensor操作,封装为神经网络层。
2024-07-10 19:50:49 697
原创 昇思MindSpore学习入门-CELL与参数一
Cell作为神经网络构造的基础单元,与神经网络层(Layer)的概念相对应,对Tensor计算操作的抽象封装,能够更准确清晰地对神经网络结构进行表示。除了基础的Tensor计算流程定义外,神经网络层还包含了参数管理、状态管理等功能。而参数(Parameter)是神经网络训练的核心,通常作为神经网络层的内部成员变量。本节我们将系统介绍参数、神经网络层以及其相关使用方法。
2024-07-09 11:53:06 294
原创 昇思MindSpore学习入门-模型模块自定义
在定义模型的过程中,construct方法内可使用Python语法进行模型结构的任意构造,如条件、循环等控制流语句。神经网络模型由各种层(Layer)构成,MindSpore提供构造神经网络层的基础单元Cell,基于Cell进行神经网络封装。下面使用Cell构造经典模型AlexNet。如图所示,AlexNet由5个卷积层与3个全连接层串联构成,我们使用mindspore.nn提供的神经网络层接口进行构造。完成模型构造后,我们构造一个单样本数据,将其送入实例化的AlexNet中,即可求得正向结果。
2024-07-08 08:53:31 374
原创 昇思MindSpore学习入门-评价指标
自定义Metrics函数需要继承mindspore.train.Metric父类,并重新实现父类中的clear方法、update方法和eval方法。clear:初始化相关的内部参数。update:接收网络预测输出和标签,计算误差,每次step后并更新内部评估结果。eval:计算最终评估结果,在每次epoch结束后计算最终的评估结果。平均绝对误差(MAE)算法如式(1)所示:下面以简单的MAE算法为例,介绍clear、update和eval三个函数及其使用方法。
2024-07-06 21:17:30 390
原创 昇思MindSpore学习入门-回调机制
当聊到回调Callback的时候,大部分用户都会觉得很难理解,是不是需要堆栈或者特殊的调度方式,实际上我们简单的理解回调:假设函数A有一个参数,这个参数是个函数B,当函数A执行完以后执行函数B,那么这个过程就叫回调。Callback是回调的意思,MindSpore中的回调函数实际上不是一个函数而是一个类,用户可以使用回调机制来观察训练过程中网络内部的状态和相关信息,或在特定时期执行特定动作。例如监控损失函数Loss、保存模型参数ckpt、动态调整参数lr、提前终止训练任务等。
2024-07-05 12:49:01 716
原创 昇思MindSpore学习入门-高阶封装
可以使用Model的eval接口进行模型评估,直接输出评估结果,无需手动调用评价指标的clear、update、eval函数等。另一方面,Model提供了很多高阶功能,如数据下沉、混合精度等,在不借助Model的情况下,使用这些功能需要花费较多的时间仿照Model进行自定义。通过MindSpore提供的model.fit接口可以方便地进行网络的训练与评估,LossMonitor可以监控训练过程中loss值的变化。是MindSpore提供的高阶API,可以进行模型训练、评估和推理。定义损失函数和优化器。
2024-07-04 10:41:45 465
原创 昇思MindSpore学习入门-静态图像加速
AI编译框架分为两种运行模式,分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行,但也支持手工切换为静态图模式。
2024-07-03 10:04:40 941
原创 昇思MindSpore学习入门-保存与加载
在训练网络模型的过程中,实际上我们希望保存中间和最后的结果,用于微调(fine-tune)和后续的模型推理与部署,本章节我们将介绍如何保存与加载模型。
2024-07-02 20:21:45 219
原创 昇思MindSpore学习入门-模型训练
模型优化(Optimization)是在每个训练步骤中调整模型参数以减少模型误差的过程。优化器内部定义了模型的参数优化过程(即梯度如何更新至模型参数),所有优化逻辑都封装在优化器对象中。除了梯度本身,这两个因子直接决定了模型的权重更新,从优化本身来看,它们是影响模型性能收敛最重要的参数。超参(Hyperparameters)是可以调整的参数,可以控制模型训练优化的过程,不同的超参数值可能会影响模型训练和收敛速度。损失函数会评估预测结果与目标值的相异程度,模型训练的目标即为降低损失函数求得的误差。
2024-07-02 07:29:07 817
原创 昇思MindSpore学习入门-函数式自动微分
神经网络的训练主要使用反向传播算法,模型预测值(logits)与正确标签(label)送入损失函数(loss function)获得loss,然后进行反向传播计算,求得梯度(gradients),最终更新至模型参数(parameters)。grad和value_and_grad提供has_aux参数,当其设置为True时,可以自动实现前文手动添加stop_gradient的功能,满足返回辅助数据的同时不影响梯度计算的效果。通常我们会将函数的loss设置为函数的第一个输出,其他的输出即为辅助数据。
2024-06-30 12:05:58 775
原创 昇思MindSpore学习心得入门-网络构建
当我们定义神经网络时,可以继承nn.Cell类,在__init__方法中进行子Cell的实例化和状态管理,在construct方法中实现Tensor操作。构建完成后,实例化Network对象,并查看其结构。构造一个输入数据,直接调用模型,可以获得一个二维的Tensor输出,其包含每个类别的原始预测值。在此基础上,我们通过一个nn.Softmax层实例来获得预测概率。
2024-06-29 22:35:58 393
原创 昇思MindSpore学习心得入门-数据变换Transforms
通常情况下,直接加载的原始数据并不能直接送入神经网络进行训练,此时我们需要对其进行数据预处理。MindSpore提供不同种类的数据变换(Transforms),配合数据处理Pipeline来实现数据预处理。所有的Transforms均可通过map方法传入,实现对指定数据列的处理。mindspore.dataset提供了面向图像、文本、音频等不同数据类型的Transforms,同时也支持使用Lambda函数。下面分别对其进行介绍。
2024-06-28 23:29:37 670
原创 昇思MindSpore学习心得入门-数据集Dataset
mindspore.dataset模块提供了一些常用的公开数据集和标准格式数据集的加载API。对于MindSpore暂不支持直接加载的数据集,可以构造自定义数据加载类或自定义数据集生成函数的方式来生成数据集,然后通过GeneratorDataset接口实现自定义方式的数据集加载。GeneratorDataset支持通过可随机访问数据集对象、可迭代数据集对象和生成器(generator)构造自定义数据集,下面分别对其进行介绍。
2024-06-27 14:56:23 709
原创 昇思MindSpore学习心得入门-张量
张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。在某些应用场景中(比如推荐系统、分子动力学、图神经网络等),数据的特征是稀疏的,若使用普通张量表征这些数据会引入大量不必要的计算、存储和通讯开销。张量之间有很多运算,包括算术、线性代数、矩阵处理(转置、标引、切片)、采样等,张量运算和NumPy的使用方式类似,下面介绍其中几种操作。稀疏张量是一种特殊张量,其中绝大部分元素的值为零。
2024-06-26 23:16:48 1012
原创 昇思MindSpore学习心得入门-构建训练预测加载20240625
mindspore.nn类是构建所有网络的基类,也是网络的基本单元。当用户需要自定义网络时,可以继承nn.Cell类,并重写__init__方法和construct方法。__init__包含所有网络层的定义,construct中包含数据(训练过程需多次迭代数据集,一次完整的迭代称为一轮(epoch)。在每一轮,遍历训练集进行训练,结束后使用测试集进行预测。打印每一轮的loss值和预测准确率(Accuracy),可以看到loss在不断下降,Accuracy在不断提高。模型训练完成后,需要将其参数进行保存。
2024-06-25 22:26:08 284
原创 昇思MindSpore学习心得入门
蓝色方框往上的内容跟算法开发相关的用户更加贴近,包括存放大量的AI算法模型库ModelZoo,提供面向不同领域的开发工具套件MindSpore DevKit,另外还有高阶拓展库MindSpore Extend,这里面值得一提的就是MindSpore Extend中的科学计算套件MindSciences,MindSpore首次探索将科学计算与深度学习结合,将数值计算与深度学习相结合,通过深度学习来支持电磁仿真、药物分子仿真等等。等第三方前端的对接工作,引入更多的第三方生态。
2024-06-24 21:41:11 565
原创 python的random模块三choices和shuffle()
cum_weights:可选参数。必须是一个数字序列,长度必须和population相同。表示累计权重,即前n个元素被选中的概率,如果指定了cum_weights,那么不能同时指定weights。weights:可选参数。必须是一个数字序列,长度必须和population相同。表示每个元素被选中的概率,可以是小数,但必须大于等于0。population:必须是一个序列,可以是列表,元组,字符串等等。表示要选取的元素个数,默认值是1。随机生成序列,每一个数字出现的概率都是。,其他数字被选中的概率是。
2024-06-15 14:07:01 627
原创 random模块二
step -- 可选, 一个整数,指定步长,默认值为 1。start -- 可选, 一个整数,指定开始值,默认值为 0。从列表list1中随机选择一个元素: 1。从列表list1中随机选择一个元素: 2。从列表list1中随机选择一个元素: 2。从列表list1中随机选择一个元素: 1。从列表list1中随机选择一个元素: 2。从字符串中随机选择一个元素: h。指定起止位置和步长: 32。指定起止位置和步长: 22。指定起止位置和步长: 37。指定起止位置和步长: 7。指定起止位置和步长: 7。
2024-06-06 23:23:59 443
原创 random模块一
以10为种子: 0.20609823213950174。以0.1为种子: 0.8062579873336703。以0.1为种子: 0.8062579873336703。以0.1为种子: 0.8062579873336703。以0.1为种子: 0.8062579873336703。以0.1为种子: 0.8062579873336703。以10为种子: 0.5714025946899135。以10为种子: 0.4288890546751146。以10为种子: 0.81332125135732。
2024-05-29 20:42:38 825
原创 os模块概述及常用方法
os模块是用来处理文件和目录的。支持windowsuniux等不同系统。当前路径os.chdir(指定路径)改变到指定路径os.listdir(路径参数)列出当前路径下所有文件及目录os.walk(路径参数[,topdown=true][,onerror=None][,followlinks=Flase])遍历目录下所有文件夹及子文件夹,获得路径、文件夹列表(返回list)、文件列表(返回list)组成的三元组,topdown默认true从根目录开始遍历;
2024-05-28 23:25:13 347
原创 (CDA数据分析师笔记)第六章 业务分析方法十五
柱形图是分类数据的图。区别在于,直方图横轴是数轴,按照数轴顺序排列,且要求数据连续,各直方图中间无间隔。箱线图(盒须图)由一个箱子、两条线构成。数据指标由最大值、最小值、上四分位、下四分位、中位数5个。将各类别数据的频数或者频率画成条形,横置的称为条形图,竖置的称为柱形图。类似箱线图的实用图:K线图:由最高价、最低价、开盘价、收盘价构成。中间挖空得到环形图,环形图可以展示多个总体或样本的数据。峰态:数据分布的尖峰扁平程度。散点图:描述变量间的相关关系。偏态:数据分布的偏斜程度。线图:描述量的变化情况。
2024-05-25 23:08:40 217
原创 (CDA数据分析师笔记)第六章 业务分析方法十四
四分位差的性质:不受极端值的影响;是一个局部指标,衡量的是处于中间50%的数据的离散程度,四分位差越大说明中间50%的数据越分散。极差的性质:①极差是离散程度最简单的测量方法,但易受极端值的影响。②极差越大,通常说明数据范围越大,数据越分散。根据平均差计算的离散系数也称为平均差系数,根据标准差计算的离散系数称为标准差系数。分类数据的离散程度常用指标:异众比率,一组数据中,非众数的频数占总数据个数的比重。②一组数据中异众比率越大,众数的代表性越大。样本的自由度是指在一组样本数据中,能自由取值的数据的个数。
2024-05-22 23:10:19 436
原创 (CDA数据分析师笔记)第六章 业务分析方法十三
常用指标平均数,又称为均值、期望。分为算术平均数、调和平均数、几何平均数、平方平均数。数据的描述性统计分析常从数据的集中趋势、离散程度、分布形态3反面着手。数据平方的算术平均数的算术平方根,常用符号Q表示。根据是否分组分为简单调和平均数和加权调和平均数。集中趋势描述数据向其中心值靠拢的趋势。分为简单平方平均数和加权平方平均数。数据乘积的个数方根,用符号G表示。简单几何平均数和加权几何平均数。特点:不受极端值影响,不唯一。是数据倒数的算术平均数的倒数。
2024-05-21 09:03:27 274
原创 (CDA数据分析师笔记)第六章 业务分析方法十二
混合截面数据:既有横截面数据的特点又有时间序列数据的特点,但是每一时间点的样本不同。如:人行自1999年起,没季度不同地区储户的意见,不同季度构成时间序列,而每个季度调查的样本构成横截面,又因为储户人群都是流动的,所以每个季度调查的样本是不同。由低级到高级:分类数据、顺序数据、数值数据,数据分析中不同的分析方法,低级数据的方法高级数据可以用,反之不可以。按照与时间关系不同划分:横截面数据、时间序列数据、混合截面数据、面板数据。调查数据、实验数据。横截面数据:相同或相近时间点观测到的不同对象的数据。
2024-05-20 22:53:07 366
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人