tag 标签: 课件

相关博文
相关资源
  • 所需E币: 5
    时间: 2024-3-16 21:37
    大小: 19.95MB
    上传者: 电子阔少
    AutoCAD2010绘图技能实用教程教学课件ppt作者朱向丽.pdf
  • 所需E币: 0
    时间: 2023-11-27 11:13
    大小: 5.15KB
    上传者: 开心就很好了
    自动驾驶是高安全型应用,需要高性能和高可靠的深度学习模型,VisionTransformer是理想的选摔。现在主流的自动驾驶感知算法基本都使用了VisionTransformer相关技术,比如分割、2D/3D检测,以及最近大火的大模型(如SAM),VisionTransformer在自动驾驶领域的落地方面遍地开花。5一方面,在自动驾驶或图像处理相关算法岗位的面试题中,VisionTransformer是必考题,需要对其理论知识有深入理解,并且在项目中真实的使用过相关技术。Transformer出自于Google于2017年发表的论文《Attentionisallyouneed》,最开始是用于机器翻译,并且取得了非常好的效果。但是自提出以来,Transformer不仅仅在NLP领域大放异彩,并且在CV、RS等领域也取得了非常不错的表现。尤其是2020年,绝对称得上是Transformer的元年,比如在CV领域,基于Transformer的模型横扫各大榜单,完爆基于CNN的模型。为什么Transformer模型表现如此优异?它的原理是什么?它成功的关键又包含哪些?本文将简要地回答一下这些问题。我们知道Transformer模型最初是用于机器翻译的,机器翻译应用的输入是某种语言的一个句子,输出是另外一种语言的句子。vari*int=nilfmt.Println("i.size:",unsafe.Sizeof(i))//8vari8*int8=nilfmt.Println("i8.size:",unsafe.Sizeof(i8))//8vars*string=nilfmt.Println("s.size:",unsafe.Sizeof(s))//8varps*struct{}=nilfmt.Println("ps.size:",unsafe.Sizeof(ps))//8varsi[]int=nilvarsi1[]int=nilfmt.Println("si.size:",unsafe.Sizeof(si))//24variiinterface{}=nilfmt.Println("ii.size:",unsafe.Sizeof(ii))//16我们以生成我,爱,机器,学习,翻译成<bos>,i,love,machine,learning,<eos>这个例子做生成过程来解释。训练:把“我/爱/机器/学习”embedding后输入到encoder里去,最后一层的encoder最终输出的outputs[10,512](假设我们采用的embedding长度为512,而且batchsize=1),此outputs乘以新的参数矩阵,可以作为decoder里每一层用到的K和V;将<bos>作为decoder的初始输入,将decoder的最大概率输出词向量A1和‘i’做crossentropy(交叉熵)计算error。将<bos>,“i”作为decoder的输入,将decoder的最大概率输出词A2和‘love’做crossentropy计算error。将<bos>,“i”,“love”作为decoder的输入,将decoder的最大概率输出词A3和’machine’做crossentropy计算error。将<bos>,“i”,"love",“machine”作为decoder的输入,将decoder最大概率输出词A4和‘learning’做crossentropy计算error。将<bos>,“i”,"love",“machine”,“learning”作为decoder的输入,将decoder最大概率输出词A5和终止符做crossentropy计算error。那么并行的时候是怎么做的呢,我们会有一个mask矩阵在这叫seqmask,因为他起到的作用是在decoder编码我们的targetseq的时候对每一个词的生成遮盖它之后的词的信息。funcmain(){s:=[]string{"a","b","c"}fmt.Println("s:origin",s)changes1(s)fmt.Println("s:f1",s)changes2(s)fmt.Println("s:f2",s)changes3(s)fmt.Println("s:f3",s)}funcchanges1(s[]string){vartmp=[]string{"x","y","z"}s=tmp}funcchanges2(s[]string){//item只是一个副本,不能改变s中元素的值fori,item:=ranges{item="d"fmt.Printf("item=%s;s[%d]=%s",item,i,s[i])}}funcchanges3(s[]string){fori:=ranges{s[i]="d"}}首先我们需要为每个输入向量(也就是词向量)创建3个向量,分别叫做Query、Key、Value。那么如何创建呢?我们可以对输入词向量分别乘上3个矩阵来得到Q、K、V向量,这3个矩阵的参数在训练的过程是可以训练的。注意Q、K、V向量的维度是一样的,但是它们的维度可以比输入词向量小一点,比如设置成64,其实这步也不是必要的,这样设置主要是为了与后面的Mulit-head注意力机制保持一致(当使用8头注意力时,单头所处理的词向量维度为512/8=64,此时Q、K、V向量与输入词向量就一致了)。我们假设输入序列为英文的"ThinkingMachines"想要深度理解Attention机制,就需要了解一下它产生的背景、在哪类问题下产生,以及最初是为了解决什么问题而产生。首先回顾一下机器翻译领域的模型演进历史:机器翻译是从RNN开始跨入神经网络机器翻译时代的,几个比较重要的阶段分别是:SimpleRNN,ContextualizeRNN,ContextualizedRNNwithattention,Transformer(2017),下面来一一介绍。「SimpleRNN」:这个encoder-decoder模型结构中,encoder将整个源端序列(不论长度)压缩成一个向量(encoderoutput),源端信息和decoder之间唯一的联系只是:encoderoutput会作为decoder的initialstates的输入。这样带来一个显而易见的问题就是,随着decoder长度的增加,encoderoutput的信息会衰减。funcmain(){varc=make(chanint)fmt.Printf("c.pointer=%p\n",c)//c.pointer=0xc000022180gofunc(){c<-1addChannel(c)close(c)}()foritem:=rangec{//item:1//item:2fmt.Println("item:",item)}}funcaddChannel(donechanint){done<-2fmt.Printf("done.pointer=%p\n",done)//done.pointer=0xc000022180}在测试模型的时候,Test:decoder没有label,采用自回归一个词一个词的输出,要翻译的中文正常从encoder并行输入(和训练的时候一样)得到每个单词的embedding,然后decoder第一次先输入bos再此表中的id,得到翻译的第一个单词,然后自回归,如此循环直到预测达到eos停止标记typevisitstruct{a1 unsafe.Pointera2 unsafe.PointertypType}funcdeepValueEqual(v1,v2Value,visitedmap[visit]bool)bool{if!v1.IsValid()||!v2.IsValid(){returnv1.IsValid()==v2.IsValid()}ifv1.Type()!=v2.Type(){returnfalse}//Wewanttoavoidputtingmoreinthevisitedmapthanweneedto.//Foranypossiblereferencecyclethatmightbeencountered,//hard(v1,v2)needstoreturntrueforatleastoneofthetypesinthecycle,//andit'ssafeandvalidtogetValue'sinternalpointer.hard:=func(v1,v2Value)bool{switchv1.Kind(){casePointer:ifv1.typ.ptrdata==0{//not-in-heappointerscan'tbecyclic.//Atleast,allofourcurrentusesofruntime/internal/sys.NotInHeap//havethatproperty.Theruntimeonesaren'tcyclic(andwedon'tuse//DeepEqualonthemanyway),andthecgo-generatedonesare//allemptystructs.returnfalse}fallthroughcaseMap,Slice,Interface://Nilpointerscannotbecyclic.Avoidputtingtheminthevisitedmap.return!v1.IsNil()&&!v2.IsNil()}returnfalse}ifhard(v1,v2){//ForaPointerorMapvalue,weneedtocheckflagIndir,//whichwedobycallingthepointermethod.//ForSliceorInterface,flagIndirisalwaysset,//andusingv.ptrsuffices.ptrval:=func(vValue)unsafe.Pointer{switchv.Kind(){casePointer,Map:returnv.pointer()default:returnv.ptr}}addr1:=ptrval(v1)addr2:=ptrval(v2)ifuintptr(addr1)>uintptr(addr2){//Canonicalizeordertoreducenumberofentriesinvisited.//Assumesnon-movinggarbagecollector.addr1,addr2=addr2,addr1}//Shortcircuitifreferencesarealreadyseen.typ:=v1.Type()v:=visit{addr1,addr2,typ}ifvisited[v]{returntrue}//Rememberforlater.visited[v]=true}switchv1.Kind(){caseArray:fori:=0;i<v1.Len();i++{if!deepValueEqual(v1.Index(i),v2.Index(i),visited){returnfalse}}returntruecaseSlice:ifv1.IsNil()!=v2.IsNil(){returnfalse}ifv1.Len()!=v2.Len(){returnfalse}ifv1.UnsafePointer()==v2.UnsafePointer(){returntrue}//Specialcasefor[]byte,whichiscommon.ifv1.Type().Elem().Kind()==Uint8{returnbytealg.Equal(v1.Bytes(),v2.Bytes())}fori:=0;i<v1.Len();i++{if!deepValueEqual(v1.Index(i),v2.Index(i),visited){returnfalse}}returntruecaseInterface:ifv1.IsNil()||v2.IsNil(){returnv1.IsNil()==v2.IsNil()}returndeepValueEqual(v1.Elem(),v2.Elem(),visited)casePointer:ifv1.UnsafePointer()==v2.UnsafePointer(){returntrue}returndeepValueEqual(v1.Elem(),v2.Elem(),visited)caseStruct:fori,n:=0,v1.NumField();i<n;i++{if!deepValueEqual(v1.Field(i),v2.Field(i),visited){returnfalse}}returntruecaseMap:ifv1.IsNil()!=v2.IsNil(){returnfalse}ifv1.Len()!=v2.Len(){returnfalse}ifv1.UnsafePointer()==v2.UnsafePointer(){returntrue}for_,k:=rangev1.MapKeys(){val1:=v1.MapIndex(k)val2:=v2.MapIndex(k)if!val1.IsValid()||!val2.IsValid()||!deepValueEqual(val1,val2,visited){returnfalse}}returntruecaseFunc:ifv1.IsNil()&&v2.IsNil(){returntrue}//Can'tdobetterthanthis:returnfalsecaseInt,Int8,Int16,Int32,Int64:returnv1.Int()==v2.Int()caseUint,Uint8,Uint16,Uint32,Uint64,Uintptr:returnv1.Uint()==v2.Uint()caseString:returnv1.String()==v2.String()caseBool:returnv1.Bool()==v2.Bool()caseFloat32,Float64:returnv1.Float()==v2.Float()caseComplex64,Complex128:returnv1.Complex()==v2.Complex()default://NormalequalitysufficesreturnvalueInterface(v1,false)==valueInterface(v2,false)}}这便是encoder的整体计算流程图了,Transformer模型中堆叠了多个这样的encoder,无非就是输出连接输入罢了,常规操作。最后再附上一个Transformer的代码实现,读者有兴趣可以跟着自己复现一下Transformer模型的代码。  packagemain  import(    "log"    "sync"  )  funcinit(){    log.SetFlags(log.Lshortfile)  }  funcmain(){    lock:=sync.Mutex{}    //Go1.18新增,是一种非阻塞模式的取锁操作。当调用TryLock()时,    //该函数仅简单地返回true或者false,代表是否加锁成功    //在某些情况下,如果我们希望在获取锁失败时,并不想停止执行,    //而是可以进入其他的逻辑就可以使用TryLock()    log.Println("TryLock:",lock.TryLock())    //已经通过TryLock()加锁,不能再次加锁    lock.Lock()  }
  • 所需E币: 0
    时间: 2023-11-27 14:02
    大小: 4.52KB
    众所周知,视觉系统对于理解和推理视觉场景的组成特性至关重要。这个领域的挑战在于对象之间的复杂关系、位置、歧义、以及现实环境中的变化等。作为人类,我们可以很轻松地借助各种模态,包括但不仅限于视觉、语言、声音等来理解和感知这个世界。现如今,随着Transformer等关键技术的提出,以往看似独立的各个方向也逐渐紧密地联结到一起,组成了“多模态”的概念。多功能通过引入灵活的提示引擎,包括点、框、涂鸦(scribbles)、掩模、文本和另一幅图像的相关区域,实现多功能性;可组合通过学习联合视觉-语义空间,为视觉和文本提示组合实时查询,实现组合性,如图1所示;可交互通过结合可学习的记忆提示进行交互,实现通过掩模引导的交叉注意力保留对话历史信息;语义感知通过使用文本编码器对文本查询和掩模标签进行编码,实现面向开放词汇分割的语义感知。超大规模视觉通用感知模型由超大规模图像、文本主干网络以及多任务兼容解码网络组成,它基于海量的图像和文本数据构成的大规模数据集进行预训练,用于处理多个不同的图像、图像-文本任务。此外,借助知识迁移技术能够实现业务侧小模型部署。超大规模视觉通用感知模型面临的挑战:(1)网络参数量庞大,通常超十亿参数,训练稳定性、收敛性、过拟合等问题相较于小网络挑战大很多。(2)原始数据集包含数十亿异质低质量图片与海量文本,多步训练以利用异质的多模态多任务数据,流程复杂,存在灾难性遗忘,难以定位精度等问题。(3)实验成本高,通常需要上千块GPU并行训练数周,需要研究者有敏锐的分析能力和扎实的知识基础。(4)工程挑战多,海量数据的吞吐,大型GPU集群上的并行算法,超大参数量模型的内存管理。提示工程大多数视觉数据集由图像和相应文本标签组成,为了利用视觉语言模型处理视觉数据集,一些工作已经利用了基于模版的提示工程,text_descriptions=[f"Thisisaphotoofa{label}"forlabelincifar100.classes]  text_tokens=clip.tokenize(text_descriptions).cuda()除了此类大型视觉语言基础模型外,一些研究工作也致力于开发可以通过视觉输入提示的大型基础模型。例如,最近META推出的SAM能够执行与类别无关的分割,给定图像和视觉提示(如框、点或蒙版),指定要在图像中分割的内容。这样的模型可以轻松适应特定的下游任务,如医学图像分割、视频对象分割、机器人技术和遥感等从模型训练、模型分发、模型商业化,美图体系化地同创作者和开发者共建模型生态:(1)模型训练:提供二次训练能力,并持续不断地为创作者提供服务,包括培训、社区和模型创作大赛。(2)模型分发:创作者和开发者共建的模型可以在美图的产品内进行分发,在分发过程中持续优化模型。(3)模型商业化:行业客户可通过MiracleVision的API和SDK进行商业使用,创作者和开发者通过商业合作获得经济收益。通用视觉-语言学习的基础模型UNITER:结合了生成(例如掩码语言建模和掩码区域建模)和对比(例如图像文本匹配和单词区域对齐)目标的方法,适用于异构的视觉-语言任务。Pixel2Seqv2:将四个核心视觉任务统一为像素到序列的接口,使用编码器-解码器架构进行训练。Vision-Language:使用像BART或T5等预训练的编码器-解码器语言模型来学习不同的计算机视觉任务。模型整体结构上,抛弃了CNN,将BERT原版的Transformer开箱即用地迁移到分类任务上面,在使用大规模训练集的进行训练时,取得了极好的效果。同时,在大规模数据集上预训练好的模型,在迁移到中等数据集或小数据集的分类任务上以后,也能取得比CNN更优的性能。模型整体结构如下图所示,完全使用原始BERT的Transformer结构,主要是对图片转换成类似token的处理,原文引入了一个patch的概念,首先把图像划分为一个个的patch,然后将patch映射成一个embedding,即图中的linearprojection层,将输入转换为类似BERT的输入结构,然后加上positionembedding,这里的position是1D的,最后加上一个learnableclassificationtoken放在序列的前面,classification由MLP完成。这里我们用RAM提取了图像的语义标签,再通过将标签输入到Grounding-DINO中进行开放世界检测,最后再通过将检测作为SAM的提示分割一切。目前视觉基础大模型可以粗略的归为三类:textuallypromptedmodels,e.g.,contrastive,generative,hybrid,andconversational;visuallypromptedmodels,e.g.,SAM,SegGPT;heterogeneousmodalities-basedmodels,e.g.,ImageBind,Valley.CoCa通过将所有标签简单地视为文本,对web-scalealt-text和annotatedimages进行了从头开始端到端的预训练,无缝地统一了表示学习的自然语言监督。因此,CoCa在广泛的下游任务上实现了最先进的性能,零样本传输或最小的任务特定适应,跨越视觉识别(ImageNet,Kinetics-400/600/700,Moments-in-Time)、跨模式检索(MSCOCO、Flickr30K、MSR-VTT)、多模式理解(VQA、SNLI-VE、NLVR2)和图像字幕(MSCOCO、NoCaps)。在ImageNet分类中,CoCa获得了86.3%的zero-shottop-1准确率,frozenencoderandfinetuneclassifier是90.6%,finetuneencoder可以到91.0%。截止目前国内外已经发布了许多包括NLP,CV和多模态在内的大规模模型,但是这些模型在应用落地上还是有待进一步探究的,目前应用落地较好的有华为的盘古,在电网和金融圈都有应用;智源的悟道系列在诗词图文上都有广泛应用,可以帮助学生看图写作,根据文字生成插图等;百度的文心也发布了在金融方面的应用。但截止目前为止大模型在实际中的应用还不是很理想,大模型发展的初衷是使用一个预训练好的大模型代替一堆小作坊似的根据不同任务训练的小模型,通过模型蒸馏知识迁移等技术在小模型上使用少量数据集达到超过原来小模型性能的目标。CV大模型在应用上的一个难点是与实际应用相结合,目前社会中用的较多的视觉相关的深度学习模型主要包括物体检测,人脸识别以及缺陷检测(部分)相比NLP模型在实际中的使用少很多,因此将CV模型与实际生产相结合发现更多的应用场景很关键。另外一个CV大模型应用的难点就是如何快速高效的使用蒸馏和知识迁移技术提升下游任务的性能,这两点难题的解决在CV大模型的实际应用中都刻不容缓。总结起来,将大模型应用于更高分辨率的下游视觉任务具有以下好处:提高感知能力、改善定位精度、提升语义理解、改善细节保留和边缘清晰度、增加鲁棒性和泛化能力,以及推动研究进展。这些好处使得大模型在处理高分辨率图像时能够获得更准确、更细致和更真实的结果。随着深度学习和计算资源的不断发展,我们可以期待更先进的大模型和相关技术的出现,进一步推动计算机视觉在高分辨率图像任务中的应用和突破
  • 所需E币: 0
    时间: 2023-11-13 17:24
    大小: 3.59KB
    TensorRT部署手把手教您,跟我一起来学习。这东西就是NVidia在自家显卡上做了一个深度学习inference加速的框架,只要你把训练好的模型参数和结构告诉他,他就能自动帮你优化(硬件相关),以达到最快速度。这涉及两个问题:应该以什么模型格式把模型喂给TensorRT?如何使用TensorRT优化后的模型?对于第一个问题:现在的深度学习框架非常多,不止常用的pytorch/tensorflow,而即使是同一种框架还可以使用不同的编程语言实现。让TensorRT对每一个框架都直接支持,显然是不可能的。TensorRT只需要知道网络的结构和参数即可,它支持三种转换入口:TF-TRT,要求是TensorFlow模型ONNX模型格式使用TensorRTAPI手动把模型搭起来,然后把参数加载进去第一种不够灵活,第三种比较麻烦,所以最省事方便的就是第二种方法。本文介绍第二种。ONNX就是一个通用的神经网络格式,一个.onnx文件内包含了网络的结构和参数。甭管是用什么深度学习框架写的网络,只要把模型导出成ONNX格式,就跟原本的代码没有关系了。转成ONNX格式还没有被优化,需要再使用TensorRT读取它并优化成TensorRTEngine。优化参数也在这一步指定。对于第二个问题:得到的TensorRTEngine是硬件相关的,之后跑模型只需要运行这个Engine即可。调用TensorRTEngine需要使用TensorRTRuntimeAPI。所以整个逻辑就是:把你的模型导出成ONNX格式。把ONNX格式模型输入给TensorRT,并指定优化参数。使用TensorRT优化得到TensorRTEngine。使用TensorRTEngine进行inference。屏蔽nouveau驱动nouveau是系统自带的一个显示驱动程序,需要先将其禁用,然后再进行下一步操作,否则在安装显卡驱动时,会提示:YouappeartoberunninganXserver…,然后安装失败。分别打开如下两个文件(如果没有就创建一个),并在其中输入如下两句,然后保存。#vim/etc/modprobe.d/nvidia-installer-disable-nouveau.conf#vim/lib/modprobe.d/nvidia-installer-disable-nouveau.conf...blacklistnouveauoptionsnouveaumodeset=0重做initramfs镜像重做镜像之后启动才会屏蔽驱动,否则无效,重做时应先rm已有驱动,否则会提示无法覆盖。这一步需要确保boot文件目录的空间足够,否则会失败。建议大于400MB#cp/boot/initramfs-$(uname-r).img/boot/initramfs-$(uname-r).img.bak#dracut/boot/initramfs-$(uname-r).img$(uname-r)--force#rm/boot/initramfs-$(uname-r).img.bak;这一步可不执行如果想用YOLOv5对图像做目标检测,在将图像输入给模型之前还需要做一定的预处理操作,预处理操作应该与模型训练时所做的操作一致。YOLOv5的输入是RGB格式的3通道图像,图像的每个像素需要除以255来做归一化,并且数据要按照CHW的顺序进行排布。所以YOLOv5的预处理大致可以分为两个步骤:将原始输入图像缩放到模型需要的尺寸,比如640x640。这一步需要注意的是,原始图像是按照等比例进行缩放的,如果缩放后的图像某个维度上比目标值小,那么就需要进行填充。举个例子:假设输入图像尺寸为768x576,模型输入尺寸为640x640,按照等比例缩放的原则缩放后的图像尺寸为640x480,那么在y方向上还需要填充640-480=160(分别在图像的顶部和底部各填充80)。来看一下实现代码:cv::Matinput_image=cv::imread("dog.jpg");cv::Matresize_image;constintmodel_width=640;constintmodel_height=640;constfloatratio=std::min(model_width/(input_image.cols*1.0f),               model_height/(input_image.rows*1.0f));//等比例缩放constintborder_width=input_image.cols*ratio;constintborder_height=input_image.rows*ratio;//计算偏移值constintx_offset=(model_width-border_width)/2;constinty_offset=(model_height-border_height)/2;cv::resize(input_image,resize_image,cv::Size(border_width,border_height));cv::copyMakeBorder(resize_image,resize_image,y_offset,y_offset,x_offset,          x_offset,cv::BORDER_CONSTANT,cv::Scalar(114,114,114));//转换为RGB格式cv::cvtColor(resize_image,resize_image,cv::COLOR_BGR2RGB);格式转化要将tensorflow的pb文件转化为uff格式的文件,首先找到convert_to_uff文件,看自己用的是哪个版本的python,如果是python3,则在/usr/lib/python3.5/dist-packages/uff/bin文件夹下,如果是python2,则在/usr/lib/python2.7/dist-packages/uff/bin文件夹下我们在终端中进入end_to_end_tensorflow_mnist,运行以下指令首先使用Pytorch实现一个和上文一致的模型,即只对输入做一次池化并输出;然后将Pytorch模型转换成ONNX模型;最后将ONNX模型转换成TensorRT模型。这里主要使用了TensorRT的OnnxParser功能,它可以将ONNX模型解析到TensorRT的网络中。最后我们同样可以得到一个TensorRT模型,其功能与上述方式实现的模型功能一致。importtorch importonnx importtensorrtastrt   onnx_model='model.onnx'  classNaiveModel(torch.nn.Module):   def__init__(self):     super().__init__()     self.pool=torch.nn.MaxPool2d(2,2)    defforward(self,x):     returnself.pool(x)  device=torch.device('cuda:0')  #generateONNXmodel torch.onnx.export(NaiveModel(),torch.randn(1,3,224,224),onnx_model,input_names=['input'],output_names=['output'],opset_version=11) onnx_model=onnx.load(onnx_model)  #createbuilderandnetwork logger=trt.Logger(trt.Logger.ERROR) builder=trt.Builder(logger) EXPLICIT_BATCH=1<<(int)(   trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) network=builder.create_network(EXPLICIT_BATCH)  #parseonnx parser=trt.OnnxParser(network,logger)  ifnotparser.parse(onnx_model.SerializeToString()):   error_msgs=''   forerrorinrange(parser.num_errors):     error_msgs+=f'{parser.get_error(error)}\n'   raiseRuntimeError(f'Failedtoparseonnx,{error_msgs}')  config=builder.create_builder_config() config.max_workspace_size=1<<20 profile=builder.create_optimization_profile()  profile.set_shape('input',[1,3,224,224],[1,3,224,224],[1,3,224,224]) config.add_optimization_profile(profile) #createengine withtorch.cuda.device(device):   engine=builder.build_engine(network,config)  withopen('model.engine',mode='wb')asf:   f.write(bytearray(engine.serialize()))   print("generatingfiledone!") 
  • 所需E币: 0
    时间: 2023-9-18 18:41
    大小: 1.42KB
    上传者: huangyasir1990
    人人都能学的数据分析(16周完整版+源码+PDF课件),作为数据分析师,清晰了解数据分析的步骤是非常重要的,有助于清楚把控整个数据分析的流程那么在日常工作中,这些上下游对接的部门同事自然是分析师的面向对象,除了这些工作的合作伙伴,还有大部分精力要拿来面对自己的领导和业务方的领导,他们可能会给你提一些有挑战性的工作,即使他们属于放手型的,那你也需要主动找机会与他们沟通,毕竟向上管理是每一个职场人必备的技能。作为想要学习数据分析的人员,了解整个数据分析的流程,这样在面对一个数据分析问题的时候,知道如何去开展那么数据分析流程包含哪些环节呢?我将一次完整的数据分析流程主要分为六个环节,包括明确分析目的、数据获取、数据处理、数据分析、数据可视化、总结与建议。1、PEST分析法PEST,也就是政治(Politics)、经济(Economy)、社会(Society)、技术(Technology),能从各个方面把握宏观环境的现状及变化趋势,主要用户行业分析。2、5W2H分析法5W2H,即为什么(Why)、什么事(What)、谁(Who)、什么时候(When)、什么地方(Where)、如何做(How)、什么价格(Howmuch),主要用于用户行为分析、业务问题专题分析、营销活动等。3、SWOT分析法SWOT分析法也叫态势分析法,S(strengths)是优势、W(weaknesses)是劣势,O(opportunities)是机会、T(threats)是威胁或风险。分析师需要面对的人分析师的岗位类似于文章中的过渡句,上面承接开发、埋点、数据仓库的同事,下面对接运营、产品,商业等业务人员,如果你想最快的了解整个公司的运营模式和现状,分析师的职位是不二之选。那么在日常工作中,这些上下游对接的部门同事自然是分析师的面向对象,除了这些工作的合作伙伴,还有大部分精力要拿来面对自己的领导和业务方的领导,他们可能会给你提一些有挑战性的工作,即使他们属于放手型的,那你也需要主动找机会与他们沟通,毕竟向上管理是每一个职场人必备的技能。
  • 所需E币: 1
    时间: 2023-7-29 13:22
    大小: 8.81MB
    上传者: Argent
    电气控制与PLC应用技术课件资料合集
  • 所需E币: 1
    时间: 2023-7-13 15:26
    大小: 3.54MB
    上传者: 张红川
    华北电力大学电力系统继电保护课件.zip
  • 所需E币: 1
    时间: 2023-7-13 15:27
    大小: 3.63MB
    上传者: 张红川
    清华大学电工技术课件.zip
  • 所需E币: 1
    时间: 2023-7-13 15:28
    大小: 3.45MB
    上传者: 张红川
    邱关源电路课件.zip
  • 所需E币: 1
    时间: 2023-7-13 15:04
    大小: 1.01MB
    上传者: 张红川
    北京航空航天大学电路分析课件.zip
  • 所需E币: 1
    时间: 2023-7-13 15:25
    大小: 7.53MB
    上传者: 张红川
    东南大学电气设备故障诊断课件.zip
  • 所需E币: 1
    时间: 2023-7-11 17:32
    大小: 3.34MB
    上传者: 张红川
    Qt5.5课件.pdf
  • 所需E币: 2
    时间: 2023-7-2 23:08
    大小: 14.51MB
    上传者: Argent
    Android编程入门很简单(PPT课件)
  • 所需E币: 1
    时间: 2023-7-2 22:48
    大小: 62.5KB
    上传者: Argent
    Multisim10仿真课件简介
  • 所需E币: 2
    时间: 2023-7-2 23:14
    大小: 25.67MB
    上传者: Argent
    电工技术课件20140517出版社
  • 所需E币: 2
    时间: 2023-7-2 23:15
    大小: 8.44MB
    上传者: Argent
    高电压技术课件资料下载
  • 所需E币: 2
    时间: 2023-7-2 23:18
    大小: 21.63MB
    上传者: Argent
    教学课件李任青(基于Multisim10的电子仿真试验与设计)
  • 所需E币: 1
    时间: 2023-6-29 00:26
    大小: 1.24MB
    上传者: youyeye
    家人们好,这只是我拿来看看网站效果的东西,不用下载没什么东西的
  • 所需E币: 1
    时间: 2023-6-29 00:25
    大小: 1.14MB
    上传者: youyeye
    家人们好,这只是我拿来看看网站效果的东西,不用下载没什么东西的
  • 所需E币: 1
    时间: 2023-6-16 13:47
    大小: 239.08KB
    上传者: 张红川
    谐振型开关电源L6599课件(密码haoming).pdf