tag 标签: 2024

相关资源
  • 所需E币: 0
    时间: 2024-5-7 14:49
    大小: 2.62KB
    1、WPF基础叙述:WPF(WindowsPresentationFoundation)是微软推出的基于Windows的用户界面框架,属于.NETFramework3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。2、WPF布局原则①一个窗口中只能包含一个元素②不应显示设置元素尺寸③不应使用坐标设置元素的位置④可以嵌套布局容器3、WPF布局容器①StackPanel:水平或垂直排列元素、Orientation属性分别:Horizontal/Vertical②WrapPanel:水平或垂直排列元素、针对剩余空间不足会进行换行或换列进行排列③DockPanel:根据容器的边界、元素进行Dock.Top、Left、Right、Bottom设置④Grid:类似table表格、可灵活设置行列并放置控件元素、比较常用⑤UniformGrid:指定行和列的数量,均分有限的容器空间⑥Canvas:使用固定的坐标设置元素的位置、不具备锚定停靠等功能。4、学习WPF的基础知识:1)  WPF是微软提供的一种用来开发“桌面应用”的技术(框架),这项技术本身和C#没有关系,必须会的是xaml语法。2)  对XML、HTML、XHTML、ASP.NET之类的“标准通用标记语言”,对于学习是有所帮助的。3)  有WinForm或ASP.NET经验,主要是对控件事件的处理要有所了解。4)  具备面向对象的思想:在WPF中,经常要灵活运用各种继承关系、多态、重载等。5)  DataBinding要有所了解:Binding是WPF的一大亮点。5、C++/CLI下创建WPF项目的方法由于WPF不仅仅支持C#/VB开发,还支持其他语言,比如:C++、F#等开发,于是大白我最近花了点时间摸索了一下,本文主要介绍C++/CLI下创建WPF项目的方法。我使用的开发环境是:Win10x64+VisualStudio2019(16.6.1版本)。今天我们需要使用C++/CLI,算是C++的一个子集吧。要能正常使用C++/CLI,首先需要确保你安装了C++/CLIbuild套件(见下图),同时还需要确保你安装好了VisualC++相应版本的运行库。进入控制面板,找到VisualStudio2019,右击"修改",然后切换到"独立组件"(Individualcomponents)这个选项卡。如果没安装,勾选后安装一下即可。接下来我们可以创建项目了,建议选用模板CLREmptyProject(.NETFramework),解决方案和项目名可以都用CppWpfDemo。这时一个空项目就创建完成了。此时查看Project的属性,ConfigrationProperties->"C/C++"->"AllOptions",输入"common"进行搜索,确保选中的是CommonLanguageRuntimeSuppor(/clr).6、创建应用程序项目第一步是创建包含应用程序定义、两个页面以及图像的应用程序基础结构。使用VisualBasic或VisualC#创建名为ExpenseIt的新WPF应用程序项目:打开VisualStudio,然后在“开始”菜单下选择“创建新项目”。“创建新项目”对话框随即打开。在“语言”下拉列表中,选择“C#”或“VisualBasic”。然后选择“WPF应用(.NETFramework)”模板,然后选择“下一步”。“配置新项目”对话框随即打开。输入项目名称ExpenseIt,然后选择“创建”。VisualStudio将创建该项目,并打开名为MainWindow.xaml的默认应用程序窗口的设计器。打开Application.xaml(VisualBasic)或App.xaml(C#)。此XAML文件定义WPF应用程序以及任意应用程序资源。还可以使用此文件指定在应用程序启动时自动显示的UI(在本例中是MainWindow.xaml)。XAML在VisualBasic中应如下所示:<Applicationx:Class="Application"  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  StartupUri="MainWindow.xaml">  <Application.Resources>       </Application.Resources></Application>在C#中如下所示:<Applicationx:Class="ExpenseIt.App"   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   StartupUri="MainWindow.xaml">  <Application.Resources>       </Application.Resources></Application>打开MainWindow.xaml。此XAML文件是应用程序的主窗口,显示在页面中创建的内容。Window类定义窗口属性(例如标题、大小或图标),并处理事件(例如关闭或隐藏)。
  • 所需E币: 0
    时间: 2024-5-9 09:32
    大小: 2.65KB
    上传者: 开心就很好了
    Solidity简介Solidity是一种静态类型、面向合约的高级编程语言,专门为编写智能合约而设计,它被用于eth和其他兼容区块链平台。Solidity语言受到了C++、Python和JavaScript等语言的影响,旨在提供一种安全、易于理解的方式来创建和管理智能合约。特点静态类型:Solidity是一种静态类型语言,这意味着所有变量的类型在编译时都必须明确指定。面向合约:Solidity中的主要构建块是合约(Contracts),它们类似于面向对象编程中的类。合约可以包含状态变量、函数、事件、修饰符等。继承:Solidity支持多重继承,允许合约继承其他合约的属性和行为。兼容EVM:Solidity编写的智能合约被编译成EVM(虚拟机)字节码,这使得它们可以在eth网络上部署和执行。什么是智能合约?智能合约(Smartcontract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1995年由NickSzabo首次提出。智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。简单地说,智能合约可以理解为一个自执行的协议。智能合约可以自动处理协议的履行、管理、以及支付。例如,可以编写这样一个智能合约:本月底之前,老王转账给小张1个以太币,这个智能合约部署后,就会在月底之前,自动把老王的1个以太币转账给小张,无需人为干预。关键零件:1.逻辑:Solidity允许使用if-else语句、for和while循环以及其他逻辑运算符,如and、or、not。2.作用域:Solidity具有全局、契约和函数级别的作用域。每个变量或函数都有一个特定的范围,在该范围内可以访问或修改它。3.模式:Solidity具有可用于编写智能合约的通用设计模式,例如Open-ClosePrinciple和PullPayment模式。4.函数:Solidity支持内部和外部函数。内部函数只能被同一合约内的其他函数调用,而外部函数可以被任何合约或外部调用。5.结构:Solidity允许创建自定义数据结构,例如结构和数组。6.库:Solidity支持库的使用,库是可以被多个合约调用的可重用代码块。让我们亲自动手,使用代码示例和解释来解释这些关键组件中的每一个。以下是用Solidity编写的逻辑示例。functioncheckAge(uintage)publicpurereturns(bool){  if(age>=18){ //thislinechecksiftheinputageisgreaterthanorequalto18    returntrue;  //iftheaboveconditionismet,itreturnstrue  }else{    returnfalse; //iftheaboveconditionisnotmet,itreturnsfalse  }}该函数具有public和pure可见性,这意味着它不读取或修改状态变量,仅使用传递给它的参数或其中存在的局部变量返回值。它可以在编译期间从外部调用而不会产生任何副作用。如果年龄大于或等于18岁,则该函数还返回一个布尔值true,否则返回一个布尔值false。很简单,对吧?现在让我们在下面的示例中编写一些Solidity范围。contractEnitandev{  uintprivateage=25; //thislinedeclaresaprivatevariableoftypeuintcalledageandassignsitthevalue25  functiongetAge()publicviewreturns(uint){ //thisfunctionispublicandread-only    returnage; //thislinereturnsthevalueoftheprivatevariableage  }}Solidity值类型布尔(bool):可能的取值为字符常量值true或false整型(int/uint):分别表示有符号和无符号的不同位数的整型变量;支持关键字uint8到uint256(无符号,从8位到256位)以及int8到int256,以8位为步长递增定长浮点型(fixed/ufixed):表示各种大小的有符号和无符号的定长浮点型;在关键字ufixedMxN和fixedMxN中,M表示该类型占用的位数,N表示可用的小数位数地址(address):存储一个20字节的值(以太坊地址大小)定长字节数组:关键字有bytes1,bytes2,bytes3,…,bytes32枚举(enum):一种用户可以定义类型的方法,与C语言类似,默认从0开始递增,一般用来模拟合约的状态函数(function):一种表示函数的类型
  • 所需E币: 0
    时间: 2024-5-13 13:48
    大小: 2.29KB
    AIAgent的定义与特点AIAgent是指能够自主地感知环境、进行决策、执行动作,并与环境进行交互的智能体。AIAgent通常具有以下特点:自主性:AIAgent能够独立地进行感知、决策和行动,无需人工干预。目标导向:AIAgent的行为是目标驱动的,其目标可以是完成特定任务、优化特定指标或学习新的知识。适应性:AIAgent能够根据环境的变化调整自己的行为,以适应不同的情况。学习能力:AIAgent能够通过与环境的交互学习新的知识和技能,并不断改进自己的行为。AIAgent在各个领域都有广泛的应用,以下是其中一些应用案例:1.医疗保健:AlAgent可以帮助医生诊断疾病、分析病理切片和制定治疗方案。此外,它们还可以协助护士进行病人监护和记录病历,提高医疗保健的效率和质量。2.金融服务:AlAgent可以帮助银行和保险公司进行风险评估、信用评级和欺诈检测。它们还可以为客户提供个性化的金融咨询服务,提高客户满意度和忠诚度。3.制造业:AlAgent可以帮助工厂自动化生产线进行实时监控、故障诊断和预测性维护。它们还可以协助工程师进行设计和优化生产流程,提高生产效率和产品质量。4.智慧交通:AlAgent可以帮助交通管理部门优化交通流量、降低拥堵和提高交通安全。它们还可以协助驾驶员进行自动驾驶和辅助驾驶,提高道路交通安全性和行车效率。代表性模型:简单反射智能体:行为直接由当前感知决定。具有内部状态的智能体:基于观察历史和当前的感知来决定行动。目标导向智能体:行动旨在实现定义明确的目标。效用基础智能体:评估可能行动的效用,并选择效用最大的行动。分类智能体按照其复杂性和功能可以被分类为:基于规则的智能体:遵循预定义的规则做出反应。学习型智能体:能够从数据中学习并优化其行为。自主智能体:具备一定程度的自我决策能力,能够在没有人类干预的情况下操作。一个精简的Agent决策流程,用函数表达式:Agent:P(感知)—>P(规划)—>A(行动)类似人类「做事情」的过程,Agent的核心功能,可以归纳为三个步骤的循环:感知(Perception)、规划(Planning)和行动(Action)。感知(Perception)是指Agent从环境中收集信息并从中提取相关知识的能力,规划(Planning)是指Agent为了某一目标而作出的决策过程,行动(Action)是指基于环境和规划做出的动作。其中,Policy是Agent做出Action的核心决策,而行动又通过观察(Observation)成为进一步Perception的前提和基础,形成自主地闭环学习过程。这一过程就像马克思主义的「实践论」:“认识从实践开始,经过实践得到了理论的认识,再回到实践中去。”Agent也在知行合一中进化。AgentAI智能体如何实现超进化呢?其实主要是通过机器学习和深度学习等技术实现自我优化和知识积累主要有以下几个方面:一、数据收集与预处理大量数据:智能体需要获取丰富的数据,包括各种场景下的信息。数据清洗:对数据进行清理和预处理,确保数据的质量和准确性。二、模型训练机器学习算法:利用各种机器学习算法,如监督学习、无监督学习等,对数据进行训练。深度学习网络:构建深度神经网络,如卷积神经网络、循环神经网络等,来学习数据中的模式和规律。三、自我优化参数调整:根据训练结果,不断调整模型的参数,以提高性能。超参数优化:通过试验和调整超参数,找到最优的模型配置。
  • 所需E币: 0
    时间: 2024-2-28 12:01
    大小: 3.42KB
    Kubernetes,简称K8s,是一个开源系统,用于自动化部署、扩展和管理容器化应用程序。它提供了基本机制来部署、维护和扩展应用程序,支持跨多个主机的容器应用。K8s是Go语言开发的,建立在Docker之上,可以看作是Docker的上层架构。它的主要功能包括应用部署、维护、扩展,集群管理、安全防护、准入机制、多应用支撑、服务注册与发现、智能负载均衡、故障发现与自我修复、服务滚动升级、在线扩容、资源配额管理等。K8s通过容器的方式来管理应用程序,使得容器集群能够运行在用户期望的状态,并解决容器跨机器通信的问题。DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。容器技术是k8s中最关键的技术,通过容器技术可以将一台实体服务器资源虚拟化为多个隔离的容器,容器之间有较高的隔离级别,可像一台独立的服务器般部署程序并对外提供服务。简单来说,可以把容器简单视为一个特殊的进程,该进程与其他进程相隔离,在自己的命名空间下使用网络接口和文件,并且该进程只能使用硬件的部分资源。容器技术的基础是linux命令空间和cgroups,其中:(1)容器的隔离是基于linux命令空间来实现的,命名空间提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的命名空间中,来实现资源隔离的目的。不同命名空间的进程,可以享有一份独立的系统资源。(2)硬件资源的限制是通过cgroups实现的,cgroups是一个linux内核功能,它被用来限制一个进程或者一组进程的资源(cpu、内存、带宽等)使用,被限制的进程不能过分使用为其他进程保留的资源。容器技术与微服务概念相得映彰,微服务概念强调将一个大的系统拆分为若干微服务,每个微服务实现系统的特定功能,通过这个方式来减少系统的耦合。一般而言,一个微服务所需的系统资源并不需要很多,使用一个容器来部署一个微服务便成了一件很合适的事情,毕竟容器创建简单、资源可控,隔离性好、扩容方便。Kubernetes中的CRD(CustomResourceDefinition,自定义资源定义)允许用户扩展API服务器以支持新的自定义资源。使用CRD,用户可以定义自己的KubernetesAPI资源类型,并在Kubernetes集群中创建、管理和操作这些自定义资源。CRD的创建和使用通常涉及以下几个步骤:创建CRD定义:创建一个CRD定义文件,例如customresource.yaml,其中包含自定义资源的结构和属性。CRD定义文件使用KubernetesAPI对象的规范来定义自定义资源的模式、版本和行为。apiVersion:apiextensions.k8s.io/v1kind:CustomResourceDefinitionmetadata: name:mycustomresources.samples.example.comspec: group:samples.example.com versions:  -name:v1   served:true   storage:true scope:Namespaced names:  plural:mycustomresources  singular:mycustomresource  shortNames:  -mcrkube-scheduler调度过程和原理kube-scheduler是Kubernetes集群中的一个核心组件,负责根据预定义的调度策略将Pod分配到集群中的合适节点上运行。下面是kube-scheduler的调度过程和原理的简要描述:获取未调度的Pod:kube-scheduler会定期从KubernetesAPI服务器获取所有未调度的Pod的列表。筛选:kube-scheduler会对未调度的Pod进行筛选,剔除不符合调度要求的Pod。这包括检查系统保留节点、Pod的亲和性和反亲和性要求(如NodeSelector、NodeAffinity等)、污点(Taints)等。只有符合筛选条件的Pod才会进入下一步的调度过程。评分:对于剩下的可调度Pod,kube-scheduler会对每个节点进行评分,根据一系列算法为每个节点计算出一个分数。评分算法可以根据用户自定义的策略进行配置,常见的因素包括节点资源利用率、节点的可用性、亲和性和反亲和性等。选择节点:根据评分结果,kube-scheduler会选择具有最高分数的节点来运行Pod。如果多个节点具有相同的最高分数,kube-scheduler会根据预定义的调度策略(如最少负载、随机选择等)来决定最终的调度结果。更新调度结果:获取到调度结果后,kube-scheduler将更新Pod的调度信息,并将其更新到KubernetesAPI服务器中。这样其他组件(如kubelet)就会根据调度结果来将Pod放置到相应的节点上运行。监控和重调度:kube-scheduler会定期监控已调度的Pod以确保其正常运行。如果发现某个节点不可用或Pod处于非运行状态,kube-scheduler将重新进行调度,将Pod迁移到其他合适的节点上。kubernetes内部需要5套证书,手动创建或者自动生成,分别为:1.etcd内部通信需要一套ca和对应证书。2.etcd与外部通信也要有一套ca和对应证书。3.APIserver间通信需要一套证书。4.apiserver与node间通信需要一套证书。5.node和pod间通信需要一套ca证书。目前来说还不能实现把所有的业务都迁到kubernetes上,如存储,因为这个是有状态应用,出现错误排查很麻烦,所以目前kubernetes主要是运行无状态应用。所以一般而言,负载均衡器运行在kubernetes之外,nginx或者tomcat这种无状态的应用运行于kubernetes集群内部,而数据库如mysql,zabbix,zoopkeeper等有状态的,一般运行于kubernetes外部,通过网络连接,实现kubernetes集群的pod调用这些外部的有状态应用。Kubernetes引入Pod主要基于下面两个目的:-可管理性有些容器天生就是需要紧密联系,一起工作。Pod提供了比容器更高层次的抽象,将它们封装到一个部署单元中。Kubernetes以Pod为最小单位进行调度、扩展、共享资源、管理生命周期。-通信和资源共享Pod中的所有容器使用同一个网络namespace,即相同的IP地址和Port空间。它们可以直接用localhost通信。同样的,这些容器可以共享存储,当Kubernetes挂载volume到Pod,本质上是将volume挂载到Pod中的每一个容器。
  • 所需E币: 0
    时间: 2024-3-14 16:01
    大小: 3.03KB
    一、什么是系统架构设计师系统架构设计师,属于计算机技术与软件(高级)专业技术资格。考试合格人员能够根据系统需求规格说明书,结合应用领域和技术发展的实际情况,考虑有关约束条件,设计正确、合理的软件架构,确保系统架构具有良好的特性;能够对项目的系统架构进行描述、分析、设计与评估;能够按照相关标准编写相应的设计文档;能够与系统分析师、项目管理师相互协作、配合工作;具有高级工程师的实际工作能力和业务水平。二、系统架构的概述自1946年世界上第一台计算机诞生,对人类的计算工具产生了革命性变革。冯诺依曼提出了计算机由运算器,控制器,存储器,输入和输出设备五部分组成,计算机的内部采用二进制。计算机是全球信息化发展的核心载体,随着各种基础技术突飞猛进的发展,信息系统的规模越来越大、复杂程度越来越高、系统的结构显得越来越重要。如果在搭建系统时未能设计出优良的结构,势必对系统的可靠性、安全性、可移植性、可扩展性、可用性和可维护性等方面产生重大影响。因此,系统架构(SystemArchitecture)是系统的一种整体的高层次的结构表示,是系统的骨架和根基,也决定了系统的健壮性和生命周期的长短。系统架构设计师是承担系统架构设计的核心角色,他不仅是连接用户需求和系统进一步设计与实现的桥梁,也是系统开发早期阶段质量保证的关键角色。随着系统规模和复杂性的提升,系统架构设计师在整个项目研制中的主导地位愈加重要。可以说,系统架构师就是项目的总设计师,他是一个既需要掌控整体又需要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的总体设计人员;他要确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员;他要掌握技术团队的能力需要,给出项目管理方法,采用合适生命周期模型,具备以自身为核心形成团队的能力,并在项目进度计划和经费分配等方面开展评估,以预防项目风险。三、系统架构设计师考试时间2024年开始系统架构设计师和系统分析师一年都有两次考试机会,分别在上半年和下半年。这样的考试时间安排,对于技术同学来说,是一个好消息。因为这样的时间安排,可以让你有更多的机会来备考,而不是像以前一样,一年只有一次考试机会,错过了就要等一年。2024年上半年系统架构设计师报名时间是3月18日,考试时间极大概率是5月25日。四、考试难度大吗不要被考试难度吓到,从难度上来说并不是一门难道很高的考试,但是每年的通过率可能只有15%左右。个人认为,究其原因因为架构作为一门分三科单独划线的考试(各科满分75,45分通过),很多应试者因为复习时间分配不当,导致某些科目复习不到位,从而单科线未过,满盘皆输,非常可惜。因此我从个人角度分享两个应试技巧。一个是以【真题为纲】【书本为辅】,二是【学会总结】。五、系统架构设计师常见的考试内容包括哪些系统架构设计师常见的考试内容包括:计算机网络和通信知识:涵盖网络协议、路由、交换、传输控制协议/因特网协议(TCP/IP)、网络安全等。数据库知识:包括关系型数据库管理系统(RDBMS)、:非关系型数据库、数据建模、数据仓库等。操作系统知识:涉及操作系统原理、进程管理、内存管理、文件系统等软件工程知识:包括软件开发过程、软件设计原则、软件测试、软件质量保证等架构设计知识:包括系统设计原则、架构设计模式、系统性能优化、系统安全等此外,考试内容可能还包括项目管理、商业分析、人工智能、云计算等方面的知识。根据考试的级别和范围,考试内容也会有所不同。六、关于系统架构设计师就业系统架构设计师的就业前景非常乐观。随着信息技术的发展,特别是云计算、大数据、人工智能等技术的普及,企业对信息系统的依赖程度日益加深,对系统架构设计师的需求也随之增加。无论是大型企业还是小型公司,无论是传统行业还是新兴领域,都需要专业的系统架构设计师来负责设计和管理其信息系统。此外,由于信息技术领域的快速发展,系统架构设计师需要不断学习和更新自己的知识体系,以跟上技术潮流,满足企业对于复杂系统架构设计的需求。系统架构设计师的职业发展路径也是多元化的。他们可以选择在专业技术路径上深造成为技术领袖或行业专家,也可以转向管理岗位,利用技术背景和架构设计经验带领团队完成项目,或者成为独立的咨询顾问,为多家企业提供系统架构设计和优化服务。随着中国企业走出去的步伐加快,具备国际化视野的系统架构设计师将更受欢迎,他们需要了解国内外最新的技术动态和行业标准,并能够与不同文化背景的团队成员有效沟通。
  • 所需E币: 0
    时间: 2024-3-19 14:56
    大小: 2.48KB
    一、Pytorch功能PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。PyTorch提供了两个高级功能:具有强大的GPU加速的张量计算(如Numpy)包含自动求导系统的深度神经网络除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch。Torch是一个有大量机器学习算法支持的科学计算框架,是一个与Numpy类似的张量(Tensor)操作库,其特点是特别灵活,但因其采用了小众的编程语言是Lua,所以流行度不高,这也就有了PyTorch的出现。所以其实Torch是PyTorch的前身,它们的底层语言相同,只是使用了不同的上层包装语言。PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。PyTorch提供了两个高级功能:*具有强大的GPU加速的张量计算(如Numpy)*包含自动求导系统的深度神经网络二、Pytorch使用场景1.图像和语音识别PyTorch在图像和语音识别领域得到了广泛应用,包括对图像进行分类、目标检测、语音情感识别等。2.自然语言处理PyTorch在自然语言处理领域也有很多应用,包括对文本进行分类、情感分析、机器翻译等。3.机器学习PyTorch也可以用于传统机器学习问题,例如分类、回归等问题。4.深度学习教学和研究PyTorch使用简单,易于理解,适合用来进行深度学习教学和研究。三、训练流程准备好数据和网络之后,就可以开始训练模型了,训练的过程分为train和test,其中train做训练,test做验证。训练的过程包括3个超参数Epochs-迭代数据集的次数,也就是说对数据集进行了多少次迭代BatchSize-一次训练的样本数LearningRate-学习率。较小的值会导致学习速度变慢,而较大的值可能会导致训练过程中出现不可预测的行为。learning_rate=1e-3batch_size=64epochs=5deftrain_loop(dataloader,model,loss_fn,optimizer):  size=len(dataloader.dataset)  forbatch,(X,y)inenumerate(dataloader):    #Computepredictionandloss    pred=model(X)    loss=loss_fn(pred,y)    #Backpropagation    optimizer.zero_grad()    loss.backward()    optimizer.step()    ifbatch%100==0:      loss,current=loss.item(),batch*len(X)      print(f"loss:{loss:>7f} [{current:>5d}/{size:>5d}]")deftest_loop(dataloader,model,loss_fn):  size=len(dataloader.dataset)  num_batches=len(dataloader)  test_loss,correct=0,0  withtorch.no_grad():    forX,yindataloader:      pred=model(X)      test_loss+=loss_fn(pred,y).item()      correct+=(pred.argmax(1)==y).type(torch.float).sum().item()  test_loss/=num_batches  correct/=size  print(f"TestError:\nAccuracy:{(100*correct):>0.1f}%,Avgloss:{test_loss:>8f}\n")loss_fn=nn.CrossEntropyLoss()optimizer=torch.optim.SGD(model.parameters(),lr=learning_rate)epochs=10fortinrange(epochs):  print(f"Epoch{t+1}\n-------------------------------")  train_loop(train_dataloader,model,loss_fn,optimizer)  test_loop(test_dataloader,model,loss_fn)print("Done!")模型保存和加载通过pytorch可以保存和加载训练好的模型。在PyTorch中,torch.nn.Module模型的可学习参数(即权重和偏差)包含在模型的参数中(通过model.parameters()访问)。state_dict是一个Python字典对象,它保存了模型每一层的参数。#Printmodel'sstate_dictprint("Model'sstate_dict:")forparam_tensorinmodel.state_dict():  print(param_tensor,"\t",model.state_dict()[param_tensor].size())打印结果如下Model'sstate_dict:conv1.weight   torch.Size([6,3,5,5])conv1.bias  torch.Size([6])conv2.weight   torch.Size([16,6,5,5])conv2.bias  torch.Size([16])fc1.weight  torch.Size([120,400])fc1.bias   torch.Size([120])fc2.weight  torch.Size([84,120])fc2.bias   torch.Size([84])fc3.weight  torch.Size([10,84])fc3.bias   torch.Size([10])四、总结至此,pytorch的基本使用就介绍完成了,可以看出结合深度学习网络pytorch提供了非常好用的接口,帮助我们创建网络、加载数据、训练和部署等,极大的提高了深度学习的效率,后面我们将结合具体的例子对pytorch的使用做一个介绍。
  • 所需E币: 0
    时间: 2024-2-22 17:05
    大小: 3.06KB
    一、Prometheus的概念和发展史Prometheus是一个开源的完整监控解决方案,本文将从指标抓取到查询及可视化展示,以及最后的监控告警,对Prometheus做一个基本的认识。Prometheus发展速度很快,12年开发完成,16年加入CNCF,成为继K8s之后第二个CNCF托管的项目,目前Github42k的,而且社区很活跃,维护频率很高,基本稳定在1个月1个小版本的迭代速度。二、Prometheus的特点多维数据模型:由度量名称和键值对标识的时间序列数据时序数据,是在一段时间内通过重复测量(measurement)而获得的观测值的集合;将这些观测值绘制于图形之上,它会有一个数据轴和一个时间轴;服务器指标数据、应用程序性能监控数据、网络数据等也都是时序数据;1.内置时间序列(pimeseries)数据库:Prometheus;外置的远端存储通常会用:InfluxDB、openTsDB等2.promQL一种灵活的查询语言,可以利用多维数据完成复杂查询3.基于HTTP的pull(拉取)方式采集时间序列数据4.同时支持PushGateway组件收集数据5.通过服务发现或者静态配置,来发现目标服务对象6.支持作为数据源接入Grafana三、Prometheus优势易于管理:Prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等);唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。强大的查询语言PromQL:Prometheus内置一个强大的数据查询语言PromQL,通过PromQL可以实现对监控数据的查询、聚合。同时PromQL也被应用于数据可视化(如Grafana)以及告警中。高效:对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而Prometheus可以高效的处理这些数据。可扩展:Prometheus支持联邦集群,可以让多个Prometheus实例产生一个逻辑集群;当单实例Prometheus处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation)可以对其进行扩展。易于集成:目前官网提供了多种语言的客户端SDK,基于这些SDK可以快速让应用程序纳入到监控系统中,同时还支持与其它的监控系统集成。可视化:PrometheusServer自带一个UI,通过这个UI可以方便对数据进行查询和图形化展示;同时还可以对接Grafana可视化工具展示精美监控指标。四、服务注册被监控服务在Prometheus中是一个Job存在,被监控服务的所有实例在Prometheus中是一个target的存在,所以被监控服务的注册就是在Prometheus中注册一个Job和其所有的target,这个注册分为:静态注册动态注册静态注册:静态的将服务的IP和抓取指标的端口号配置在Prometheusyaml文件的scrape_configs配置下scrape_configs: -job_name:"prometheus"  static_configs:  -targets:["localhost:9090"]以上就是注册了一个名为prometheus的服务,这个服务下有一个实例,暴露的抓取地址是localhost:9090 动态注册:动态注册就是在Prometheusyaml文件的scrape_configs配置下配置服务发现的地址和服务名,Prometheus会去该地址,根据你提供的服务名动态发现实例列表,在Prometheus中,支持consul,DNS,文件,K8s等多种服务发现机制。基于consul的服务发现:-job_name:"node_export_consul"  metrics_path:/node_metrics  scheme:http  consul_sd_configs:   -server:localhost:8500    services:     -node_exporter我们consul的地址就是:localhost:8500,服务名是node_exporter,在这个服务下有一个exporter实例:localhost:9600五、Prometheus实战教程:监控mysql数据库安装mysql数据库上传mysql安装包到指定目录下,并创建dataetctmplog目录tar-zxvfmysql-5.7.31.tar.gzcdmysql-5.7.31mkdirdataetctmplog上传my.cnf,修改本地路径后、端口号等,进行保存[mysqld]server_id=2binlog_format=Mixedread_rnd_buffer_size=128Mfederatedbasedir=/app/mysql/mysql-5.7.31        ######################重要!按实际目录配置datadir=/app/mysql/mysql-5.7.31/data           #######################重要!按实际目录配置socket =/app/mysql/mysql-5.7.31/tmp/mysql-5308.sock           ##################按安装目录名+sock,统一放置于/tmp下init_connect='SETcollation_connection=utf8_general_ci'init_connect='SETNAMESutf8'character-set-server=utf8collation-server=utf8_general_ciskip-character-set-client-handshakelower_case_table_names=1max_connections=1000wait_timeout=180sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESport=5308           #######################重要!按实际目录配置#skip-grant-tables#default_authentication_plugin=mysql_native_passwordtmp_table_size=512Mevent_scheduler=1join_buffer_size=512Mlog_bin_trust_function_creators=1read_rnd_buffer_size=32Msort_buffer_size=64Minnodb_buffer_pool_size=2048Minnodb_log_file_size=64Minnodb_file_per_table=1innodb_flush_log_at_trx_commit=1innodb_log_buffer_size=256Mkey_buffer_size=256Mread_buffer_size=32Mmax_allowed_packet=100Mmax_heap_table_size=256M#binlog_expire_logs_seconds=432#query_cache_size=512M`[client]default-character-set=utf8port=5308               #################################根据实际修改[mysql]default-character-set=utf8[mysql.server]user=mysql               #############################在哪个用户下安装就是哪个log-err#loglog-slow-querieslog-update
  • 所需E币: 0
    时间: 2024-1-30 12:04
    大小: 2.79KB
    上传者: 开心就很好了
    今天给大家讲讲关于AI,打通视觉,NLP,机器学习,深度学习,推荐搜索,AIGC,大模型等等这些当下最热门技术,我将从以下9个方面给大家做详细讲解关于AI人工智能算法工程师的相关知识。阶段一:从AI全面认知到基础夯实-行业认知&Python&必备数学阶段二:从AI核心技术理论体系构建到项目实战:机器学习&深度学习阶段三:构建AI的数据驱动力--数据预处理工程阶段四:AI深度学习框架实战-Pytorch从基础到进阶阶段五:AI核心算法+方法——经典深度学习模型实战阶段六:AI计算机视觉核心技术与项目实战-工业&医疗与直播&自动驾驶等主流领域阶段七:AIGC火热领域技术与项目-文本图像生成&扩散模型等阶段八:NLP自然语言处理与LLM大语言模型应用实战阶段九:AI工程师入行&转化&就业&面试指导首先,我们先来说说什么是人工智能:人工智能(ArtificialIntelligence),简称为AI,是一门集多学科于一体的综合性技术科学。它的核心目的是创造出能够模拟人类思维能力的机器,使其具备感知、思考和决策的能力。自然语言处理(NaturalLanguageProcessing,简称NLP)是计算机科学和人工智能领域的一个重要分支。它的核心目标是让计算机能够理解和生成人类自然语言,这包括了文本、语音等多种形式的人类语言输入输出。机器学习是一门人工智能的科学,其核心在于计算机通过对数据的学习和经验积累来自动提升性能。深度学习是机器学习的一个子领域,它受到人类大脑神经网络的启发,旨在模拟人类的学习过程。生成式人工智能——AIGC(ArtificialIntelligenceGeneratedContent),是指基于生成对抗网络、大型预训练模型等人工智能的技术方法,通过已有数据的学习和识别,以适当的泛化能力生成相关内容的技术。大模型是指包含超大规模参数(通常在十亿个以上)的神经网络模型。接下来,我们讲解环境的安装配置:安装CPU版本PyTorch#创建PyTorch环境condacreate-ntorch2python==3.10#进入环境condaactivatetorch2#安装cpu版本pytorchpipinstalltorch==2.0.0torchvision==0.15.1torchaudio==2.0.1--index-urlhttps://download.pytorch.org/whl/cpu验证CPU版是否安装成功importtorchprint(torch.__version__)print(torch.cuda.is_available())输出2.0.0+cpuFalseTensor存储的数值Tensor可以用多种方法进行初始化。下面给出例子:直接传数据Tensor可以直接从数据进行创建,数据类型会自动适应。importtorchdata=[[1,2],[3,4]]x_data=torch.tensor(data)print(x_data)使用Numpy数据可以通过Numpy矩阵中进行创建importtorchimportnumpyasnpnp_array=np.array([[1,2],           [3,4]])x_np=torch.from_numpy(np_array)print(x_np)利用已有tensor根据已有的数据形式(形状,数据类型),创建出新的tensorimporttorchdata=[[1,2],[3,4]]x_data=torch.tensor(data)#保持了x_data的数据属性与形状x_ones=torch.ones_like(x_data) print(f"OnesTensor:\n{x_ones}\n")#保持x_data的形状,重新定义x_data的数据属性x_rand=torch.rand_like(x_data,dtype=torch.float) print(f"RandomTensor:\n{x_rand}\n")最后到案例部分:案例1:导入两个列表到Dataset举一个例子,fromtorch.utils.dataimportDataset,DataLoaderclassMyDataset(Dataset):#继承自Dataset  def__init__(self,):#定义数据集包含了什么东西    self.x=[iforiinrange(10)]    self.y=[2*iforiinrange(10)]  def__len__(self):#返回数据集的总长度    returnlen(self.x)  def__getitem__(self,idx):#当数据集被读取时,需要返回的数据    returnself.x[idx],self.y[idx]my_dataset=MyDataset()my_dataloader=DataLoader(my_dataset)forx_i,y_iinmy_dataloader:  print("x_i=",x_i,"y_i=",y_i)输出x_i= tensor([0]) y_i= tensor([0])x_i= tensor([1]) y_i= tensor([2])x_i= tensor([2]) y_i= tensor([4])x_i= tensor([3]) y_i= tensor([6])x_i= tensor([4]) y_i= tensor([8])x_i= tensor([5]) y_i= tensor([10])x_i= tensor([6]) y_i= tensor([12])x_i= tensor([7]) y_i= tensor([14])x_i= tensor([8]) y_i= tensor([16])x_i= tensor([9]) y_i= tensor([18])案例2:导入Excel数据到Dataset中dataset只是一个类,因此数据可以从外部导入,我们也可以在dataset中规定数据在返回时进行更多的操作,数据在返回时也不一定是有两个。fromtorch.utils.dataimportDataset,DataLoaderimportpandasaspdclassMyDataset(Dataset):#继承自Dataset  def__init__(self,data_loc):#定义数据集包含了什么东西    data=pd.read_excel(data_loc)    self.x1,self.x2,self.x3,self.x4,self.y=data['x1'],data['x2'],data['x3'],data['x4'],data['y']  def__len__(self):#返回数据集的总长度    returnlen(self.x1)  def__getitem__(self,idx):#当数据集被读取时,需要返回的数据    returnself.x1[idx],self.x2[idx],self.x3[idx],self.x4[idx],self.y[idx]if__name__=='__main__':  data_loc="模仿数据读取.xlsx"  my_dataset=MyDataset(data_loc)  my_dataloader=DataLoader(my_dataset,batch_size=2)  forx1_i,x2_i,x3_i,x4_i,y_iinmy_dataloader:    print(f"x1_i={x1_i},x2_i={x2_i},x3_i={x3_i},x4_i={x4_i},y_i={y_i}")