关于challenge:基于知识图谱的电影知识问答系统训练TFIDF-向量算法和朴素贝叶斯分类器在-Neo4j-中查询

基于常识图谱的电影常识问答零碎:训练TF-IDF 向量算法和奢侈贝叶斯分类器、在 Neo4j 中查问 1.我的项目介绍训练 TF-IDF 向量算法和奢侈贝叶斯分类器,预测用户文本所属的问题类别应用分词库解析用户文本词性,提取关键词联合关键词与问题类别,在 Neo4j 中查问问题的答案通过 Flask 对外提供 RESTful API前端交互与答案展现2.我的项目实操教学2.1 数据集简介{ "introduction_by_movie": [ "nm简介", "nm剧情简介", "nm的内容是什么", "nm讲了什么", "nm讲了什么故事", "nm演了什么", "nm的故事梗概是什么", "nm的剧情简介是什么", "nm的内容简介是什么", "nm的剧情介绍是什么", "nm的情节是什么", "nm的次要情节是什么" ], "rating_by_movie": [ "nm的评分是多少", "nm得了多少分", "nm的评分有多少", "nm的评分", "nm得分是多少", "nm的分数是", "nm电影分数是多少", "nm电影评分", "nm评分", "nm的分数是多少", "nm这部电影的评分是多少" ], "release_date_by_movie": [ "nm上映工夫", "nm定档工夫", "nm的上映工夫是什么时候", "nm的首映工夫是什么时候", "nm什么时候上映", "nm什么时候首映", "最早什么时候能看到nm", "nm什么时候在影院上线", "什么时候能够在影院看到nm", "nm什么时候在影院放映", "nm什么时候首播" ], 2.2 用户词典Forrest Gump nmKill Bill: Vol. 1 nm英雄 nmMiami Vice nmIndiana Jones and the Temple of Doom nm卧虎藏龙 nmPirates of the Caribbean: At World's End nmKill Bill: Vol. 2 nmThe Matrix Reloaded nmThe Matrix Revolutions nmHarry Potter and the Chamber of Secrets nmHarry Potter and the Prisoner of Azkaban nmHarry Potter and the Goblet of Fire nmHarry Potter and the Order of the Phoenix nmThe Last Emperor nmHarry Potter and the Half-Blood Prince nm花样年华 nm2046 nmLethal Weapon 4 nmHannibal Rising nmTMNT nm무사 nmAnna and the King nm满城尽带黄金甲 nm2.3 环境依赖jiebaneo4jpython-dotenvscikit-learnflaskflask-corsgunicorn2.4 局部代码展现import osfrom neo4j import GraphDatabaseclass Database: """ Neo4j 数据库拜访层。 治理数据库连贯的生命周期,并提供查问接口。 """ def __init__(self): uri = os.environ["DATABASE_URI"] user = os.environ["DATABASE_USER"] password = os.environ["DATABASE_PASSWORD"] try: self._driver = GraphDatabase.driver(uri, auth=(user, password)) self._session = self._driver.session() except Exception as e: raise Exception("数据库连贯失败") from e def close(self): try: self._session.close() self._driver.close() except Exception as e: raise Exception("数据库断开失败") from e def find_one(self, query: str, **parameters): result = self._session.run(query, parameters).single() return result.value() if result else None def find_many(self, query: str, **parameters): return self._session.run(query, parameters).value()if __name__ == "__main__": import dotenv dotenv.load_dotenv() database = Database() genres = database.find_many( """ MATCH (m:Movie)-[BELONGS_TO]->(g:Genre) WHERE m.name = $movie_name RETURN g.name """, movie_name="卧虎藏龙", ) database.close() print(genres)import jsonimport osimport jiebafrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNBTRAIN_DATASET_PATH = os.path.join("data", "train.json")jieba.setLogLevel("ERROR")def normalize(sentence: str): return " ".join(jieba.cut(sentence))class BaseClassifier: """ 底层分类器。 应用 TF-IDF 向量化文本,而后应用奢侈贝叶斯预测标签。 """ def __init__(self): self._vectorizer = TfidfVectorizer() self._classifier = MultinomialNB(alpha=0.01) def _train(self, x: list, y: list): X = self._vectorizer.fit_transform(x).toarray() self._classifier.fit(X, y) def _predict(self, x: list): X = self._vectorizer.transform(x).toarray() return self._classifier.predict(X)class Classifier(BaseClassifier): """ 问题分类器。 依据问题中呈现的关键词,将问题归于某一已知类别下。 """ def __init__(self): BaseClassifier.__init__(self) questions, labels = Classifier._read_train_dataset() self._train(questions, labels) def classify(self, sentence: str): question = normalize(sentence) return self._predict([question])[0] @staticmethod def _read_train_dataset(): with open(TRAIN_DATASET_PATH, "r", encoding="utf-8") as fr: train_dataset: dict[str, list[str]] = json.load(fr) questions = [] labels = [] for label, sentences in train_dataset.items(): questions.extend([normalize(sentence) for sentence in sentences]) labels.extend([label for _ in sentences]) return questions, labelsif __name__ == "__main__": classifier = Classifier() while True: sentence = input("请输出问题:").strip() label = classifier.classify(sentence) print(f"问题分类:{label}")2.5 运行我的项目在 backend 目录下增加环境变量文件 .env。 ...

July 13, 2023 · 2 min · jiezi

关于challenge:领域知识图谱的医生推荐系统利用BERTCRFBiLSTM的医疗实体识别建立医学知识图谱建立知识问答系统

畛域常识图谱的医生举荐零碎:利用BERT+CRF+BiLSTM的医疗实体辨认,建设医学知识图谱,建设常识问答零碎本我的项目次要实现了疾病自诊和医生举荐两个性能并构建了医生服务指标评估体系。疾病自诊次要通过利用BERT+CRF+BiLSTM的医疗实体辨认, 建设医学知识图谱,从而实现基于患者问诊文本的疾病初诊。这个性能帮忙患者初步理解本身的疾病状况并为下一步与医生的交换提供反对。第二个性能是医生举荐。本平台采纳基于Jacard间隔的Minhash和minhashLSHForest算法来进行举荐,匹配患者的征询文本和医生的历史问诊信息,从而为患者举荐最适宜的医生。最初咱们应用django框架进行我的项目公布。 1.我的项目框架2.数据采集本我的项目除了应用公开的医疗数据集外,还采集了中国当先医疗平台的数据集。 spiders模块提供了数据采集的信息。 39crawler用于获取39健康网的数据,hdf用于获取好大夫网的数据(scrapy)。 运行程序在dist文件夹中,双击spider_run.exe即可运行爬虫程序。 爬取指定的疾病信息,在disease.txt退出科室名称(拼音)或者疾病名称(拼音),每一个科室或者科室占据独自一行。 无论你在disease.txt文件中增加多少行,爬虫只会爬取第一行对应的科室或疾病,后果将在程序运行实现后,输入为doctor.csv,disease.csv。 如需爬取第二个疾病,请将第一行科室或者疾病删去,从新运行程序。 3.疾病自诊在疾病自诊模块,平台会读取用户疾病形容的语义信息,首先进行文本预处理,而后通过实体辨认模型抽取出其中的要害成分,即:疾病症状、并发症、身材部位等医学实体。而后,这些医学实体会输出到平台后端的常识图谱(基于大规模数据集构建)中。最终,通过常识图谱的疾速查问和计算,平台将返回基于患者疾病形容的疾病推断以及相应的概率值。同时,疾病相关的介绍、须要去就诊的科室和疾病多发人群的相干信息也会推送给用户。 3.1. 医学实体辨认医疗实体辨认是指从给定句子中辨认出医疗实体。在本我的项目中,须要从患者征询的病情形容中辨认出疾病、症状、科室等多种类型的医疗实体,找到与疾病特色相干的关键词。 entity_extract模块提供了无关医学实体辨认的无关信息。 因为模型过大因而并未搁置在我的项目文件门路下,见我的项目材料 输出:汪主任您好,1月中旬惯例体检发现TCT高度病变,HPV未查,2020年hpv和tct失常。曾经在南京鼓楼医院做了活检,报告如下,诊断写的肿瘤,请问当初这个是不是癌呢?是不是很重大?因为娃太小很胆怯,后续该怎么手术呢?非常迫切希望失去您的回答,不胜感激!输入:{'test': [('hpv', 35), ('tct', 39), ('活检', 56)], 'symptom': [('肿瘤', 68)], 'feature': [('重大', 87)]}应用示例:# predict.pyargs.bert_dir = '../data/bert-base-chinese' # 加载预训练的语义模型model_name = 'bert_bilstm_crf' # 应用的model类型:bert_bilstm, bert_bilstm_crf, bert_crf, bertid2query = pickle.load(open('../data/id2query.pkl', 'rb')) # 加载词典ent2id_dict = pickle.load(open('../data/ent2id_dict.pkl', 'rb')) # 加载词典args.num_tags = len(ent2id_dict)bertForNer = BertForNer(args, id2query)model_path = './checkpoints/{}/model.pt'.format(model_name) # 模型存储门路model = bert_ner_model.BertNerModel(args) # 依据参数实例化模型model, device = trainUtils.load_model_and_parallel(model, args.gpu_ids, model_path) # 模型加载model.eval()raw_text = "汪主任您好,1月中旬惯例体检发现TCT高度病变,HPV未查,2020年hpv和tct失常。曾经在南京鼓楼医院做了活检,报告如下,诊断写的肿瘤,请问当初这个是不是癌呢?是不是很重大?因为娃太小很胆怯,后续该怎么手术呢?非常迫切希望失去您的回答,不胜感激!".strip().replace( '(', '(').replace(')', ')').replace('+', '&') # 患者输出的自述文本print(raw_text)bertForNer.predict(raw_text, model, device) # 辨认的医学实体3.2. 反对辨认的实体类型body:患病部位,如:胃,皮肤drug :药品,如:产妇康清洗液feature:患病水平,如:重大disease:疾病,如:前列腺炎symptom:疾病症状,如:胃壁增厚department:科室,如:五官科test:疾病相关的查看,如:血常规3.3. 模型抉择咱们在训练集上测验了BERT、BERT+CRF、BERT+BiLSTM和BERT+BiLSTM+CRF各模型的准确率、召回率和micro_f1值后,咱们发现BERT+BiLSTM+CRF模型具备更好的医疗实体辨认能力,因而,在本我的项目中,咱们选用**BERT+BiLSTM +CRF**模型实现后续医疗实体辨认的工作。 ...

July 13, 2023 · 2 min · jiezi

关于challenge:Linux和Windows系统下AnacondaPaddlepytorch含GPUCPU版本详细安装过程

Linux和Windows零碎下装置深度学习框架所需反对:Anaconda、Paddlepaddle、Paddlenlp、pytorch,含GPU、CPU版本具体装置过程1.下载 Anaconda 的安装包Anaconda装置:Anaconda是一个开源的Python发行版本,其蕴含了conda、Python等180多个迷信包及其依赖项。应用Anaconda能够通过创立多个独立的Python环境,防止用户的Python环境装置太多不同版本依赖导致抵触。 1.1 Linux下载Anaconda首先须要在官网上抉择须要装置的版本。 官网地址:https://repo.anaconda.com/archive/ 如抉择以后最新版本进行装置: https://repo.anaconda.com/archive/Anaconda3-2023.07-0-Linux-x... 而后下载该安装包。 下载命令wget https://repo.anaconda.com/archive/Anaconda3-2023.07-0-Linux-x86_64.sh进入安装包所在目录,先对安装包进行赋权,再执行安装程序#查看门路pwd赋权命令:chmod +x Anaconda3-2023.07-0-Linux-x86_64.sh装置命令:sh Anaconda3-2023.07-0-Linux-x86_64.sh呈现如下画面: 点击 Enter(回车键),呈现 More,持续按 Enter,最初输出 yes 批准用户许可证就行。 直至呈现以下画面,就装置胜利了! 1.2 Windows下载Anaconda参考文章:https://blog.csdn.net/sinat_39620217/article/details/115861876 第一步 下载在 Anaconda官网 抉择下载Windows Python3.8 64-Bit版本。确保曾经装置Visual C++ Build Tools(能够在开始菜单中找到),如未装置,请点击 下载安装。第二步 装置运行下载的安装包(以.exe为后辍),依据疏导实现装置, 用户可自行批改装置目录(如下图) 第三步 应用点击Windows零碎左下角的Windows图标,关上:所有程序->Anaconda3/2(64-bit)->Anaconda Prompt在命令行中执行指令即可 后续框架库包装置同linux 2.环境变量配置2.1 linux环境变量配置Linux上胜利装置anaconda后-bash: conda: command not found如题,呈现这个问题可能是环境变量配置有问题。 省流请看这里:执行cat ~/.bashrc命令查看.bashrc文件内容,若文件中没有export PATH="XXX/anaconda3/bin:$PATH"阐明是环境变量未配置,能够持续往下看了;若文件中有此门路,请退出本文,自行校对一下门路。 关上.bashrc文件vim ~/.bashrc在最初一行新增 anaconda 门路export PATH="XXX/anaconda3/bin:$PATH"保留文件(按esc后输出:wq回车)并使环境变量失效[关上文件后按i进入编辑模式,按Esc退出编辑模式,shift+冒号而后输出wq 保留文件并退出] 留神:这里是anaconda的装置门路,依据本人的装置门路即可source ~/.bashrc执行以上三步后,便可在linux上应用conda命令了! 2.2 Windows 环境变量配置其实,以上的环境变量配置,相当于在window环境下的环境变量加上环境变量。如在window环境下装置anaconda,装置过程中会提醒是否将环境变量退出到path中,如果选上该选项,便可省去很多麻烦,装置完后间接在终端应用conda命令; 如果没有选上,是无奈间接应用conda命令的,须要在零碎的环境变量中加上装置门路才能够应用conda命令。主动增加的装置门路的步骤:此电脑–>属性–>高级零碎设置–>环境变量–>零碎变量–>Path增加anaconda的装置门路。3.用 conda 创立虚拟环境#1.创立指定python版本的环境conda create --name paddlenlp python=3.8#2. 激活环境conda activate paddlenlp#3.退出环境conda deactivate4.装置我的项目依赖包&深度学习框架4.1装置我的项目依赖包装置我的项目requirement.txt文件依赖:pip install -r requirement.txt生成requirement.txt文件:pip freeze > requirements.txt4.2 装置Paddle&Paddlenlp4.2.1 装置paddle官网:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html ...

July 13, 2023 · 2 min · jiezi

关于challenge:响应式编程Vertx官网学习

本文基于 Vert.x 官网 https://vertx.io/ 内容,率领大家学习响应式编程里比拟有名的工具包 Vert.x 。文章内容取自官网由博主简化总结,心愿帮忙大家了解响应式编程。 Vert.x 简介Vert.x 个性响应式模式概述举荐博主开源的 H5 商城我的项目waynboot-mall,这是一套全副开源的微商城我的项目,蕴含三个我的项目:经营后盾、H5 商城前台和服务端接口。实现了商城所需的首页展现、商品分类、商品详情、商品 sku、分词搜寻、购物车、结算下单、支付宝/微信领取、收单评论以及欠缺的后盾治理等一系列性能。 技术上基于最新得 Springboot3.0、jdk17,整合了 MySql、Redis、RabbitMQ、ElasticSearch 等罕用中间件。分模块设计、简洁易保护,欢送大家点个 star、关注博主。 github 地址:https://github.com/wayn111/waynboot-mall Vert.x简介 先理解 Vert.x 是什么,官网首页介绍文字能够看出 Vert.x 是由 Eclipse 开发的一个在 JVM 上 Reactive(响应式) 应用程序。 Reactive(响应式)编程是什么? 响应式编程是一种面向数据流和变动流传的编程范式。这意味着能够在编程语言中很不便地表白动态或动静的数据流,而相干的计算模型会主动将变动的值通过数据流进行流传。 例如在命令式编程设置中,a = b + c 意味着在计算表达式时 a 被调配为 b + c 的后果,之后 b 和 c 的值进行批改也不会影响 a 值。然而在响应式编程中,只有 b 或 c 的值发生变化,a 的值就会自动更新,而程序无需显式地从新执行语句 a = b + c 来确定以后调配的 a 值。 官网定义官网对于 Vert.x 的定义是:一个用于在 JVM 上构建响应式应用程序的工具包。 ...

July 11, 2023 · 1 min · jiezi

关于challenge:从零开始的知识图谱生活构建一个百科知识图谱基于ES的简单语义搜索

从零开始的常识图谱生存,构建一个百科知识图谱,实现基于Deepdive的常识抽取、基于ES的简略语义搜寻、基于 REfO 的简略KBQA集体入门常识图谱过程中的学习笔记,算是半教程类的,指引初学者对常识图谱的各个工作有一个初步的意识。目前暂无新增打算。 1.简介指标是蕴含百度百科、互动百科、中文wiki百科的常识,千万级实体数量和亿级别的关系数目。目前已实现百度百科和互动百科局部,其中百度百科词条4,190,390条,互动百科词条4,382,575条。转换为RDF格局失去三元组 128,596,018个。存入 neo4j中失去节点 16,498,370个,关系 56,371,456个,属性 61,967,517个。 我的项目码源见文末码源:点击跳转 目录 百度百科与互动百科的常识抽取 半结构化数据 百度百科爬虫互动百科爬虫非结构化数据 微信公众号爬虫虎嗅网爬虫非结构化文本的常识抽取 制作相似于NYT的近程监督学习语料--baidu_6w神经网络关系抽取常识存储 D2RQ 的应用Jena 的应用常识交融 Silk 实战KBQA 基于 REfO 的简略KBQA语义搜寻 基于elasticsearch 的简略语义搜寻 反对实体检索、实体属性检索和条件检索2.获取数据2.1 半结构化数据半结构化数据从百度百科和互动百科获取,采纳scrapy框架,目前电影畛域和通用畛域两类。 通用畛域百科数据:百度百科词条4,190,390条,互动百科词条3,677,150条。爬取细节请见从零开始构建常识图谱(七)百科知识图谱构建(一)百度百科的常识抽取电影畛域: 百度百科蕴含电影22219部,演员13967人,互动百科蕴含电影13866部,演员5931 人。我的项目具体介绍请见从零开始构建常识图谱(一)半结构化数据的获取2.2 非结构化数据非结构化数据次要起源为微信公众号、虎嗅网新闻和百科内的非结构化文本。 微信公众号爬虫获取公众号公布文章的题目、公布工夫、公众号名字、文章内容、文章援用起源,对应 ie/craw/weixin_spider。虎嗅网爬虫 获取虎嗅网新闻的题目、简述、作者、公布工夫、新闻内容,对应 ie/craw/news_spider。 3. 非结构化文本的常识抽取3.1 基于Deepdive的常识抽取Deepdive是由斯坦福大学InfoLab实验室开发的一个开源常识抽取零碎。它通过弱监督学习,从非结构化的文本中抽取结构化的关系数据 。本次实战基于OpenKG上的反对中文的deepdive:斯坦福大学的开源常识抽取工具(三元组抽取),咱们基于此,抽取电影畛域的演员-电影关系。 具体介绍请见从零开始构建常识图谱(五)Deepdive抽取演员-电影间关系 3.2 神经网络关系抽取利用本人的百科类图谱,构建近程监督数据集,并在OpenNRE上运行。最终生成的数据集蕴含关系事实18226,无关系(NA)实体对336 693,总计实体对354 919,用到了462个关系(蕴含NA)。 具体介绍请见从零开始构建常识图谱(九)百科知识图谱构建(三)神经网络关系抽取的数据集构建与实际 4.结构化数据到 RDF结构化数据到RDF由两种次要形式,一个是通过direct mapping,另一个通过R2RML语言这种,基于R2RML语言的形式更为灵便,定制性强。对于R2RML有一些好用的工具,此处咱们应用d2rq工具,它基于R2RML-KIT。 具体介绍请见从零开始构建常识图谱(二)数据库到 RDF及 Jena的拜访 5.常识存储5.1 将数据存入 Neo4j图数据库是基于图论实现的一种新型NoSQL数据库。它的数据数据存储构造和数据的查问形式都是以图论为根底的。图论中图的节本元素为节点和边,对应于图数据库中的节点和关系。咱们将下面取得的数据存到 Neo4j中。 百科类图谱请见:从零开始构建常识图谱(八)百科知识图谱构建(二)将数据存进neo4j 电影畛域的请见从零开始构建常识图谱(六)将数据存进Neo4j 6.KBQA6.1 基于 REfO 的简略KBQA基于浙江大学在openKG上提供的 基于 REfO 的 KBQA 实现及示例,在本人的常识图谱上实现简略的常识问答零碎。 ...

July 10, 2023 · 1 min · jiezi

关于challenge:领域知识图谱中式菜谱知识图谱实现知识图谱可视化和知识库智能问答系统

畛域常识图谱-中式菜谱常识图谱:实现常识图谱可视化和知识库智能问答零碎(KBQA)A knowledge graph for Chinese cookbook(中式菜谱常识图谱),能够实现常识图谱可视化和知识库智能问答零碎(KBQA) 成果展现: 本我的项目开发的零碎名称为AI Food Time,中文名为爱食光。如需体验可视化性能可间接拜访点击可视化性能。 通过收集网上齐全公开的无关中式菜谱的数据,通过数据荡涤和剖析,转换为常识图谱的存储构造,并提供可视化展现与搜寻和智能问答等性能,为酷爱美食与烹饪的人们提供方便快捷的中式菜谱服务,并以常识图谱的模式直观显示出不同菜品的关系及所用原料,在生活中具备很大的理论利用需要,包含: 一类菜品的不同具体做法,例如水煮鱼包含麻辣水煮鱼、小清新版水煮鱼和家常版水煮鱼等;通过菜品与食材的关联关系,能够查问家中现有食材能够烹饪哪些菜品;能够间接显示出每种菜品所需主料,辅料,配料及其具体数量和烹饪办法,与网上的一些菜谱网页相比更加简略直观;可视化可能对各种菜品及关联关系有一个全局的意识,并可能显示每种菜品对应的图片;智能问答零碎可采纳自然语言进行发问,零碎反馈答案后果。我的项目码源链接见文末跳转链接点击 1. 可视化展现及搜寻: 同一类实体用雷同色彩的节点示意,鼠标位于某个节点上方时显示其相关联的其它实体和之间的关系名称; 具备同一类实体显示开关,节点显示模式转换,并反对搜寻性能; 每种菜品的信息栏中显示菜品对应的成品图片,并利用entities_aglin.py进行了实体对齐,打消了食品原料中的冗余信息。 mini版:蕴含10大类,50种菜品之间的关联关系,包含菜品制作的各种食材和制作步骤,轻量级的mini版同时反对电脑和手机浏览器关上,如需体验可间接进入拜访入口。pro版(开发中):蕴含362大类,八千多种菜品之间的关联关系,包含菜品制作的各种原料和制作步骤。2. 智能问答零碎(KBQA):基于构建的中式菜谱常识图谱,设计知识库问答KBQA零碎,依据提出的和菜品无关的问题,零碎主动给出答案,对于无奈给出答复的状况零碎也能进行回应。 文件夹构造 /data:蕴含三元组数据aifoodtime_ntriples.nt/external_dict:蕴含所有菜品和原料的实体列表entities_list.txtquery_main.py:KBQA主函数jena_sparql_endpoint.py:启动jena_sparql服务question2sparql.py:自然语言问题到SPARQL查问的转换question_temp.py:自然语言到SPARQL的问题模板vizdata2entities.py:从可视化存储数据到实体列表文件的转换word_tagging.py:中文分词,应用的是jieba 基于构建的中式菜谱常识图谱,针对其中和菜品无关的各类问题,智能问答零碎能够给出对应问题的答案。 本我的项目中的智能问答机器人名为小吃。 应用本零碎须要预装软件: Apache Jena Fuseki:Jena Fuseki是一个SPARQL服务,通过HTTP提供应用SPARQL协定的REST式SPARQLHTTP更新,SPARQL查问和SPARQL更新。 从官网下载最新版本的fuseki压缩包,并解压到指标文件夹。在apache-jena-fuseki的指标文件夹下用命令行输出命令java -jar fuseki-server.jar,启动Fuseki服务。接着,关上浏览器,拜访:http://localhost:3030,创立一个长久化数据库,并上传/data/aifoodtime_ntriples.nt三元组数据集,实现知识库的筹备。JAVA:运行fuseki须要java环境,如果没有装置JAVA8.0及以上版本,请返回oracle官网上下载最新版本的JDK而后装置,并配置环境门路。零碎的流程为:解析输出的自然语言问句生成 SPARQL 查问,进一步申请后盾基于 TDB 知识库的 Apache Jena Fuseki 服务, 失去答案。如果知识库中不存在问题的答案或者对于提出的自然语言问题无奈了解,零碎也会给出相应回复。 2.1能够发问的问题类型:  1.某一类菜蕴含的具体菜品;   2.某一个特色菜品的所有原料;   3.某一个特色菜品的主料,辅料和配料;   4.某一个特色菜品的特点;   5.某一个特色菜品的制作步骤。 2.2 应用办法:在曾经启动Fuseki服务的状况下,命令行输出python query_main.py,就能够启动问答零碎,开始问答过程: cd KBQApython query_main.py问答示例1: 请发问:水煮鱼类包含哪些菜?小吃:家常水煮鱼、小清新版水煮鱼、水煮鱼、香辣水煮鱼、麻辣水煮鱼问答示例2: 请发问:如何制作水煮鱼?小吃:1: 筹备食材。2: 将鱼荡涤洁净后切片,鱼骨和鱼肉分凋谢。黄豆芽去掉须根、辣椒剪成段、姜切片。接下来开始腌鱼。鱼骨中放入三四片姜、一勺料酒、半勺盐腌制二十分钟。鱼片中放入半只蛋清、一勺料酒、一勺淀粉、一小勺白胡椒粉后抓匀腌制二十分钟。 3: 锅中加适量清水,水烧开后将黄豆芽放入锅中,再放少许盐。待黄豆芽煮熟捞出放入大碗内。4: 锅中倒入少许油,油热后放入一勺郫县豆瓣酱和姜片煸炒出红油(喜爱更辣一点口感的,能够往锅里再放一些干辣椒煸炒出香味)。5: 往锅里倒入适量的热水。6: 将鱼骨放入锅内,大火烧开后转小火炖10分钟。(这个时候能够尝一下鱼汤的滋味,而后依据本人的口味抉择要不要放盐)鱼骨炖好后捞到装有黄豆芽的大碗中。7: 将鱼肉一片一片的放入锅中。(千万不要搅动,如须要,只有微微晃动几下锅即可)8: 煮开后立刻将鱼肉捞出,再盛一些汤到碗中。9: 换一只洁净的锅中,锅中倒入40毫升左右的食用油,而后将干辣椒和花椒放入锅中,小火煸炒至辣椒红亮,花椒出香味即可捞出放到鱼肉上。10: 将锅中剩下的油大火烧至稍稍冒烟,而后关火,把油淋在鱼肉上即可。问答示例3: 请发问:鱼香肉丝的特点是什么?小吃:难度: 简略、耗时: 二十分钟、口味: 鱼香、工艺: 炒问答示例4: ...

July 10, 2023 · 1 min · jiezi

关于challenge:手把手教学小型金融知识图谱构建图算法关系预测命名实体识别Cypher-Cheetsheet详细教学等

手把手教学小型金融常识图谱构建:量化剖析、图数据库neo4j、图算法、关系预测、命名实体辨认、Cypher Cheetsheet具体教学等成果预览: 1. 常识图谱存储形式常识图谱存储形式次要蕴含资源形容框架(Resource Description Framework,RDF)和图数据库(Graph Database)。 1.1 资源形容框架个性存储为三元组(Triple)规范的推理引擎W3C规范易于公布数据少数为学术界场景1.2 图数据库个性节点和关系均能够蕴含属性没有规范的推理引擎图的遍历效率高事务管理少数为工业界场景码源链接见文末跳转文末链接跳转 2. 图数据库neo4jneo4j是一款NoSQL图数据库,具备高性能的读写可扩展性,基于高效的图形查询语言Cypher,更多介绍可拜访neo4j官网,官网还提供了Online Sandbox实现疾速上手体验。 2.1 软件下载下载链接:https://neo4j.com/download-center/ 2.2 启动登录2.2.1 Windows进入neo4j目录cd neo4j/bin./neo4j start启动胜利,终端呈现如下提醒即为启动胜利Starting Neo4j.Started neo4j (pid 30914). It is available at http://localhost:7474/ There may be a short delay until the server is ready.(1)拜访页面:http://localhost:7474 (2)初始账户和明码均为neo4j(host类型抉择bolt) (3)输出旧明码并输出新密码:启动前留神本地已装置jdk(倡议装置jdk version 11):https://www.oracle.com/java/technologies/javase-downloads.html 2.2.2 MacOS执行 Add Local DBMS 后,再关上 Neo4j Browser即可 2.3 储备常识在 neo4j 上执行 CRUD 时须要应用 Cypher 查询语言。 官网文档集体整顿的常见Cypher指令2.4 Windows装置时可能遇到问题及解决办法问题:实现装置JDK1.8.0_261后,在启动neo4j过程中呈现了以下问题:Unable to find any JVMs matching version "11"解决方案:提醒装置jdk 11 version,于是下载了jdk-11.0.8,Mac OS可通过ls -la /Library/Java/JavaVirtualMachines/查看已装置的jdk及版本信息。3. 常识图谱数据筹备3.1 收费开源金融数据接口Tushare收费账号可能无奈拉取数据,可参考issues提供的股票数据获取办法: ...

July 8, 2023 · 6 min · jiezi

关于challenge:Pytorch-数据读取机制Dataloader与Dataset

文章和代码曾经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。数据读取机制Dataloader与Dataset 数据分为四个模块 Sampler:生成索引 DataSet:依据索引读取图片及标签。 DataLoader 与 Datasettorch.utils.data.DataLoader 性能:构建可迭代的数据装载器 dataset : Dataset 类,决定数据从哪读取及如何读取batchsize : 批大小num\_works : 是否多过程读取数据(缩小工夫,减速模型训练)shuffle:每个 epoch 是否乱序drop\_last :当样本数不能被 batchsize 整除时,是否舍弃最初一批数据辨别Epoch、Iteration、BatchsizeEpoch: 所有训练样本都已输出到模型中,称为一个 Epoch Iteration:一批样本输出到模型中,称之为一个 Iteration Batchsize:批大小,决定一个 Epoch 有多少个 Iteration 样本总数: 80 Batchsize 8 1 Epoch = 10 Iteration 样本总数: 87 Batchsize 8 1 Epoch = 10 Iteration?drop\_last = True 1 Epoch = 11 Iteration?drop\_last = False torch.utils.data.Dataset 性能: Dataset 抽象类,所有自定义的Dataset 须要继承它,并且复写\_getitem\_() getitem:接管一个索引,返回一个样本 对于读取数据 通过debug详解数据的读取过程 DataLoader依据是否采纳多过程,进入DataLoaderIter,应用Sampler获取index,再通过索引调用DatasetFetcher,在硬盘中读取imgandLabel,通过collate\_fn整顿成一个batchData。 本文参加了 SegmentFault 思否写作挑战「摸索编码世界之旅 - 记我的第一份编程工作」,欢送正在浏览的你也退出。

July 7, 2023 · 1 min · jiezi

关于challenge:以梦筑码-不负韶华-我的开发者故事

在信息技术的浪潮中,有一群人默默贡献,用代码诠释着幻想与谋求。我就是其中的一员,一位致力于前端开发的程序员。我的开发者故事,从幻想、挑战、播种、将来四个方面开展,心愿能给同样酷爱编程的敌人们带来一些启发和能源。 终点:幻想的终点第一次看到计算机是我8岁的时候,还是那种台式“大屁股”电脑,我舅舅过后要考计算机去了网吧,因为未成年人禁止入内,只能远远看一眼就走了,我从小就对计算机充斥了好奇心,感觉它们能够实现各种简单的工作,解决各种各样的问题。随着学习的深刻,我慢慢明确了编程的重要性,也开始有了本人的幻想——成为一名优良的程序员。 在大学期间,我抉择了计算机专业,并开始自学各种编程语言和开发技术。为了进步本人的能力,我加入了一些开源我的项目的开发,尝试着解决一些理论问题。在这个过程中,我不仅积攒了丰盛的教训,还结识了一些气味相投的敌人。 19年我大学毕业,一个偶尔机会,我同学带我加入了华为HDC开发者大会,那一年也是鸿蒙公布的日子,很荣幸能够亲身经历这一刻,在此之前我从未用过华为的产品,体验过华为的产品后就被深深吸引了......在这里,我意识了一群优良的开发者,咱们一起钻研新技术、开发新性能,独特为HarmonyOS的凋敝倒退贡献力量。 这是鸿蒙公布时拍的 遇到一位外国记者采访 在华为欧洲小镇吃的第一顿午餐,滋味真香,成为华为员工真幸福啊,哈哈 挑战:克服困难迎接挑战在HarmonyOS开发的路线上,我遇到了很多挑战。其中最大的挑战之一是当咱们开始开发一个新个性时,咱们面临了一个微小的技术难题。咱们须要在一个大规模分布式系统中实现高效的数据传输和解决,同时保证系统的稳定性和可靠性。这对于咱们团队来说是一个微小的挑战,因为咱们须要克服各种技术难题,比方网络提早、数据一致性、零碎扩展性等等。 为了解决这些问题,咱们采取了多种策略。首先,咱们优化了数据传输的算法和协定,缩小了传输提早和带宽占用。其次,咱们采纳了分布式缓存和数据库技术,进步了零碎的扩展性和数据一致性。最初,咱们设计了一套智能负载平衡和容错机制,确保了零碎的稳定性和可靠性。 HarmonyOS采纳了对立的开发框架,与之前的开发教训有所不同。在开始应用HarmonyOS时,我须要学习新的API和开发工具,并适应这种新的开发模式。这须要我破费一些工夫浏览文档、加入培训课程,以及通过实际来相熟和把握新的开发技术。 另外HarmonyOS反对多种设施类型,如手机、平板、智能手表等,我须要确保我的应用程序在不同设施上可能失常运行和适配。因而,我进行了大量的设施兼容性测试,包含屏幕尺寸适配、分辨率适配、设施兼容性等方面的测试。这须要我购买不同型号的设施,进行全面的测试,以确保我的利用在不同设施上都能提供良好的用户体验,就是有点费钱,电子产品也蛮贵的。 在这个过程中,咱们一直地学习和摸索新技术,一直地解决问题和克服困难。每一次克服一个难题,咱们都会感到一种成就感。这种成就感不仅来自于解决了技术难题,更来自于咱们为HarmonyOS的凋敝倒退做出了奉献。 播种:成长与播种在HarmonyOS开发的路线上,我不仅积攒了丰盛的教训,还播种了很多贵重的教训和技能。以下是我从HarmonyOS开发中取得的几点播种: 团队单干:在HarmonyOS开发中,咱们须要与来自不同畛域的开发者单干。这种单干须要咱们相互理解、相互尊重,独特解决问题和实现我的项目。通过这种形式,我学会了如何与别人单干,如何无效地沟通和协调工作。技术谋求:在HarmonyOS开发中,咱们须要一直学习和摸索新技术。这种谋求让我学会了如何学习新技术、如何把握新技术、如何利用新技术。通过这种形式,我一直进步本人的技术水平,成为了一个更好的程序员。解决问题的能力:在HarmonyOS开发中,咱们常常会遇到各种各样的问题和挑战。在这种状况下,咱们须要疾速地找到问题的起因,疾速地解决问题。通过这种形式,我学会了如何疾速地解决问题、如何无效地调试代码、如何优化算法和协定。把握跨设施开发:HarmonyOS反对多设施的对立开发,通过学习和实际,我把握了一套跨设施开发的技术和办法。我可能依据不同设施的个性和屏幕尺寸,进行布局适配并充分利用HarmonyOS提供的性能,使利用在不同设施上都能呈现出良好的用户体验。积极参与生态系统建设:HarmonyOS的生态系统正在迅速发展壮大,我积极参与了生态系统的建设和奉献。通过与其余开发者和合作伙伴的交换和单干,扩大了本人的视线,学习到了更多对于HarmonyOS生态系统的常识和教训。这里要感激华为开发者学堂,这里有很多鸿蒙课程不仅能够收费学习,还有礼品拿将来:展望未来展望未来我认为HarmonyOS将会在以下几个方面施展重要作用: 物联网:随着物联网技术的一直倒退,HarmonyOS将会成为一个连贯各种智能设施的平台。通过HarmonyOS,人们能够轻松地连贯各种智能设施并实现数据的共享和交互。这将为人们的生存带来更多便当和智能化的体验。人工智能:随着人工智能技术的一直倒退,HarmonyOS将会成为一个智能化的操作系统平台。通过HarmonyOS,人们能够轻松地实现智能语音辨认、智能图像识别、智能举荐等性能。这将为人们的工作和生存带来更多智能化的体验和便当。云计算和大数据:随着云计算和大数据技术的一直倒退,HarmonyOS将会成为一个解决海量数据和提供云端服务的平台。通过HarmonyOS拒杠深耕的开源文化,推动HarmonyOS的生态凋敝倒退,为更多的开发者提供展现自我、分享交换的平台;同时也要将开源的技术利用至各个领域之中,促成技术的翻新和倒退;并且通过开源文化推动数字经济的倒退和社会提高;最终让每一个开发者都能实现自我价值并感触到编程的高兴!⏳总结:幻想与代码同行我的开发者故事总结起来就是:幻想与代码同行。编程不仅是一种技能和工作形式,更是一种表白自我、实现幻想的形式。通过一直地学习和摸索新技术,一直地解决问题和克服困难拒杠深耕的开源文化态度和精力是每一个开发者都应该具备的品质,在开源社区中与其余开发者一起学习、一起翻新、一起提高。我很荣幸成为一名前端开发者,我不是大神,但我正在为之致力!将来之路,愿与君共勉! 本文参加了 SegmentFault 思否写作挑战「摸索编码世界之旅 - 记我的第一份编程工作」,欢送正在浏览的你也退出。

July 5, 2023 · 1 min · jiezi

关于challenge:工作两年了谈谈我的前端开发经验

我曾经毕业两年多了,目前在百度工作,是一名前端开发者,明天借着思否征文活动,聊聊本人的一些开发教训,在文章中,我会涵盖一些粗浅的观点并提供一些实用的技巧,心愿可能对您有所帮忙。 作为一名前端开发者,我在长期的开发经验中学到了很多教训和技巧,以及一些粗浅的意识。在这篇文章中,我想分享这些教训和意识,帮忙更多的前端开发者进步本人的能力和工作效率。 代码品质在前端开发中,代码品质是十分重要的,它不仅关系到我的项目的可维护性和稳定性,还间接影响着开发人员的工作效率和生产力。因而,咱们须要始终保持对代码品质的高度关注。 首先,咱们须要编写高质量的代码。这意味着遵循一些根本的编码标准和最佳实际,例如始终为变量和函数命名,放弃代码的简洁明了,正当应用正文等等。同时,咱们还应该留神代码的缩进和格式化,以不便浏览和了解。 其次,咱们须要进行代码审查和测试。代码审查能够帮忙咱们发现和纠正代码中的潜在问题和破绽,从而进步代码的品质和安全性。代码测试则有助于保障代码的正确性和可靠性,以及缩小 bug 的呈现。 最初,咱们须要留神代码的可读性和可维护性。这波及到如何组织代码和模块化,如何设计代码构造和架构,以及如何抉择适合的工具和框架等等。只有具备良好的可读性和可维护性,代码才可能经得起工夫的考验,更好地满足业务需要。 学习能力在前端开发中,学习能力是十分重要的,因为 Web 技术在一直倒退和变动。为了跟上技术的潮流,咱们须要一直学习和更新本人的常识和技能。 首先,咱们须要建设学习的习惯。学习不应该只是在须要的时候才开始,而是应该成为一个长期的习惯。咱们能够通过浏览书籍和文献、加入培训和课程、关注社区和博客等多种形式来获取新常识和技能。 其次,咱们须要重视学习的成果。学习的成果是与办法和指标密切相关的。咱们应该抉择针对性强的学习形式和指标,防止陷入浅尝辄止或者无头苍蝇的状态。同时,咱们还应该重视常识和实际的联合,及时测验和坚固学习的成果。 最初,咱们须要意识到学习是一种继续一直的过程。咱们须要不断更新本人的技能和常识,认真思考和剖析技术的发展趋势和利用场景,能力一直进步本人的程度和能力。 面向用户前端开发的一大特点是面向用户。不同于后端开发的数据处理、逻辑解决等等,前端开发所面对的是间接的用户,因而,咱们须要关注用户的需要和体验。 首先,咱们须要理解用户的需要。这意味着须要进行用户需要调研和访谈,以理解用户的冀望、需要和关注点。同时,咱们还应该关注用户的行为和体验,追踪用户的行为和反馈,及时调整和晋升用户的体验。 其次,咱们须要器重用户体验的设计。用户体验设计是前端开发中一项十分重要的工作。咱们须要对用户应用场景进行设计,提供简略直观的操作界面和操作流程,以及标准和清晰的数据出现和反馈。 最初,咱们须要对用户反馈进行解决和反馈。用户反馈是前端开发中一个重要的数据源之一,咱们须要及时关注和解决用户的反馈,并给予反馈和回应,以解决和改良相干的问题。 团队单干在前端开发中,团队单干也是十分重要的。不同的团队成员之间须要合作和配合,以实现我的项目的指标和使命。 第一,咱们须要建设一个良好的团队文化。这包含建设独特的价值观和信条,对立团队的指标和愿景,确立成员之间的信赖和了解,以及建设问题和决策的解决机制。 第二,咱们须要充分发挥每个成员的劣势和能力,实现团队成员之间的协同和互补。每个成员都应该在本人的畛域内深刻倒退,并参加到其余畛域的工作中,从而进步自我效力和工作效率。 第三,咱们须要提供清晰而无效的沟通。在团队单干中,沟通是重中之重。咱们应该建设良好的沟通机制和平台,让成员之间可能不便无效地沟通和协调,及时解决问题,进步生产效率。 结语以上就是我在前端开发中所积攒的教训和意识。这些教训和意识能够帮忙咱们更好地实现前端开发的各项任务,进步本人的能力和效率,同时也有助于进步团队的单干和合作效率。我心愿可能帮忙更多的前端开发者,在自我学习和成长的路线上走得更远。 本文参加了 SegmentFault 思否写作挑战「摸索编码世界之旅 - 记我的第一份编程工作」,欢送正在浏览的你也退出。

July 5, 2023 · 1 min · jiezi

关于challenge:SegmentFault-思否写作挑战赛探索编码世界之旅-记我的第一份编程工作

Hello,小伙伴们 ~ SegmentFault 思否 7 月写作挑战赛来咯编程是当今世界十分具备前景和发展潜力的畛域之一,它在各个行业中都扮演着至关重要的角色。随同着科技的减速倒退,越来越多的人开始学习编程,并将其作为本人的职业抉择。 不晓得你还记得第一次接触编程时的情绪吗?可能是“兴奋 + 无从下手”的双重简单情绪。好在小编的第一份编程工作成为了我摸索编码世界的启蒙之旅,让我从“摸不着头脑”到“恍然大悟”! 在那份工作中,学习了许多新的编程常识和技能,也因而失去了深刻的了解和利用。已经被代码的复杂性和技术术语搞得七荤八素,甚至还呈现了“云里雾里”、“脑袋发热”等症状。然而,随着学习的深刻和实际的积攒,我终于可能轻松地了解和编写代码,感觉本人就像 Superman 一样,能够轻易地操控计算机! 当初,不论你是初学者还是资深程序员,小编想邀请编程爱好者们一起来分享你们的第一份编程工作经验和感触,独特摸索编码世界的旅程! 奖品 & 评比规范奖项评比规范奖品数量最佳故事奖讲述你的编程旅程,分享最感人、最乏味、最启发人心的故事。技术书籍2 名最佳技术分享奖分享你的技术心得和教训,为其余编程爱好者提供最实用、最有价值的技术分享。技术书籍2 名最佳风趣有趣奖以风趣、有趣的语言,让大家感触到编程的乐趣和魅力,博得最佳风趣有趣奖。技术书籍2 名最具启发性奖通过你的经验和常识,激励更多人摸索编程世界,博得最具启发性奖。技术书籍2 名最佳创意奖分享最具创意和新颖性的编程故事或技术。技术书籍2 名 惊喜福利参加写作挑战的创作者邀请至多 1 位新创作者参加写作挑战,邀请者可额定取得由 ONES 资助的【礼包】一份,限量 20 份喔 邀请者请填写以下表单,相干经营工作人员会核查是否邀请胜利表单:https://jinshuju.net/f/oWC6TkTips: 对于邀请者:邀请者需也参加写作挑战,可邀请多位对于新创作者:流动期间注册的新用户&非流动期间注册的用户,但近 1 年未公布过文章的用户对于限量 20 份:依据被邀请者实现写作挑战工夫排序前 20 名礼品图大赏: 流动工夫7 月 3 日 -7 月 30 日中奖名单公布工夫:8 月 2 日 18:30 前公布内容规定1、 + 标签 #challenge,以及相干技术标签,必加项2、+ 小尾巴,必加项 本文参加了 SegmentFault 思否写作挑战「摸索编码世界之旅 - 记我的第一份编程工作」,欢送正在浏览的你也退出。3、文章要求原创,内容合乎思否社区的内容规范和标准, 字数不得少于 500 字,不得有打广告、加二维码引流和凑字数行为。4、文章不能只贴代码,要有本人的剖析思考,否则不计入如果发现参加流动的文章是非原创文章,会勾销该作者获奖资格。 注:全文超过 50% 与别人创作的内容反复都视为非原创(包含间接剽窃转载 、大篇幅摘抄书籍、网络文章、产品官网文档等)。5、善用题目对内容进行分层。文章的题目会在文章页面的右侧以目录模式进行展现,不便读者进行检索。 更多排版实用技巧能够查看 Markdown 编辑器语法指南。链接:https://segmentfault.com/a/1190000040651943 如有问题能够在评论区留言或增加小姐姐微信~ ...

July 3, 2023 · 1 min · jiezi

关于challenge:WinnersSegmentFault-思否-4-月写作闯关挑战赛中奖名单来咯

敬爱的小伙伴们,4 月的「SegmentFault 思否写作闯关挑战赛」 流动于 5 月 3 日早晨 12 点曾经完结啦! 上面就让咱们正式颁布一下获奖名单吧~ 获奖名单实现 Lv.1 - Lv.3 中,任意一项挑战,即可取得挑战赛专属电子徽章一枚中奖用户实现项 Corrallium Level 2 fighting Level 2 周弈帆 Level 2 02 Level 1获奖二:实现 Lv.1 - Lv.3 中,任意二项挑战,可取得挑战赛专属电子徽章一枚+ 技术书籍一本中奖用户实现项tiny极客Level 2 + Level 3YuetianWLevel 1 + Level 2布鲁瓦丝Level 1 + Level 2汀丶Level 1 + Level 2如何领奖?获奖的小伙伴,请将收货信息填写到链接中链接:https://jinshuju.net/f/CA1ddu重点:表格填写截止到 2023 年 5 月 11 日,逾期则视为主动放弃如有问题能够在评论区留言获奖规定 & 挑战项详情:https://segmentfault.com/a/1190000043648149精彩内容欢送大家浏览参赛问答&文章:https://segmentfault.com/t/challenge/blogs

May 4, 2023 · 1 min · jiezi

关于challenge:利用物体关键点相似性损失增强YOLO的多人姿态估计

介绍一下这篇论文的次要内容给诸位读者。 论文地址:https://arxiv.org/abs/2204.068061. 介绍多人2D姿势预计是了解图像中人类的工作。给定一个输出图像,指标是检测每个人并定位他们的身材关节。推断图像中多人的姿势即可具备挑战性是因为图像中的人数可变,尺度变动,身材部位的遮挡,人体的非刚性,以及各种其余起因。 图1所示。在拥挤的COCO val2017样本图像上的定性后果。上图:yolov5m6-pose的输入显示了咱们办法的鲁棒性。一个人的关键点永远不会因为固有的分组而与另一个人产生谬误。下图:HigherHRNetW32的输入,显示即便关键点地位根本正确,分组算法也很容易失败。自底向上的办法在拥挤的场景中容易呈现这样的分组谬误。 现有的姿势预计解决方案分为自上而下和自下而上。自上而下的[30]、[8]、[12]、[13]、[19]或两阶段办法是目前最先进的办法。他们首先采纳重型人体检测器并执行对每个检测进行单人姿势预计。自顶向下办法的复杂度随着图像中人数的减少而线性减少。大多数须要恒定运行工夫的实时应用程序不喜爱自上而下的办法,因为高复杂度和可变的运行工夫。相比之下,自下而上的[4],[5],[14],[23],[25]办法提供恒定的运行工夫,因为它们依赖于热图在单次拍摄中检测所有关键点,而后进行简单的后处理,将它们分组为集体。自下而上的办法中的后处理能够波及像像素级NMS,线积分,细化,分组等步骤。坐标调整和细化缩小了下采样热图的量化误差,而NMS用于在热图中找到部分最大值。即便通过后处理,热图也可能不够尖利,无奈辨别同一类型的两个十分严密的关节。同样,自下而上的办法无奈进行端到端的训练,因为后处理步骤是不可微的,并且产生在卷积网络之外。它们在不同的办法中有很大的不同,从线性规划[29]到各种启发式[4]。很难应用CNN加速器对它们进行减速,因而速度相当慢。One-shot办法[34,35]尽管防止了分组工作,但与自下而上的办法体现不一样。它们进一步依赖于额定的后处理来进步性能。 本文工作的动机是解决在没有热图的状况下进行姿势预计并合乎指标检测的问题,因为指标检测中的挑战与姿势预计相似,例如尺度变动、遮挡、人体的非刚性等。因而,如果一个人体检测器网络能够解决这些挑战,那么它也能够解决姿势预计。例如,最新的指标检测框架试图通过在多个尺度上进行预测来缓解尺度变动的问题。在这里,咱们采纳雷同的策略,在每个检测对应的多个尺度上预测人体姿势。同样,指标检测畛域的所有重大进展都无缝地传递到姿势预计的问题上。咱们提出的姿势预计技术能够很容易地集成到任何运行指标检测的计算机视觉零碎中,而计算量简直为零增长。 咱们将咱们的办法称为YOLO-Pose,基于风行YOLOv5[1]框架。这是第一次专一于解决没有热图的2D姿势预计问题的尝试,并强调解脱目前应用的各种非标准化的后处理。咱们的办法应用了与指标检测中雷同的后处理。咱们在具备挑战性的COCO关键点数据集[7]上验证了咱们的模型,并在AP方面展现了有竞争力的准确性,在AP50方面比具备相似复杂性的模型有显著的改良。 在咱们的办法中,与高空实在框匹配的锚框或锚点存储其残缺的2d姿势以及边界框地位。来自不同人的两个类似关节能够在空间上彼此靠近。应用热图,很难辨别来自不同人的两个空间上靠近的类似关节。然而,如果将这两个人与不同的锚点进行匹配,则很容易辨别空间上靠近和类似的关键点。同样,与锚点相干的关键点曾经被分组了。因而,不须要进一步分组。 在自下而上的办法中,一个人的关键点很容易被误认为另一个人,如图1所示,而咱们的工作自身就解决了这个问题。与自上而下的办法不同,YOLO-Pose的复杂性与图像中的人数无关。因而,咱们领有自上而下和自下而上两种办法的长处:恒定的运行工夫以及简略的后处理。 总的来说,咱们做出了以下奉献: 倡议解决与指标检测相一致的多人姿势预计,因为尺度变动和遮挡等重大挑战对两者都是独特的。因而,迈出了对立这两个畛域的第一步。咱们的办法将间接受害于指标检测畛域的任何提高。无热图办法应用规范的OD后处理,而不是波及像素级NMS、调整、细化、线积分和各种分组算法的简单后处理。该办法是鲁棒的,因为没有独立的后处理的端到端训练。将IoU loss的思维从框检测扩大到关键点。对象关键点类似度(ok)不仅用于评估,还作为训练的损失。OKS损失是尺度不变的,实质上给不同的关键点不同的权重。以约4倍的计算量实现了SOTA AP50。例如,在coco test-dev2017 上 ,Yolov5m6-pose 在 66.3 GMACS下实现了89.8的AP50,而SOTA DEKR[30]在283.0 GMACS下实现了89.4的AP50。提出了一种联结检测和姿势预计框架。通过OD网络,姿势预计简直是收费的。提出了模型的低复杂度变体,其性能显著优于像EfficientHRNet[15]这样的实时聚焦模型。2. 相干工作多人2D姿势预计可分为自上而下和自下而上两种办法。 2.1. 自上而下的办法Top-down[8],[12],[13],[19],[20],[21]或两阶段办法首先应用较重的人体检测器(如Faster RCNN[21])进行人体检测,而后为每个检测到的人预计2d姿态。 因而,计算复杂度随人数线性减少。现有的自上而下的办法大多集中在设计网络架构上。mask - rcnn[20]检测关键点作为宰割掩码。Simple Baseline[8]提出了一个简略的架构,具备一个深度骨干和几个反卷积层,以扩充输入特色的分辨率。这些办法具备尺度不变性,因为它们以雷同的尺度解决所有受试者,在风行的基准上实现了最先进的性能。然而,它们在解决遮挡方面体现不佳。咱们的办法在肯定水平上克服了遮挡的挑战,如图3所示。 2.2. 自底向上的办法Bottom-up办法[4],[5],[14],[23],[25]在一个镜头中找出图像中所有人物的无关关键点,而后将它们分组为单个人物实例。自下而上的办法工作在一个被称为热图的概率图上,它预计每个像素蕴含特定关键点的概率。关键点的确切地位是通过NMS找到的热图的部分最大值。自底向上的办法通常复杂度低,具备恒定运行工夫的长处。然而,与自上而下的办法相比,准确性有很大的降落。还有各种其余的调整和细化步骤,以从热图中提取更好的关键点。各种办法不同的局部是用于对图像中检测到的身材部位进行分组的策略。OpenPose[4]构建了一个蕴含两个分支的模型,用于预测关键点热图和局部亲和场,后者是建模关节之间关联的2D向量。在分组过程中应用局部亲和场。在联想嵌入[5]中,Newell等人训练网络来预测每个关节的关键点热图和标签值。定义损失函数,预测属于同一个人的关节的类似标签值,以及属于不同人的关节的不同标签值。Chen等人提出了更高的HRNet[9],它应用更高的输入分辨率来大幅提高预测的精度。耿等人[30]最近提出了DEKR,提出了应用偏移图的间接回归办法。它提出了一种k分支构造,应用自适应卷积来回归相应关键点的偏移量。这种办法须要关键点热图和一个核心热图,用于后处理中的各种NMS操作。即便后处理没有任何分组,也不像咱们的那样含糊其辞。 3. YOLO-Pose和其余自下而上的办法一样,YOLO-pose是一种单镜头办法。然而,它不应用热图。相同,它将一个人的所有关键点与锚相关联。它基于YOLOv5[1]指标检测框架,也能够扩大到其余框架。咱们也在YOLOX[2]上进行了无限水平的验证。图2阐明了用于姿势预计的要害拍板的整体架构。 3.1. 概述为了展现咱们解决方案的全副后劲,咱们必须抉择一个善于检测人类的架构。OLOv5在准确性和复杂性方面都是当先的检测器。因而,咱们抉择它作为咱们的根底,并在其根底上进行构建。YOLOv5次要专一于80级COCO[7]指标检测,盒头预测每个锚点85个元素。它们别离对应80类的边界框、对象得分和置信度得分。对应于每个网格地位,有三个不同形态的锚点。 对于人体姿势预计,它归结为一个单类人检测问题,每个人有17个相干的关键点,每个关键点再次用地位和置信度标识:{,,}。因而,与锚点相干的17个关键点总共有51个元素。因而,对于每个锚点,要害拍板预测51个元素,盒子头预测6个元素。对于具备n个关键点的锚点,整体预测向量定义为: 关键点置信度是基于该关键点的可见性标记进行训练的。如果一个关键点是可见的或被遮挡的,那么ground truth置信度被设置为1否则如果它在视线之外,置信度被设置为0。在推理过程中,咱们保留置信度大于0.5的关键点。所有其余预测的关键点都被回绝。预测关键点置信度不用于评估。然而,因为网络预测了每个检测的所有17个关键点,咱们须要过滤掉视线之外的关键点。否则,就会呈现悬空的关键点,导致骨骼变形。现有的基于热图的自底向上办法不须要这一点,因为视线之外的关键点一开始就没有被检测到。YOLO-Pose 使 用 CSP-darknet53[27] 作 为 骨 干 ,PANet[6]用于交融来自骨干的各种尺度的特色。接下来是4个不同尺度的检测头。最初,有两个解耦的头用于预测框和关键点。 在这项工作中,咱们将复杂度限度在150 gmac,在此范畴内,咱们可能获得有竞争力的后果。随着复杂性的进一步减少,有可能用自上而下的办法进一步弥合差距。然而,咱们并不谋求这条路线,因为咱们的重点是实时模型。 图2。基于YOLOv5的YOLO-pose架构。输出图像通过darknetcsp骨干传递,该骨干生成各种尺度的特色图{P3, P4, P5, P6}。PAnet用于跨多个尺度交融这些特色图。PANet的输入被馈送给检测头。最初每个检测头分支成盒子头和要害拍板。 3.2. 基于锚的多人姿势生成对于给定的图像,与人匹配的锚点将其整个2D姿势连同边界框一起存储。框坐标依据锚点核心进行转换,而框尺寸依据锚点的高度和宽度进行归一化。相似地,关键点地位被转换为锚点核心。然而,关键点并没有依照锚点的高度和宽度进行归一化。关键点和框都被预测到锚点的核心。因为咱们的加强与锚点宽度和高度无关,它能够很容易地扩大到无锚点的指标检测办法,如YOLOX [2], FCOS[28]。 3.3. 基于IoU的Bounding-box损失函数大多数古代指标检测器优化IoU损失的高级变体,如GIoU [36], DIoU或CIoU[37]损失,而不是基于间隔的框检测损失,因为这些损失是尺度不变的,并间接优化评估指标自身。咱们应用CIoU损失进行边界框监督。对于与地位(,)和尺度s的锚点匹配的高空真值边界框,损失定义为 是地位(,)和尺度s的锚点预测框。在咱们的例子中,每个地位有三个锚点,预测产生在四个尺度上。 3.4. 人体姿势损失函数公式传统上,基于热图的自底向上办法应用L1损失来检测关键点。然而,L1损失不肯定适宜取得最优的ok。同样,L1损耗是奢侈的,没有思考到对象的尺度或关键点的类型。因为热图是概率图,在纯基于热图的办法中不可能应用ok作为损失。只有当咱们回归关键点地位时,OKS能力用作损失函数。耿等人[30]应用尺度归一化的L1损失用于关键点回归,这是走向ok损失的一步。因为,咱们间接依据锚点核心对关键点进行回归,所以咱们能够优化评估指标自身,而不是代理损失函数。 咱们将IOU损失的思维从box扩大到关键点。在关键点的状况下,对象关键点类似度(ok)被视为IOU。OKS损失具备固有的尺度不变性,并赋予某些关键点比其余关键点更多的重要性。例如,一个人头部(眼睛,鼻子,耳朵)上的关键点比一个人身材上的关键点(肩膀,膝盖,臀部等)上的关键点更容易受到像素级谬误的惩办。这些权重因子是COCO的作者从冗余中教训地抉择的标注的验证图像。与vanilla IoU损失不同,它蒙受非重叠状况下的梯度隐没,OKS损失从未安稳。因而,OKS损失更相似于dIoU[37]损失。 ...

May 3, 2023 · 1 min · jiezi

关于challenge:如何使用gradcam对ViT的输出进行可视化附代码

应用grad-cam对ViT的输入进行可视化[TOC] 前言Vision Transformer (ViT) 作为当初CV中的支流backbone,它能够在图像分类工作上达到与卷积神经网络 (CNN) 相媲美甚至超过的性能。ViT 的核心思想是将输出图像划分为多个小块,而后将每个小块作为一个 token 输出到 Transformer 的编码器中,最终失去一个全局的类别 token 作为分类后果。 ViT 的劣势在于它能够更好地捕获图像中的长距离依赖关系,而不须要应用简单的卷积操作。然而,这也带来了一个挑战,那就是如何解释 ViT 的决策过程,以及它是如何关注图像中的不同区域的。为了解决这个问题,咱们能够应用一种叫做 grad-cam 的技术,它能够依据 ViT 的输入和梯度,生成一张热力求,显示 ViT 在做出分类时最关注的图像区域。 原理grad-cam对ViT的输入进行可视化的原理是利用 ViT 的最初一个注意力块的输入和梯度,计算出每个 token 对分类后果的贡献度,而后将这些贡献度映射回原始图像的空间地位,造成一张热力求。具体来说,grad-cam+ViT 的步骤如下: 给定一个输出图像和一个指标类别,将图像划分为 14x14 个小块,并将每个小块转换为一个 768 维的向量。在这些向量之前,还要加上一个非凡的类别 token ,用于示意全局的分类信息。这样就失去了一个 197x768 的矩阵,作为 ViT 的输出。将 ViT 的输出通过 Transformer 的编码器,失去一个 197x768 的输入矩阵。其中第一个向量就是类别 token ,它蕴含了 ViT 对整个图像的了解。咱们将这个向量通过一个线性层和一个 softmax 层,失去最终的分类概率。计算类别 token 对指标类别的梯度,即 $\frac{\partial y_c}{\partial A}$ ,其中 $y_c$ 是指标类别的概率,$A$ 是 ViT 的输入矩阵。这个梯度示意了每个 token 对分类后果的重要性。对每个 token 的梯度求平均值,失去一个 197 维的向量 $w$ ,其中 $w_i = \frac{1}{Z}\sum_k \frac{\partial y_c}{\partial A_{ik}}$ ,$Z$ 是梯度的维度,即 768 。这个向量 $w$ 能够看作是每个 token 的权重。将 ViT 的输入矩阵和权重向量相乘,失去一个 197 维的向量 $s$ ,其中 $s_i = \sum_k w_k A_{ik}$ 。这个向量 $s$ 能够看作是每个 token 对分类后果的贡献度。将贡献度向量 $s$ 除去第一个元素(类别 token ),并重塑为一个 14x14 的矩阵 $M$ ,其中 $M_{ij} = s_{(i-1) \times 14 + j + 1}$ 。这个矩阵 $M$ 能够看作是每个小块对分类后果的贡献度。将贡献度矩阵 $M$ 进行归一化和上采样,失去一个与原始图像大小雷同的矩阵 $H$ ,其中 $H_{ij} = \frac{M_{ij} - \min(M)}{\max(M) - \min(M)}$ 。这个矩阵 $H$ 就是咱们要求的热力求,它显示了 ViT 在做出分类时最关注的图像区域。将热力求 $H$ 和原始图像进行叠加,失去一张可视化的图像,能够直观地看到 ViT 的注意力散布。应用代码import argparseimport cv2import numpy as npimport torchfrom pytorch_grad_cam import GradCAM, \ ScoreCAM, \ GradCAMPlusPlus, \ AblationCAM, \ XGradCAM, \ EigenCAM, \ EigenGradCAM, \ LayerCAM, \ FullGradfrom pytorch_grad_cam import GuidedBackpropReLUModelfrom pytorch_grad_cam.utils.image import show_cam_on_image, \preprocess_imagefrom pytorch_grad_cam.ablation_layer import AblationLayerVit# 加载预训练的 ViT 模型model = torch.hub.load('facebookresearch/deit:main','deit_tiny_patch16_224', pretrained=True)model.eval()# 判断是否应用 GPU 减速use_cuda = torch.cuda.is_available()if use_cuda:model = model.cuda()接下来,咱们须要定义一个函数来将 ViT 的输入层从三维张量转换为二维张量,以便 grad-cam 可能解决: ...

May 3, 2023 · 2 min · jiezi

关于challenge:扩散模型Diffusion-Model详解直观理解数学原理PyTorch-实现

在过来的大半年里,以Stable Diffusion为代表的AI绘画是世界上最为炽热的AI方向之一。或者大家会有疑难,Stable Diffusion里的这个"Diffusion"是什么意思?其实,扩散模型(Diffusion Model)正是Stable Diffusion中负责生成图像的模型。想要了解Stable Diffusion的原理,就肯定绕不过扩散模型的学习。 在这篇文章里,我会由浅入深地对最根底的去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM)进行解说。我会先介绍扩散模型生成图像的基本原理,再用简略的数学语言对扩散模型建模,最初给出扩散模型的一份PyTorch实现。本文不会去堆砌过于简单的数学公式,哪怕你没有相干的数学背景,也可能轻松了解扩散模型的原理。 扩散模型与图像生成在意识扩散模型之前,咱们先退一步,看看个别的神经网络模型是怎么生成图像的。显然,为了生成丰盛的图像,一个图像生成程序要依据随机数来生成图像。通常,这种随机数是一个满足规范正态分布的随机向量。这样,每次要生成新图像时,只须要从规范正态分布里随机生成一个向量并输出给程序就行了。 而在AI绘画程序中,负责生成图像的是一个神经网络模型。神经网络须要从数据中学习。对于图像生成工作,神经网络的训练数据个别是一些同类型的图片。比方一个绘制人脸的神经网络会用人脸照片来训练。也就是说,神经网络会学习如何把一个向量映射成一张图片,并确保这个图片和训练集的图片是一类图片。 可是,相比其余AI工作,图像生成工作对神经网络来说更加艰难一点——图像生成工作不足无效的领导。在其余AI工作中,训练集自身会给出一个「标准答案」,领导AI的输入向标准答案聚拢。比方对于图像分类工作,训练集会给出每一幅图像的类别;对于人脸验证工作,训练集会给出两张人脸照片是不是同一个人;对于指标检测工作,训练集会给出指标的具体位置。然而,图像生成工作是没有标准答案的。图像生成数据集里只有一些同类型图片,却没有领导AI如何画得更好的信息。 为了解决这一问题,人们专门设计了一些用于生成图像的神经网络架构。这些架构中比拟闻名的有生成反抗模型(GAN)和变分自编码器(VAE)。 GAN的想法是,既然不晓得一幅图片好不好,就罗唆再训练一个神经网络,用于分别某图片是不是和训练集里的图片长得一样。生成图像的神经网络叫做生成器,鉴定图像的神经网络叫做判断器。两个网络相互反抗,共同进步。 VAE则应用了逆向思维:用向量生成图像很艰难,那就同时学习怎么用图像生成向量。这样,把某图像变成向量,再用该向量生成图像,就应该失去一幅和原图像截然不同的图像。每一个向量的绘画后果有了一个标准答案,能够用个别的优化办法来领导网络的训练了。VAE中,把图像变成向量的网络叫做编码器,把向量转换回图像的网络叫做解码器。其中,解码器就是负责生成图像的模型。 始终以来,GAN的生成成果较好,但训练起来比VAE麻烦很多。有没有和GAN一样弱小,训练起来又不便的生成网络架构呢?扩散模型正是满足这些要求的生成网络架构。 扩散模型是一种非凡的VAE,其灵感来自于热力学:一个散布能够通过一直地增加噪声变成另一个散布。放到图像生成工作里,就是来自训练集的图像能够通过一直增加噪声变成符合标准正态分布的图像。从这个角度登程,咱们能够对VAE做以下批改:1)不再训练一个可学习的编码器,而是把编码过程固定成一直增加噪声的过程;2)不再把图像压缩成更短的向量,而是从头至尾都对一个等大的图像做操作。解码器仍然是一个可学习的神经网络,它的目标也同样是实现编码的逆操作。不过,既然当初编码过程变成了加噪,那么解码器就应该负责去噪。而对于神经网络来说,去噪工作学习起来会更加无效。因而,扩散模型既不会波及GAN中简单的反抗训练,又比VAE更弱小一点。 具体来说,扩散模型由正向过程和反向过程这两局部组成,对应VAE中的编码和解码。在正向过程中,输出\(\mathbf{x}_0\)会一直混入高斯噪声。通过\(T\)次加噪声操作后,图像\(\mathbf{x}_T\)会变成一幅符合标准正态分布的纯噪声图像。而在反向过程中,咱们心愿训练出一个神经网络,该网络可能学会\(T\)个去噪声操作,把\(\mathbf{x}_T\)还原回\(\mathbf{x}_0\)。网络的学习指标是让\(T\)个去噪声操作正好能对消掉对应的加噪声操作。训练结束后,只须要从规范正态分布里随机采样出一个噪声,再利用反向过程里的神经网络把该噪声复原成一幅图像,就可能生成一幅图片了。 高斯噪声,就是一幅各处色彩值都满足高斯分布(正态分布)的噪声图像。 总结一下,图像生成网络会学习如何把一个向量映射成一幅图像。设计网络架构时,最重要的是设计学习指标,让网络生成的图像和给定数据集里的图像类似。VAE的做法是应用两个网络,一个学习把图像编码成向量,另一个学习把向量解码回图像,它们的指标是让还原图像和原图像尽可能类似。学习结束后,解码器就是图像生成网络。扩散模型是一种更具体的VAE。它把编码过程固定为加噪声,并让解码器学习怎么样打消之前增加的每一步噪声。 扩散模型的具体算法上一节中,咱们只是大略理解扩散模型的整体思维。这一节,咱们来引入一些数学示意,来看一看扩散模型的训练算法和采样算法具体是什么。为了便于了解,这一节会呈现一些不是那么谨严的数学形容。更加具体的一些数学推导会放到下一节里介绍。 前向过程在前向过程中,来自训练集的图像\(\mathbf{x}_0\)会被增加\(T\)次噪声,使得\(x_T\)为符合标准正态分布。精确来说,「加噪声」并不是给上一时刻的图像加上噪声值,而是从一个均值与上一时刻图像相干的正态分布里采样出一幅新图像。如上面的公式所示,\(\mathbf{x}_{t - 1}\)是上一时刻的图像,\(\mathbf{x}_{t}\)是这一时刻生成的图像,该图像是从一个均值与\(\mathbf{x}_{t - 1}\)无关的正态分布里采样进去的。 $$\mathbf{x}_t \sim \mathcal{N}(\mu_t(\mathbf{x}_{t - 1}),\sigma_t^2\mathbf{I})$$ 少数文章会说前向过程是一个马尔可夫过程。其实,马尔可夫过程的意思就是以后时刻的状态只由上一时刻的状态决定,而不禁更早的状态决定。下面的公式表明,计算\(\mathbf{x}_t\),只须要用到\(\mathbf{x}_{t - 1}\),而不须要用到\(\mathbf{x}_{t - 2}, \mathbf{x}_{t - 3}...\),这合乎马尔可夫过程的定义。绝大多数扩散模型会把这个正态分布设置成这个模式: $$\mathbf{x}_t \sim \mathcal{N}(\sqrt{1 - \beta_t}\mathbf{x}_{t - 1},\beta_t\mathbf{I})$$ 这个正态分布公式乍看起来很奇怪:\(\sqrt{1 - \beta_t}\)是哪里冒出来的?为什么会有这种奇怪的系数?别急,咱们先来看另一个问题:如果给定\(\mathbf{x}_{0}\),也就是从训练集里采样出一幅图片,该怎么计算任意一个时刻\(t\)的噪声图像\(\mathbf{x}_{t}\)呢? 咱们无妨依照公式,从\(\mathbf{x}_{t}\)开始倒推。\(\mathbf{x}_{t}\)其实能够通过一个规范正态分布的样本\(\epsilon_{t-1}\)算进去: $$\mathbf{x}_t \sim \mathcal{N}(\sqrt{1 - \beta_t}\mathbf{x}_{t - 1},\beta_t\mathbf{I}) \\\Rightarrow \mathbf{x}_t = \sqrt{1 - \beta_t}\mathbf{x}_{t - 1} + \sqrt{\beta_t}\epsilon_{t-1}; \epsilon_{t-1} \sim \mathcal{N}(0, \mathbf{I})$$ ...

May 2, 2023 · 10 min · jiezi

关于challenge:NeRF入门学习资料

本文章次要记录无关NeRF和SLAM方面的材料。作者是科研小白,做此文章一方面是学习记录,同时也想可能取得大家的反馈,从而一直地丰盛本人的知识面和方法论,因而心愿大家可能不吝赐教,也心愿大家可能给我提供一些学习交换的圈子!教程材料原生NeRF Paper http://arxiv.org/abs/2003.08934【原创】NeRF 三维重建 神经辐射场 建模 算法详解 NeRF相干我的项目汇总介绍。_哔哩哔哩_bilibili b站up主讲述NeRF原理,视频分辨率比拟低(明明我记得之前是比拟清晰的),然而比拟直白,容易了解一些NeRF的一些物理含意。(对于新事物的了解,我感觉最快的办法就是找点具象化的货色看看,了解其存在模式和含意,再去看实践根底)Nerf-Medium 这个Medium上的教程强烈推荐看一下,能够联合论文的公式略微了解一下(间接看Method局部就ok,带着目标看论文比拟容易了解)留神:Medium遇到很怪的一个点,不登陆收费,登陆反而免费了体渲染: https://zhuanlan.zhihu.com/p/32431795 其余NeRF的材料花坛里的猫:【NeRF】入手训练新的三维场景NeRF代码参数解说绝对具体的NeRF解说资料Tutorial for NeRF(对下面那个Medium的教程做的一些记录)marching cubes是一个生成3D mesh的算法3D数据的表达形式:从3D voxels到点云到SDF传统三维构建的独特毛病: 相机:耗时和须要大量数据雷达:低廉人工建模消耗工夫和精力对于高反射物体、“网状”物体,如灌木丛和链状栅栏,或通明物体,都不适宜大规模扫描。影响模型精度:stair-stepping effects and driff 一些综述来自Frank Dellaert大佬整顿的: overview from 2020overview from 2021NeRF简略解说概念光场,其用不同方向观测角度下的光线扫描三维空间中的每个点,别离有五个变量 、 (别离是空间中点的三维坐标和光线的角度) 为什么只有两个变量,因为在空间中一个点定下来之后,就是经纬度的问题了,不像是形容位姿。NeRF基于光场(light/radiance fields)。NeRF则是构建从光场的5D空间形容,到4D空间的映射(色彩,强度density),\( c=(R,G,B) \),\( \sigma \) 。density能够了解为光线在五维空间中被截断的likehood,比方遮挡。 NeRF的规范范式 \( F:(x,d) \rightarrow (c, \sigma) \)在生成式场景重建课题(generalized scene reconstruction)中,给定相机位姿和图像,还有许多SFM系列算法: COLMAP, Agisoft Metashape, Reality Capture, or Meshroom 之前为了做一个我的项目用了挺多三维重建的现成库:COLMAP、CMVS、Meshroom、VisualSFM等,如果须要请在评论留言,我前面再出一篇文章介绍这些工具的应用。劣势间接数据驱动场景的间断表白隐式思考物体个性:specularity高光,roughness粗糙度隐式表白光感NeRF的流程:数据处理通过给定位姿和图像,构建射线,通过对射线进行采样生成数据点,采纳 coarse-to-fine 的形式,先平均分段,而后对每个段进行随机采样,这样就用 \( r = o + td \) 来示意每一个采样点,就是 \( r = (x,y,z) \),其中方向 \( d=(\theta ,\phi) \) 就是每个相机坐标的原点和 \( v_c=[0,0,-1] \) 通过 \( T_{wc} \) 转到世界坐标下,留神这里不须要加上 \( v_o \),因为只是代表一个朝向 ...

April 30, 2023 · 1 min · jiezi

关于challenge:写给-mmsegmentation-工具箱新手的避坑指南

前言我在 Windows 环境应用 MMClassification、MMDetection 都还算轻轻松松,然而走完 MMSegmentation 全流程之后,真的想感叹一句“踩了不少坑啊”,所以想把本人的遇坑教训凝练总结进去,写一个专门给老手无伤通关的避坑教程。 Windows 配置环境的痛:mmcv-full在 v1.4.0 之前,mmcv-full 的装置没有针对 Windows 的现成预编译包,所以大部分老手会卡在 build MMCV 的过程中......这种状况下有两种解决方案。 计划 1:新版编译版本主动装置在 1.4.0 之后,MMCV 会跟上 PyTorch 版本更新 Windows 环境下的mmcv-full预编译包,然而可用的版本范畴比拟局限,依赖 PyTorch、CUDA、mmcv-full 低版本的炼丹师天然就不适宜这种装置形式了(看计划2),上面是以 PyTorch1.11.0、 CUDA11.3 为例的装置命令。 一句命令装置 mmcv-full,下载速度还是不错的pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.11/index.html计划 2:手动操作如果你不心愿更新到新版 MMSegmentation 或者 MMCV,也能够尝试手动装置,上面以在 GPU+CPU 双环境运行的指标来装置 mmcv-full,参考了官网文档,所有命令行运行在 powershell,应用 cmd 的炼丹师须要留神两个命令行的命令差别。 创立虚拟环境conda create --name mmcv python=3.7 # 经测试,3.6, 3.7, 3.8 也能通过conda activate mmcv # 确保做任何操作前先激活环境进入一个临时文件门路,克隆 mmcv-full 源码git clone https://github.com/open-mmlab/mmcv.gitcd mmcv # 进入我的项目文件夹装置依赖所有依赖中,也装置了 ninja 库用于放慢最初编译的速度 ...

April 27, 2023 · 3 min · jiezi

关于challenge:SAM监督学习已跳出过拟合泥潭

总览 SAM 的成就Demo:Segment Anything | Meta AI (segment-anything.com)Paper:arxiv提出了新工作:基于提醒的宰割提出了新模型:SAM(Segment Anything Moduel)提出了新数据集:SA-1B总之,最让人冲动的是以上三个成绩都是 SAM 在监督工作上挑战 Zero-Shot 带来的 ZERO-SHOT 的基本概念咱们先从生存中的视角去了解 Zero-Shot假如小明和爸爸去参观动物园。开到了一只黑白相间的斑马、一只喙很大的鹦鹉和一只圆滚滚的幼年海豹。爸爸给小明提醒,让他在动物园找到一只像斑马一样黑白相间、像鹦鹉一样有大喙、像幼年海报一样圆滚滚的动物假如小明从未见过其余的动物,但他能够通过总结现有动物共有的特色来推断出其余动物的外貌。例如,小明晓得斑马、鹦鹉、海豹。当小明看到一只企鹅时,他能够依据已知的属性信息揣测出它可能就是爸爸要他找的黑白相间的、有大喙、圆滚滚的动物,因而他可能很天然地把这只企鹅归类为“未知”。这就是 Zero-Shot 的基本概念,即通过已知的类别和属性信息对新的未见过的类别进行分类在理论利用中,ZSL能够帮忙咱们解决各种问题,例如图像识别、自然语言解决等畛域中的数据有余或无奈取得理论标签的问题。通过零样本学习,咱们能够先积攒先验常识,再推断和预测新的未知类别,从而实现更加灵便和高效的智能化利用 什么驱使了模型能够 ZERO-SHOTSegment Anything 这篇工作的次要特点有两个:一是在宰割算法中引入了 3 种宽容度高的模态,二是构建了一个微小的、多元的宰割数据集,比最大的宰割数据集大 6 倍,宰割量大 400 倍。利用 Transformer 的注意力架构,促使图像的特色同时与文本模态、点模态、定位框模态相互作用。本来模型只学失去从 1 个图像到 1 个标签的映射,当初模型学习 1 个标签的同时要关注图像模态与 3 个模态的组合以及不同组合之间的分割。已经咱们认为残缺的 1 to 1 算法未然成为了模型“偷懒”的捷径。另外,这三种辅助模态的宽容度好(注:标签文本模态略逊)。作为图像输出之外的额定提醒(prompt),只有是属于宰割对象的所有点、框或者同义文本都能作为辅助模态的输出。反之,每一个点、框或者文本都对应了各式各样的图像对象,这让模型在某个模态和某种图像对象中同时具备多个学习视角,无论是对于 3 个额定模态还是图像模态,这种学习视角都近乎是无穷的。也因而,基于提醒工程(prompt engineering,基于需要对提醒做灵便变换)的 SA 简直能够做所有宰割畛域的细分工作,甚至还未曾存在的新工作。极其宏大且多元的互联网数据源是 Zero-Shot 能力的另一大外围。SA-1B 涵盖了各种类型、格调、场景和视角的图像。这有利于模型学习更通用和鲁棒的特色示意,从而进步 Zero-Shot 宰割的性能。下面曾经剖析的 SA(Segment Anything) 具备 Zero-Shot 性能的几个外围起因,而上面剖析的是一些主要的因素。SA-1B 的类别尽管不细然而特地全,蕴含了大量的常见和常见类别,它们笼罩了自然界和人造界的各个领域。这有利于模型学习更宽泛和粗疏的语义信息,从而进步零样本宰割的性能。SA-1B 的标注非常准确,大量噪声被无意修复,有利于模型学习更精确和清晰的边界信息,从而进步零样本宰割的性能。零训练与齐全监督的算法 PK在从未训练过的 COCO-Stuff 数据集上,以 35.9% 的 mIoU 超过了齐全监督学习的 SOTA——34.1%。监督学习将跳出过拟合泥潭SAM 很快就能把握主动标注能力,在 SA-1B 中,仅仅进行了 0.012%(120, 000张) 的专家标注,就曾经具备优良的全自动宰割程度(99.1%的标注由 SAM 主动生成),其余模型须要 10% 甚至更多的标注量能力达到相似的程度,印证了 SAM 大大降低了监督算法对数据量的依赖,从而大大降低了监督算法过拟合的可能。SA 在监督学习的框架内实现了极其优异的 Zero-Shot 性能,这带给咱们一个思考——到底是数据集还是多模态带来了这种能力?互联网数据源或者能给出答案。当你提醒“猫”,在图像数据集无穷大的时候,实践上“猫”的文本语义对应到了无数张不同的猫的图像,这样只有你给定文本语义,模型总是能精确地提取对应掩模。所以咱们首先能够确定,数据量足够宏大足够多元能力充沛激发这种 Zero-Shot 性能。那然道就是数据集才是基本吗?并不是。后面咱们提到,无论是站在 3 个额定模态的角度来看,还是站在图像模态的角度来看,它们的学习视角都近乎是无穷的。也就是说,当你图像模态无效增长了 1 个数据,SA 的 3 种额定模态就能从宰割面中提取简直有数的点、框(标签文本例外)。所以,宽容度高的模态抉择 x 数据集多元 = 优良的 Zero-Shot 性能。两个因素实践上是平等的,但实际上,你无奈获取无穷的数据,所以宽容度高的模态设计更加重要,性价比也更高,这也启发了咱们一种升高人工标注老本的预训练模型的获取形式。而在无监督工作中,咱们常定义一对正负样本规定做比照学习。这种模式自身对正负样本的定义有较高的要求。比方 1 张图像与 n-1 个不匹配文本做比照,就能将图像模态与近乎无穷的文本模态建设负相关,反之 1 个文本如果与 n-1 张不匹配图像做比照,就能将文本模态与近乎无穷的图像模态建设负相关。这也是无监督目前 Zero-Shot 性能的本源,但因为高质量的图与配文的获取艰难,此处提到的这种正负样本规定不足以充沛激发 Zero-Shot 性能,故无监督畛域的大部分多模态工作(比方 Clip)只能靠砸钱堆数据来取得成效。它们该当学习 SA 对各模态的精心设计。️将来可能基于 SA 的工作在 SAM 炽热的这段时间,OpenMMLab 的开发者们保护了 Playground 我的项目(我的项目地址)。该我的项目仅在三天的工夫内就将 SAM 的 Zero-Shot 实力宰割能力利用在的 MMLab 的各项 Demo 上因为宰割工作涵盖了分类、定位、检测等根本工作于一身,所以 MMDet、MMOCR、MMEditing 等工具箱就像开胃小菜一样一口一个 SAM。而基于宰割掩码的疏导,姿势检测、旋转框检测也交融了 SAM 到 SOTA 算法中。随后,Lable Studio 等标注工具也引入了 SAM 做能够提醒的辅助标注。仍有有余我的观点以后的标签文本模态羸弱 ...

April 27, 2023 · 1 min · jiezi

关于challenge:ConvNeXt-V2适应SelfSupervised-Learning让CNN-再-再一次强大

ConvNeXt V2:适应Self-Supervised Learning,让CNN 再 “再一次弱小”?前言Hi!明天给大家分享一篇比拟新的计算机视觉论文,题目是“ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders”。这篇论文是由韩国科学技术院(KAIST)、Meta AI和纽约大学的研究者单干发表,链接在这里。这篇论文提出了一种新的卷积神经网络(ConvNet V2)模型,联合了自监督学习(self-supervised learning)和架构改良(architectural improvement),在各种视觉辨认工作上获得了不错的性能晋升。上面让咱们一起摸索一下这篇论文的次要内容和翻新点吧~ 论文地址:[2301.00808] ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders (arxiv.org) GitHub代码地址:facebookresearch/ConvNeXt-V2: Code release for ConvNeXt V2 model (github.com) 回顾ConvNeXt在介绍ConvNeXt v2之前,让咱们对ConvNeXt做一下简略的回顾: ConvNeXt同样是Meta AI的工作,它的motivation是从新扫视设计空间,测试纯卷积神经网络(ConvNet)的极限,摸索纯卷积神经网络在计算机视觉工作中所能达到的性能。尽管在计算机视觉畛域中,Transformers曾经在多个工作中超过了卷积神经网络,然而ConvNeXt论文中认为卷积神经网络具备人造的演绎偏差性质,因而依然有很大的后劲能够开掘。作者通过逐渐将规范ResNet现代化,测试了一系列的设计决策,发现了几个要害组件,最终提出了一族名为ConvNeXt的纯卷积神经网络,并在多个视觉工作上进行了评估,获得了与转换器相当的准确性和可扩展性,同时放弃了规范卷积神经网络的简略和高效性。 ConvNeXt从宏观和宏观两个层面对卷积神经网络和层级Transformer进行了比拟和剖析。作者逐渐将规范ResNet模型“现代化”,并发现了一些要害组件,如ResNeXt、反向瓶颈、大卷积核等,这些组件有助于进步性能。此外,在宏观层面上,作者还钻研了激活函数和归一化层等方面的不同设计抉择,例如将BatchNorm替换为LayerNorm。最终,作者提出了一系列纯卷积神经网络模型,具体的尝试如下图所示,即Transformer或者Swin-Transformer怎么做,我也对应的调整: ConvNeXt V2ConvNeXt V2是基于古代ConvNets并增加了自监督学习技术的后果。ConvNeXt V2在ConvNeXt的根底上减少了两个新的组件:全卷积掩码自编码器(fully convolutional masked autoencoder, FCMAE)和全局响应归一化(global response normalization, GRN)。这种自监督学习技术和架构改良的协同设计独特发明了一个新的模型系列ConvNeXt V2,它在包含ImageNet分类、COCO检测和ADE20K宰割在内的各种辨认基准测试中显着进步了纯ConvNets的性能。 同时,还提供了各种大小的预训练ConvNeXt V2模型,范畴从高效的3.7M参数Atto模型到650M的Huge模型。 后面提到,ConvNeXt v2次要有两个翻新点:一是提出了一种全卷积掩码自编码器(FCMAE)框架,二是提出了一种全局响应归一化(GRN)层。上面让咱们别离来简略地看看它们的原理和成果。 全卷积掩码自编码器(FCMAE) 全卷积掩码自编码器(FCMAE)框架是一种基于卷积神经网络的自监督学习办法,它的思维是在输出图像上随机覆盖一些区域,而后让模型尝试复原被覆盖的局部。这样能够迫使模型学习到图像的全局和部分特色,从而进步其泛化能力。FCMAE框架与传统的掩码自编码器(MAE)框架相比,有两个劣势:一是它应用了全卷积构造,而不是应用全连贯层来生成掩码和重建图像,这样能够缩小参数量和计算量,同时放弃空间信息;二是它应用了多尺度掩码策略,而不是应用固定大小的掩码,这样能够减少模型对不同尺度特色的感知能力。 全局响应归一化(GRN) 全局响应归一化(GRN)层是一种新的卷积神经网络层,它的作用是在每个通道上对特色图进行归一化解决,从而加强通道间的特色竞争。GRN层与传统的批量归一化(BN)层相比,有两个劣势:一是它不须要额定的参数,因为它仅仅是对特色图进行归一化解决;二是它能够解决任意大小的batch,而BN层则须要依据batch大小动静调整参数,计算量较大。GRN层的实现非常简单,只须要三行代码,并且没有可学习的参数。具体来说,GRN层能够分为三个步骤:全局特色聚合、特色归一化和特色校准。在全局特色聚合步骤中,咱们应用L2范数对每个通道上的特色图进行聚合,失去一个聚合后的向量。在特色归一化步骤中,咱们应用规范除法归一化函数对聚合后的向量进行归一化。在特色校准步骤中,咱们应用归一化后的向量对原始的特色图进行校准。整个GRN层的计算量十分小,因而能够很容易地增加到卷积神经网络中,从而加强特色竞争,进步模型性能。 论文也展现了每个特色通道的激活图。为了更清晰地展现,每个可视化图中显示了64个通道。作者发现ConvNeXt V1模型存在特色解体问题,即在通道之间存在冗余激活(死亡或饱和神经元)。为了解决这个问题,作者引入了一种新的训练方法:全局响应归一化(GRN)层,用于每个块中的高维特色。这种办法促成了特色的多样性,导致ConvNeXt V2架构的开发。 "We visualize the activation map for each feature channel in small squares. For clarity, we display 64 channels in each visualization. The ConvNeXt V1 model suffers from a feature collapse issue, which is characterized by the presence of redundant activations (dead or saturated neurons) across channels. To fix this problem, we introduce a new method to promote feature diversity during training: the global response normalization (GRN) layer. This technique is applied to high-dimensional features in every block, leading to the development of the ConvNeXt V2 architecture."试验后果在试验中,应用FCMAE框架和GRN层的ConvNeXt V2模型在不同的工作上体现出了显著的性能晋升,包含ImageNet分类、COCO检测和ADE20K宰割。此外,应用自监督学习的办法,应用Mask R-CNN进行COCO检测,并在COCO val2017集上进行检测和宰割,体现出了较好的成果。此外,应用Mask R-CNN进行对COCO数据进行训练,在COCO val2017集上进行检测和宰割,体现出了较好的成果。此外,应用Mask R-CNN进行对COCO数据进行训练,在COCO val2017集上进行检测和宰割,体现出了较好的成果。 ...

April 27, 2023 · 1 min · jiezi

关于challenge:Gradio入门到进阶全网最详细教程二快速搭建AI算法可视化部署演示侧重参数详解和案例实践

Gradio入门到进阶全网最具体教程[二]:疾速搭建AI算法可视化部署演示(偏重参数详解和案例实际)相干文章:[Gradio入门到进阶全网最具体教程[一]:疾速搭建AI算法可视化部署演示(偏重我的项目搭建和案例分享)](https://blog.csdn.net/sinat_39620217/article/details/130343655) 在教程一中次要偏重解说gradio的根底模块搭建以及demo展现,本篇文章则会偏重理论工作的搭建。 1.经典案例简略的RGB转灰度放弃一贯作风简略展现一下如何应用 import gradio as grimport cv2def to_black(image): output = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) return outputinterface = gr.Interface(fn=to_black, inputs="image", outputs="image")interface.launch()gradio的外围是它的gr.Interface函数,用来构建可视化界面。 fn:放你用来解决的函数inputs:写你的输出类型,这里输出的是图像,所以是"image"outputs:写你的输入类型,这里输入的是图像,所以是"image"最初咱们用interface.lauch()把页面一公布,一个本地动态交互页面就实现了!在浏览器输出http://127.0.0.1:7860/,查收你的页面: 上传一张图片,点击「SUBMIT」 对于任何图像处理类的ML代码来说,只有定义好一个图像输出>>模型推理>>返回图片的函数(逻辑和RGB转灰度图实质上没区别),放到fn中即可。 1.1 减少example能够在页面下方增加供用户抉择的测试样例。 在gr.Interface里的examples中放入图片门路,格局为[[门路1],[门路2],...]。 import gradio as grimport cv2def to_black(image): output = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) return outputinterface = gr.Interface(fn=to_black, inputs="image", outputs="image", examples=[["gradio/test.png"]])interface.launch()减少example不仅能让你的UI界面更好看,逻辑更欠缺,也有一些其余意义:比方做了一个图像去噪算法,然而用户手头并没有躁点照片,example能让他更快的体验到成果 创立一个内部拜访链接 创立内部拜访链接非常简单,只须要launch(share=True)即可,在打印信息中会看到你的内部拜访链接。须要留神:收费用户的链接能够应用24小时,想要长期的话须要在gradio官网购买云服务。2. 文本分类在Gradio中搭建一个实用的自然语言解决利用起码只须要三行代码!让咱们三行代码来搭建一个文本分类模型的演示零碎,这里应用的模型是uer/roberta-base-finetuned-dianping-chinese,代码如下 #导入gradioimport gradio as gr#导入transformers相干包from transformers import *#通过Interface加载pipeline并启动服务gr.Interface.from_pipeline(pipeline("text-classification", model="uer/roberta-base-finetuned-dianping-chinese")).launch()过程中须要加载一个400MB的模型。 间接运行即可,运行后,服务默认会启动在本地的7860端口,关上链接即可。 能够在左侧输出待分类文本,而后点击submit按钮,右侧便会展现出预测的标签及概率,如下图所示 3. 浏览了解#导入gradioimport gradio as gr#导入transformers相干包from transformers import *#通过Interface加载pipeline并启动服务gr.Interface.from_pipeline(pipeline("question-answering", model="uer/roberta-base-finetuned-dianping-chinese")).launch()再次关上,能够看到界面中除了几个按钮外的内容全副进行了更新,变成了浏览了解相干的内容,输出局部包含了context和question两局部,输入也变成了answer和score两局部。 成果上不佳能够思考从新加载以及微调模型 3.1欠缺页面只管咱们疾速的启动了一个demo,然而页面整体还是较为简陋的,除了题目和理论的调用局部,短少一些其余内容,咱们能够通过配置几个简略的参数,将页面进行欠缺,还是以浏览了解工作为例,代码如下: import gradio as grfrom transformers import *#题目title = "抽取式问答"#题目下的形容,反对md格局description = "输出上下文与问题后,点击submit按钮,可从上下文中抽取出答案,赶快试试吧!"#输出样例examples = [ ["普希金从那里学习人民的语言,汲取了许多无益的养料,这所有对普希金起初的创作产生了很大的影响。这两年里,普希金创作了不少优良的作品,如《囚徒》、《致大海》、《致凯恩》和《如果生存坑骗了你》等几十首抒情诗,叙事诗《努林伯爵》,历史剧《鲍里斯·戈都诺夫》,以及《叶甫盖尼·奥涅金》前六章。", "驰名诗歌《如果生存坑骗了你》的作者是"], ["普希金从那里学习人民的语言,汲取了许多无益的养料,这所有对普希金起初的创作产生了很大的影响。这两年里,普希金创作了不少优良的作品,如《囚徒》、《致大海》、《致凯恩》和《如果生存坑骗了你》等几十首抒情诗,叙事诗《努林伯爵》,历史剧《鲍里斯·戈都诺夫》,以及《叶甫盖尼·奥涅金》前六章。", "普希金创作的叙事诗叫什么"] ]#页面最初的信息,能够抉择援用文章,反对md格局article = "感兴趣的小伙伴能够浏览[gradio专栏](https://blog.csdn.net/sinat_39620217/category_12298724.html?spm=1001.2014.3001.5482)"gr.Interface.from_pipeline( pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa"), title=title, description=description, examples=examples, article=article).launch()运行上述代码,将看到如下页面,这里的example是能够点击的,点击后将主动填充至context和question中因为description和article字段反对md语法,因而咱们能够依据需要,自行的去丰盛欠缺各局部内容 ...

April 26, 2023 · 2 min · jiezi

关于challenge:Gradio入门到进阶全网最详细教程一快速搭建AI算法可视化部署演示侧重项目搭建和案例分享

Gradio入门到进阶全网最具体教程[一]:疾速搭建AI算法可视化部署演示(偏重我的项目搭建和案例分享) 罕用的两款AI可视化交互利用比拟: Gradio Gradio的劣势在于易用性,代码构造相比Streamlit简略,只需简略定义输出和输入接口即可疾速构建简略的交互页面,更轻松部署模型。适宜场景绝对简略,想要疾速部署利用的开发者。便于分享:gradio能够在启动利用时设置share=True参数创立内部分享链接,能够间接在微信中分享给用户应用。 不便调试:gradio能够在jupyter中间接展现页面,更加不便调试。 Streamlit Streamlit的劣势在于可扩展性,相比Gradio简单,齐全纯熟应用须要肯定工夫。能够应用Python编写残缺的蕴含前后端的交互式利用。适宜场景绝对简单,想要构建丰盛多样交互页面的开发者。 Gradio官网链接:https://gradio.app/ 1. 装置&根本用法Python第三方库Gradio疾速上手,以后版本V3.27.0 python版本要求3.7及以上pip install gradio#为了更快装置,能够应用清华镜像源pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio装置完间接在IDE上启动疾速, 1.1 疾速入门import gradio as gr#输出文本处理程序def greet(name): return "Hello " + name + "!"#接口创立函数#fn设置处理函数,inputs设置输出接口组件,outputs设置输入接口组件#fn,inputs,outputs都是必填函数demo = gr.Interface(fn=greet, inputs="text", outputs="text")demo.launch()运行程序后,关上 http://localhost:7860 即可看到网页成果。右边是文本输入框,左边是后果展现框。Clear按钮用于重置网页状态,Submit按钮用于执行处理程序,Flag按钮用于保留后果到本地。 #执行后果Running on local URL: http://127.0.0.1:7860To create a public link, set `share=True` in `launch()`.关上浏览器应用即可 在本地开发时,如果你想将代码作为Python脚本运行,你能够应用Gradio CLI在重载模式下启动应用程序,这将提供无缝和疾速的开发。 gradio app.pyNote:你也能够做python app.py,但它不会提供主动从新加载机制。 2.基本参数|反对的接口2.1 Interface类以及根底模块Gradio 能够包装简直任何 Python 函数为易于应用的用户界面。从下面例子咱们看到,简略的基于文本的函数。但这个函数还能够解决很多类型。Interface类通过以下三个参数进行初始化: fn:包装的函数inputs:输出组件类型,(例如:“text”、"image)ouputs:输入组件类型,(例如:“text”、"image)通过这三个参数,咱们能够疾速创立一个接口并公布他们。 最罕用的根底模块形成。 利用界面:gr.Interface(繁难场景), gr.Blocks(定制化场景)输入输出:gr.Image(图像), gr.Textbox(文本框), gr.DataFrame(数据框), gr.Dropdown(下拉选项), gr.Number(数字), gr.Markdown, gr.Files管制组件:gr.Button(按钮)布局组件:gr.Tab(标签页), gr.Row(行布局), gr.Column(列布局)1.2.1 自定义输出组件import gradio as grdef greet(name): return "Hello " + name + "!"demo = gr.Interface( fn=greet, # 自定义输入框 # 具体设置办法查看官网文档 inputs=gr.Textbox(lines=3, placeholder="Name Here...",label="my input"), outputs="text",)demo.launch() ...

April 25, 2023 · 7 min · jiezi

关于challenge:深度学习基础入门篇七常用归一化算法层次归一化算法归一化和标准化区别于联系应用案例场景分析

1.归一化根底知识点1.1 归一化作用归一化是一种数据处理形式,能将数据通过解决后限度在某个固定范畴内。 归一化存在两种模式, 一种是在通常状况下,将数解决为 [0, 1] 之间的小数,其目标是为了在随后的数据处理过程中更便捷。例如,在图像处理中,就会将图像从 [0, 255] 归一化到 [0, 1]之间,这样既不会扭转图像自身的信息贮存,又可减速后续的网络解决。其余状况下,也可将数据处理到 [-1, 1] 之间,或其余的固定范畴内。另一种是通过归一化将有量纲表达式变成无穷纲表达式。那么什么是量纲,又为什么须要将有量纲转化为无穷纲呢?具体举一个例子。当咱们在做对房价的预测时,收集到的数据中,如屋宇的面积、房间的数量、到地铁站的间隔、住宅左近的空气质量等,都是量纲,而他们对应的量纲单位别离为平方米、个数、米、AQI等。这些量纲单位的不同,导致数据之间不具备可比性。同时,对于不同的量纲,数据的数量级大小也是不同的,比方屋宇到地铁站的间隔能够是上千米,而屋宇的房间数量个别只有几个。通过归一化解决后,不仅能够打消量纲的影响,也可将各数据归一化至同一量级,从而解决数据间的可比性问题。 归一化能够将有量纲转化为无穷纲,同时将数据归一化至同一量级,解决数据间的可比性问题。在回归模型中,自变量的量纲不统一会导致回归系数无奈解读或谬误解读。在KNN、Kmeans等须要进行间隔计算的算法中,量纲的量级不同可能会导致领有较大量级的特色在进行间隔计算时占主导地位,从而影响学习后果。数据归一化后,寻求最优解的过程会变得平缓,能够更疾速的收敛到最优解。详解请参见3.为什么归一化能进步求解最优解的速度。1.2 归一化进步求解最优解的速度咱们提到一个对房价进行预测的例子,假如自变量只有房子到地铁站的间隔x1和房子内房间的个数x2,因变量为房价,预测公式和损失函数别离为 $$\begin{array}{l}y=\theta_1x_1+\theta_2x_2\\ J=(\theta_1x_1+\theta_2x_2-y_{label})^2\end{array}$$ 在未归一化时,房子到地铁站的间隔的取值在0~5000之间,而房间个数的取值范畴仅为0~10。假如x1=1000,x2=3, 那么损失函数的公式能够写为: $$J=\left(1000\theta_1+3\theta_2-y_{label}\right)^2$$ 可将该损失函数寻求最优解过程可视化为下图:图1: 损失函数的等高线,图1(左)为未归一化时,图1(右)为归一化 在图1中,左图的红色椭圆代表归一化前的损失函数等高线,蓝色线段代表梯度的更新,箭头的方向代表梯度更新的方向。寻求最优解的过程就是梯度更新的过程,其更新方向与登高线垂直。因为x1和 x2的量级相差过大,损失函数的等高线出现为一个瘦窄的椭圆。因而如图1(左)所示,瘦窄的椭圆形会使得梯度降落过程呈之字形出现,导致梯度降落速度迟缓。当数据通过归一化后,$$x_1^{'}=\frac{1000-0}{5000-0}=0.2,x_2^{'}=\frac{3-0}{10-0}=0.3,$$,那么损失函数的公式能够写为: $$J(x)=\left(0.2\theta_1+0.3\theta_2-y_{label}\right)^2$$ 咱们能够看到,通过归一化后的数据属于同一量级,损失函数的等高线出现为一个矮胖的椭圆形(如图1(右)所示),求解最优解过程变得更加迅速且平缓,因而能够在通过梯度降落进行求解时取得更快的收敛。 1.3 归一化类型1.3.1 Min-max normalization (Rescaling):$$x^{'}=\dfrac{x-min(x)}{max(x)-min(x)}\quad\quad$$ 归一化后的数据范畴为 [0, 1],其中 min(x)、max(x)别离求样本数据的最小值和最大值。 1.3.2 Mean normalization:$$x^{'}=\dfrac{x-mean(x)}{max(x)-min(x)}\quad\text{}$$ 1.3.3 Z-score normalization (Standardization):标准化$$x^{'}=\dfrac{x-\mu}{\sigma}$$ 归一化后的数据范畴为实数集,其中 、别离为样本数据的均值和标准差。 1.3.4 非线性归一化:对数归一化:$$x^{'}=\dfrac{\lg x}{\lg max(x)}$$反正切函数归一化:$$x^{'}=\arctan(x)*\dfrac{2}{\pi}\quad$$ 归一化后的数据范畴为 [-1, 1] 小数定标标准化(Demical Point Normalization):$$x^{'}=\dfrac{x}{10^{j}}$$ 归一化后的数据范畴为 [-1, 1],j为使$$max(|x'|)<1$$的最小整数。 1.4 不同归一化的应用条件Min-max归一化和mean归一化适宜在最大最小值明确不变的状况下应用,比方图像处理时,灰度值限定在 [0, 255] 的范畴内,就能够用min-max归一化将其解决到[0, 1]之间。在最大最小值不明确时,每当有新数据退出,都可能会扭转最大或最小值,导致归一化后果不稳固,后续应用成果也不稳固。同时,数据须要绝对稳固,如果有过大或过小的异样值存在,min-max归一化和mean归一化的成果也不会很好。如果对解决后的数据范畴有严格要求,也应应用min-max归一化或mean归一化。Z-score归一化也可称为标准化,通过解决的数据呈均值为0,标准差为1的散布。在数据存在异样值、最大最小值不固定的状况下,能够应用标准化。标准化会扭转数据的状态散布,但不会扭转散布的品种。特地地,神经网络中常常会应用到z-score归一化,针对这一点,咱们将在后续的文章中进行具体的介绍。非线性归一化通常被用在数据分化水平较大的场景,有时须要通过一些数学函数对原始值进行映射,如对数、反正切等。在查找材料的时候,我看到很多文章都提出了:“在分类、聚类算法中,须要应用间隔来度量相似性的时候,z-score归一化也就是标准化的成果比归一化要好,然而对于这个观点并没有给出足够的技术支持。因而,我选取了KNN分类网络搜寻了相干论文,在论文Comparative Analysis of KNN Algorithm using Various Normalization Techniques [1] 中,在K值不同的状况下,对于雷同的数据别离进行min-max归一化和z-score归一化,失去的后果如下图所示:图2: 对于不同的K值,雷同数据集不同归一化形式下的预测精确度 ...

April 22, 2023 · 2 min · jiezi

关于challenge:深度学习基础入门篇六1模型调优注意力机制多头注意力自注意力正则化

深度学习根底入门篇[六(1)]:模型调优:注意力机制[多头注意力、自注意力],正则化【L1、L2,Dropout,Drop Connect】等 1.注意力机制在深度学习畛域,模型往往须要接管和解决大量的数据,然而在特定的某个时刻,往往只有少部分的某些数据是重要的,这种状况就非常适合Attention机制发光发热。 举个例子,图2展现了一个机器翻译的后果,在这个例子中,咱们想将”who are you”翻译为”你是谁”,传统的模型解决形式是一个seq-to-seq的模型,其蕴含一个encoder端和一个decoder端,其中encoder端对”who are you”进行编码,而后将整句话的信息传递给decoder端,由decoder解码出”我是谁”。在这个过程中,decoder是逐字解码的,在每次解码的过程中,如果接管信息过多,可能会导致模型的外部凌乱,从而导致谬误后果的呈现。咱们能够应用Attention机制来解决这个问题,从图2能够看到,在生成”你”的时候和单词”you”关系比拟大,和”who are”关系不大,所以咱们更心愿在这个过程中可能应用Attention机制,将更多注意力放到”you”上,而不要太多关注”who are”,从而进步整体模型的体现。 Attention机制自提出以来,呈现了很多不同Attention利用形式,但小道是独特的,均是将模型的注意力聚焦在重要的事件上。本文后续将抉择一些经典或罕用的Attention机制展开讨论。 备注:在深度学习畛域,有意识的显著性注意力更加常见。 1.1 用机器翻译工作带你看Attention机制的计算独自地去讲Attention机制会有些形象,也有些干燥,所以咱们无妨以机器翻译工作为例,通过解说Attention机制在机器翻译工作中的利用形式,来理解Attention机制的应用。 什么是机器翻译工作?以中译英为例,机器翻译是将一串中文语句翻译为对应的英文语句,如图1所示。 图1展现了一种经典的机器翻译构造Seq-to-Seq,并且向其中增加了Attention计算。Seq-to-Seq构造蕴含两个局部:Encoder和Decoder。其中Encoder用于将中文语句进行编码,这些编码后续将提供给Decoder进行应用;Decoder将依据Encoder的数据进行解码。咱们还是以图1为例具体解释一下Decoder的解码过程。 更明确的讲,图1展现的是生成单词”machine”时的计算形式。首先将前一个时刻的输入状态 $q_2$和Encoder的输入 $h=[h_1,h_2,h_3,h_4]$进行Attention计算,失去一个以后时刻的 context,用公式能够这样组织: $$\begin{array}{c}[a_1,a_2,a_3,a_4]=sqrt{max}([s(q_2,h_1),s(q_2,h_2),s(q_2,h_3),s(q_2,h_4)])\\ cemtext{text}t=\sum_{i=1}^{4}a_i\cdot h_i\end{array}$$ 咱们来解释一下,这里的 $s(q_i,h_j)$示意注意力打分函数,它是个标量,其大小形容了以后时刻在这些Encoder的后果上的关注水平,这个函数在后边会展开讨论。而后用softmax对这个后果进行归一化,最初应用加权评估取得以后时刻的上下文向量 context。这个context能够解释为:截止到以后曾经有了”I love”,在此基础高低一个时刻应该更加关注源中文语句的那些内容。这就是对于Attention机制的一个残缺计算。 最初,将这个context和上个时刻的输入”love”进行交融作为以后时刻RNN单元的输出。 图1中采纳了持续交融上一步的输入后果,例如上述形容中交融了”love”,在有些实现中,并没有融入这个上一步的输入,默认 $q_2$中曾经携带了”love”的信息,这也是正当的。 1.2 注意力机制的正式引入前边咱们通过机器翻译工作介绍了Attention机制的整体计算。然而还有点小尾巴没有开展,就是那个注意力打分函数的计算,当初咱们未来探讨这个事件。但在讲这个函数之前,咱们先来对上边的Attention机制的计算做个总结,图2具体地形容了Attention机制的计算原理。 假如当初咱们要对一组输出 $H=[h1,h2,h3,...,h_n]$应用Attention机制计算重要的内容,这里往往须要一个查问向量 q(这个向量往往和你做的工作无关,比方机器翻译中用到的那个 $q_2$ ) ,而后通过一个打分函数计算查问向量 q和每个输出$h_i$之间的相关性,得出一个分数。接下来应用softmax对这些分数进行归一化,归一化后的后果便是查问向量 q在各个输出 $h_i$上的注意力散布 $a=[a1,a2,a3,...,a_n]$,其中每一项数值和原始的输出$H=[h1,h2,h3,...,h_n]$一一对应。以 $a_i$为例,相干计算公式如下: $$a_i=software(s(h_i,q))=\dfrac{exp(s(h_i,q))}{\sum_{j=1}^n exp(s(h_j,q))}\quad$$ 最初依据这些注意力散布能够去有选择性的从输出信息 H中提取信息,这里比拟罕用的信息提取形式,是一种”软性”的信息提取(图2展现的就是一种”软性”注意力),即依据注意力散布对输出信息进行加权求和,最终的这个后果 context体现了模型以后应该关注的内容: $$\text{context}=\sum_{i=1}^n a_i\cdot h_i$$ 当初咱们来解决之前始终没有开展的小尾巴-打分函数,它能够应用以下几种形式来计算: 加性模型: $$s(h,q)=v^Ttanh(Wh+Uq)\quad\text{}$$ 点积模型: $$s(h,q)=h^Tq$$ 缩放点积模型:$$s(h,q)=\frac{h^{T}q}{\sqrt{D}}\quad$$ 双线性模型: $$s(h,q)=h^{T}W q$$ 以上公式中的参数 W、U和v均是可学习的参数矩阵或向量,D为输出向量的维度。下边咱们来剖析一下这些分数计算形式的差异。 加性模型引入了可学习的参数,将查问向量 q和原始输出向量 h映射到不同的向量空间后进行计算打分,显然相较于加性模型,点积模型具备更好的计算效率。另外,当输出向量的维度比拟高的时候,点积模型通常有比拟大的方差,从而导致Softmax函数的梯度会比拟小。因而缩放点积模型通过除以一个平方根项来平滑分数数值,也相当于平滑最终的注意力散布,缓解这个问题。最初,双线性模型能够重塑为$s(h_{i},q)=h^{T}W q=h^{T}(U^{T}V)q=(Uh)^{T}(V_q),$,即别离对查问向量 q 和原始输出向量 h进行线性变换之后,再计算点积。相比点积模型,双线性模型在计算类似度时引入了非对称性。 ...

April 21, 2023 · 5 min · jiezi

关于challenge:零样本文本分类应用基于UTC的医疗意图多分类打通数据标注模型训练模型调优预测部署全流程

零样本文本分类利用:基于UTC的医疗用意多分类,买通数据标注-模型训练-模型调优-预测部署全流程。1.通用文本分类技术UTC介绍本我的项目提供基于通用文本分类 UTC(Universal Text Classification) 模型微调的文本分类端到端利用计划,买通数据标注-模型训练-模型调优-预测部署全流程,可疾速实现文本分类产品落地。 文本分类是一种重要的自然语言解决工作,它能够帮忙咱们将大量的文本数据进行无效的分类和演绎。实际上,在日常生活中,咱们也常常会用到文本分类技术。例如,咱们能够应用文本分类来对新闻报道进行分类,对电子邮件进行分类,对社交媒体上的评论进行情感剖析等等。然而,文本分类也面临着许多挑战。其中最重要的挑战之一是数据稀缺。因为文本数据往往十分宏大,因而获取足够的训练数据可能十分艰难。此外,不同的文本分类工作也可能面临着畛域多变和工作多样等挑战。为了应答这些挑战,PaddleNLP推出了一项零样本文本分类利用UTC。该利用通过对立语义匹配形式USM(Unified Semantic Matching)来将标签和文本的语义匹配能力进行对立建模。这种办法能够帮忙咱们更好地了解文本数据,并从中提取出有用的特色信息。 UTC具备低资源迁徙能力,能够反对通用分类、评论情感剖析、语义类似度计算、蕴含推理、多项式浏览了解等多种“泛分类”工作。这使得开发者能够更加轻松高效地实现多任务文本分类数据标注、训练、调优和上线,从而升高文本分类技术门槛。 总之,文本分类是一项重要的自然语言解决工作,它能够帮忙咱们更好地了解和演绎文本数据。只管它面临着许多挑战,然而通过应用PaddleNLP的零样本文本分类利用UTC,开发者们能够简略高效实现多任务文本分类数据标注、训练、调优、上线,升高文本分类落地技术门槛。 1.1 分类落地面临难度分类工作看似简略,然而在产业级文本分类落地实际中,面临着诸多挑战: 工作多样:单标签、多标签、档次标签、大规模标签等不同的文本分类工作,须要开发不同的分类模型,模型架构往往特化于具体任务,难以使用对立模式建模;数据稀缺:局部畛域数据稀缺,难以获取,且畛域专业性使得数据标注门槛高;标签迁徙:不同畛域的标签多样,并且迁徙难度大,尤其不同畛域间的标签常识很难迁徙。1.2 UTC亮点1.2.1 多任务对立建模在传统技术计划中,针对不同的分类工作须要构建多个分类模型,模型需独自训练且数据和常识不共享。而在UTC计划下,单个模型能解决所有分类需要,包含但不限于单标签分类、多标签分类、档次标签分类、大规模事件标签检测、蕴含推理、语义类似度计算等,升高了开发成本和机器老本。 1.2.2 零样本分类和小样本迁徙能力强UTC通过大规模多任务预训练后,能够适配不同的行业畛域,不同的分类标签,仅标注了几条样本,分类成果就获得大幅晋升,大大降低标注门槛和老本。 在医疗、金融、法律等畛域中,无需训练数据的零样本状况下UTC成果均匀可达到70%+(如下表所示),标注少样本也可带来显著的成果晋升:每个标签仅仅标注1条样本后,均匀晋升了10个点!也就是说,即便在某些场景下体现欠佳,人工标几个样本,丢给模型后就会有大幅的成果晋升。 1.3 UTC技术思路UTC基于百度最新提出的对立语义匹配框架USM(Unified Semantic Matching)[1],将分类工作对立建模为标签与文本之间的匹配工作,对不同标签的分类工作进行对立建模。具体地说: 为了实现工作架构对立,UTC设计了标签与文本之间的词对连贯操作(Label–>CLS-Token Linking),这使得模型可能适应不同畛域和工作的标签信息,并按需要进行分类,从而实现了凋谢域场景下的通用文本分类。例如,对于事件检测工作,可将一系列事件标签拼接为[L]上映[L]夺冠[L]下架 ,而后与原文本一起作为整体输出到UTC中,UTC将不同标签标识符[L]与[CLS]进行匹配,可对不同标签类型的分类工作对立建模,间接上图: 为了实现通用能力共享,让不同畛域间的标签常识跨域迁徙,UTC构建了对立的异质监督学习办法进行多任务预训练,使不同畛域工作具备良好的零/少样本迁徙性能。对立的异质监督学习办法次要包含三种不同的监督信号: 间接监督:分类工作间接相干的数据集,如情感分类、新闻分类、用意辨认等。间接监督:分类工作间接相干的数据集,如选项式浏览了解、问题-文章匹配等。近程监督:标签知识库或层级题目与文本对齐后弱标注数据。更多内容参考论文见文末链接 or fork一下我的项目论文已上传 2.文本分类工作Label Studio教程2.1 Label Studio装置以下标注示例用到的环境配置: Python 3.8+label-studio == 1.7.2在终端(terminal)应用pip装置label-studio: pip install label-studio==1.7.2装置实现后,运行以下命令行: label-studio start在浏览器关上http://localhost:8080/,输出用户名和明码登录,开始应用label-studio进行标注。 2.2 文本分类工作标注2.2.1 我的项目创立点击创立(Create)开始创立一个新的我的项目,填写项目名称、形容,而后在Labeling Setup中抉择Text Classification。 填写项目名称、形容 数据上传,从本地上传txt格式文件,抉择List of tasks,而后抉择导入本我的项目 设置工作,增加标签 数据上传我的项目创立后,可在Project/文本分类工作中点击Import持续导入数据,同样从本地上传txt格式文件,抉择List of tasks 。 2.2.2 标签构建我的项目创立后,可在Setting/Labeling Interface中持续配置标签, 默认模式为单标签多分类数据标注。对于多标签多分类数据标注,须要将choice的值由single改为multiple。 2.2.3 工作标注 2.2.4 数据导出勾选已标注文本ID,抉择导出的文件类型为JSON,导出数据: 参考链接: ...

April 21, 2023 · 8 min · jiezi

关于challenge:如何在Colab中白嫖gpu资源附使用MMdet推理示例

如何在Colab中“白嫖”gpu资源(附应用MMdet推理示例)Google Colab简介当今,深度学习曾经成为许多人感兴趣的话题,Google Colab(全称为Google Colaboratory)是Google推出的一个弱小的云端 notebook,为开发者提供了一个收费的、轻便的云端开发环境,无需装置任何软件,只须要一个浏览器就能够运行。 在Google Colab中,你能够轻松地创立、编辑和共享Jupyter notebook,其中包含Python代码和文本单元格。 Colab还提供了一个丰盛的Python库,使得数据科学家和钻研人员能够应用常见的数据迷信工具和库,例如NumPy、Pandas、Matplotlib和TensorFlow等。 Colab的长处不仅在于其易用性,还在于其提供的GPU和TPU减速,这使得模型训练速度大大放慢,尤其是在解决大规模数据集时,Colab的GPU和TPU反对将显著进步训练效率。此外,Colab还容许咱们将 notebook与Google Drive集成,能够轻松地保留和共享notebook、数据集和训练模型。 除了这些性能,Colab还能够与GitHub集成,使咱们能够间接从Colab加载GitHub存储库中的 notebook,这大大简化了GitHub上合作的流程。此外,Colab还反对与Google Cloud的连贯,能够轻松地将notebook与Google Cloud Storage、BigQuery等云端服务进行集成,从而轻松地治理和共享数据集和模型。 总的来说,Google Colab是一个弱小、灵便且易于应用的云端开发环境,为数据科学家和机器学习工程师提供了一个疾速、高效的工具,使他们可能轻松地构建、测试和优化模型,以便更好地了解和利用机器学习技术。 如何白嫖GPU在Google Colab中,能够通过以下步骤收费应用GPU: 关上一个新的Colab notebook或关上一个已有的 notebook。点击菜单栏中的“批改”(Edit)按钮,抉择“ notebook设置”(Notebook settings)。 在弹出的窗口中,将“硬件加速器”(Hardware accelerator)的选项从“无”(None)改为“GPU”,而后点击“保留”(Save)按钮。Colab会为你调配一个收费的GPU,并将其绑定到你的 notebook中。你能够在 notebook中应用以下代码来查看是否胜利地连贯到GPU:import torchif torch.cuda.is_available(): device = torch.device("cuda") print("GPU is available")else: device = torch.device("cpu") print("GPU is not available")如果你胜利连贯到了GPU,那么上述代码将输入“GPU is available”。 留神,在Colab中,每个用户都有一个配额限度,即每个用户每次只能应用12个小时的GPU工夫。如果你应用的是收费账户,则你的GPU性能可能会受到肯定的限度。如果你须要更多的GPU工夫或更强的GPU性能,你能够思考应用Google Cloud Platform或其余云服务提供商提供的云GPU实例。 除了上述办法,还能够在Colab中应用以下代码来查看可用的GPU资源: !nvidia-smi这将显示以后可用的GPU资源,包含GPU型号、内存应用状况等。 如果你想在Colab中应用PyTorch来训练模型,能够应用以下代码将模型转移到GPU上: import torch# 查看GPU是否可用if torch.cuda.is_available(): device = torch.device("cuda")else: device = torch.device("cpu")# 定义模型model = MyModel()# 将模型转移到GPU上model.to(device)# 定义优化器optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 定义损失函数criterion = nn.CrossEntropyLoss()# 训练模型for epoch in range(num_epochs): for batch_idx, (data, target) in enumerate(train_loader): # 将数据转移到GPU上 data, target = data.to(device), target.to(device) # 将梯度归零 optimizer.zero_grad() # 前向流传 output = model(data) # 计算损失 loss = criterion(output, target) # 反向流传 loss.backward() # 更新参数 optimizer.step()在上述代码中,咱们首先查看GPU是否可用,而后将模型和数据转移到GPU上。咱们还定义了优化器和损失函数,并应用GPU进行训练。留神,咱们在每个迭代周期中都须要将数据转移到GPU上,并在优化器的step()办法中更新参数。 ...

April 20, 2023 · 1 min · jiezi

关于challenge:深度学习基础入门篇六模型调优学习率设置Warm-Uploss自适应衰减等batch-size调优技巧

深度学习根底入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化办法。 1.学习率学习率是训练神经网络的重要超参数之一,它代表在每一次迭代中梯度向损失函数最优解挪动的步长,通常用$\eta$示意。它的大小决定网络学习速度的快慢。在网络训练过程中,模型通过样本数据给出预测值,计算代价函数并通过反向流传来调整参数。反复上述过程,使得模型参数逐渐趋于最优解从而取得最优模型。在这个过程中,学习率负责管制每一步参数更新的步长。适合的学习率能够使代价函数以适合的速度收敛到最小值。 1.1 学习率对网络的影响梯度更新公式: $$\theta=\theta-\eta\frac{\partial}{\partial\theta}J(\theta)$$ 根据上述公式咱们能够看到,如果学习率$\eta$较大,那么参数的更新速度就会很快,能够放慢网络的收敛速度,但如果学习率过大,可能会导致参数在最优解左近震荡,代价函数难以收敛,甚至可能会错过最优解,导致参数向谬误的方向更新,代价函数不仅不收敛反而可能爆炸(如图1a所示)。如果学习率$\eta$较小,网络可能不会错过最长处,然而网络学习速度会变慢。同时,如果学习率过小,则很可能会陷入部分最长处(如图1b所示)。因而,只有找到适合的学习率,能力保障代价函数以较快的速度迫近全局最优解。 1.2学习率的设置咱们理解了只有适合的学习率能力保障网络稳固学习的同时,又以正当的高速收敛来缩小训练工夫。那么,如何设置学习率呢?**通常的,在训练网络的后期过程中,会选取一个绝对较大的学习率以放慢网络的收敛速度。而随着迭代优化的次数增多,逐渐减小学习率,以保障最终收敛至全局最优解,而不是在其左近震荡或爆炸**。上面将介绍几种罕用的学习率衰减办法,包含:分段常数衰减、指数衰减、天然指数衰减、多项式衰减、距离衰减、多距离衰减、逆工夫衰减、Lambda衰减、余弦衰减、诺姆衰减、loss自适应衰减、线性学习率热身等。 1.2.1 分段常数衰减(Piecewise Decay)在不同的学习阶段指定不同的学习率,在每段内学习率雷同。该过程能够举例说明为: boundaries = [100, 200] # 指定学习率扭转的边界点为100和200values = [1.0, 0.5, 0.1] # 指定不同区间下的学习率大小learning_rate = 1.0 if epoch < 100 learning_rate = 0.5 if 100 <= epoch < 200learning_rate = 0.1 if epoch >= 2001.2.2 指数衰减(Exponential Decay)学习率随训练轮数成指数衰减,每次将以后学习率乘以给定的衰减率失去下一个学习率。指数衰减的公式可示意为: $$new\_learning\_rate=last\_learning\_rate\ast gamma$$ 其中,gamma为衰减率。 1.2.3 天然指数衰减 (Natural Exponential Decay)每次将以后学习率乘以给定的衰减率的天然指数失去下一个学习率。其公式表白为: $$\textit{new_learning_rate}=\textit{learning_rate}*e^{-gamma*epoch}$$ 其中,learning_rate为初始学习率,gamma为衰减率,epoch为训练轮数。 1.2.4多项式衰减(Polynomial Decay)通过多项式衰减函数,学习率从初始值逐步衰减至最低学习率。其中,参数 cycle表学习率降落后是否从新回升。若 cycle=True,则学习率衰减至最低后会从新回升到肯定值,再升高至最低学习率并进行循环。若 cycle=False,则学习率从初始值枯燥递加至最低值。 若 cycle=True,其计算公式为:$$decay\_steps=decay\_steps*math.ceil(\dfrac{epoch}{decay\_steps})\quad\text{}$$ $$new\_learning\_rate=(learning\_rate-end\_lr)*(1-\dfrac{epoch}{decay\_steps})^{power}+end\_lr$$ 若 cycle=False,其计算公式为:$$epoch=min(epoch,decay\textit{steps})$$ $$new\_learning\_rate=(learning\_rate-end\_lr)*(1-\dfrac{epoch}{decay\_steps})^{power}+end\_lr$$ ...

April 20, 2023 · 3 min · jiezi

关于challenge:CUDA入门学习笔记

前言本系列为CUDA入门的学习笔记,调整和优化一些知识点秩序使得其更加容易浏览和学习。 本系列次要面向领有本人的Nvidia CUDA 开发环境,并致力于高性能计算工作的人群。 本文倡议环境GPU:1060 >CUDA toolkit:10.0+;本文测试环境GPU:Laptop 3060 >CUDA toolkit:11.6;(TODO: 在代码中减少架构属性查看以便解决这方面问题) 在此感激参考书籍和参考我的项目的作者,本我的项目仅供学习应用,转载请注明出处。 目录CUDA BasicCUDA Memory ManagementCUDA KernelCUDA Kernel Exection and OptimizationCUDA Debug and ProfileCUDA LibrariesDeep Learning in CUDAEmbedded CUDA目录阐明:1. CUDA Basic:装置开发环境,测试CMake编译环境,编写第一个CUDA的程序2. CUDA Memory Management:探讨CUDA根底元素,CUDA内存分类4. CUDA Kernel Exection and Optimization:探讨CUDA Kernel执行调度优化。5. CUDA Debug and Profile:探讨如何Debug和计算CUDA代码的性能指标6. CUDA Libraries:探讨CUDA相干库7. Deep Learning in CUDA:探讨应用CuBlas,CuDNN 和 TensorRT的数据科学分析及深度学习8. Embedded CUDA:探讨嵌入式CUDA环境,次要指Jetson(视我能买到什么Jetson而定) 这些目录并没有齐全蕴含CUDA的方方面面,进一步学习能够从相干资源的书籍和官网文档中学习。也十分倡议在浏览相干章节时,以相干官网文档作为参考,本系列专栏只是开胃大餐前的小甜点。 相干资源书籍以下书籍都能够在library.lol 找到 《Jaegeun Han, Bharatkumar Sharma - Learn CUDA Programming_ A beginner's guide to GPU programming and parallel computing with CUDA 10.x and C_C++-Packt Publishing (2019)》《Richard Ansorge - Programming in Parallel with CUDA_ A Practical Guide-Cambridge University Press (2022)》我的项目cuda-sample链接Nvidia CUDA Toolkit DocumentationCUDA C++ Programming GuideCUDA C++ Best Practices GuideNVIDIA-developer-blog更新日志2023-04-20 创立 入门学习笔记目录 ...

April 20, 2023 · 1 min · jiezi

关于challenge:又一个大爆炸MetaAI开源新的自监督预训练模型DINOv2无需finetuning刷榜多个下游任务

又一个大爆炸?MetaAI开源新的自监督foundation model——DINOv2,无需fine-tuning,刷榜多个上游工作,填补SAM宰割畛域外的空白链接Paper: DINOv2: Learning Robust Visual Features without Supervision (arxiv.org) Code:facebookresearch/dinov2: PyTorch code and models for the DINOv2 self-supervised learning method. (github.com) Demo:DINOv2 by Meta AI (metademolab.com) 前言"DINOv2 complements our other recent computer vision research, including Segment Anything. Segment Anything is a promptable segmentation system focused on zero-shot generalization to diverse set of segmentation tasks. DINOv2 combines with simple linear classifiers to achieve strong results across multiple tasks beyond the segmentation sub-field, creating horizontal impact."前段时间,Meta AI就高调公布了Segment Anything(SAM),SAM以交互式形式k疾速生成Mask,并能够对从未训练过的图片进行精准宰割,能够依据文字提醒或使用者点击进而圈出图像中的特定物体,其灵活性在图像宰割畛域内属独创。 ...

April 19, 2023 · 4 min · jiezi

关于challenge:详解PyG中的ToSLIC变换

详解PyG中的ToSLIC变换PyG是一个基于PyTorch的图神经网络库,提供了丰盛的数据处理、图转换和图模型的性能。本文将介绍PyG中的一个图转换函数ToSLIC,它能够将一张图片转换为一个超像素图,并生成相应的数据对象。 前言PyG是一个开源的Python库,用于深度学习工作中的图神经网络(GNN)建模和训练。该库包含多个GNN模型和与图相干的数据结构和算法。在本篇文章中,我将介绍PyG中的ToSLIC模块,它是一个用于图像宰割的超像素宰割算法。什么是超像素图?图像宰割是计算机视觉畛域的一个重要问题,它的指标是将图像分成若干个类似的区域,每个区域具备肯定的语义信息。图像宰割在许多畛域都有利用,如医学影像、主动驾驶、图像检索等。 超像素宰割是一种常见的图像宰割办法,它将图像中的像素划分为若干个类似的区域,这些区域被称为超像素。与像素相比,超像素更具备代表性和可解释性,并且能够升高图像宰割的复杂度。 超像素图是一种对图片进行宰割的办法,将图片中类似的像素聚合成一个个小区域,称为超像素。每个超像素能够看作是图片中的一个节点,它具备肯定的特色(如色彩、地位等),并与其余超像素有肯定的关系(如邻接、间隔等)。这样,咱们就能够把一张图片看作是一个图构造,从而利用图神经网络来进行剖析和解决。 如何应用PyG中的ToSLIC函数?PyG中的ToSLIC模块实现了一种基于SLIC(Simple Linear Iterative Clustering)算法的超像素宰割办法。该算法将图像划分为若干个相邻的块,每个块具备雷同的色彩或者灰度级别。ToSLIC模块应用PyTorch实现,并能够间接集成到PyG的GNN模型中,用于图像宰割工作。 ToSLIC模块次要由以下几个步骤组成: 图像预处理:将原始图像转换为LAB色调空间,并对其进行归一化解决。超像素初始化:在图像上随机选取若干个像素作为超像素核心,依据这些核心像素计算每个像素与哪个超像素最近,将其纳入该超像素。超像素迭代:反复进行以下两个步骤,直到收敛: a. 计算每个超像素的中心点,并更新其地位; b. 对每个像素,计算其与每个超像素中心点之间的间隔,并将其纳入最近的超像素中。 超像素合并:依据超像素之间的间隔,将相邻的超像素合并成一个更大的超像素。进一步说,ToSLIC函数是PyG中提供的一个图转换函数,它应用了skimage库中的slic算法来实现图片到超像素图的转换。ToSLIC函数承受一个torch.Tensor类型的图片作为输出,并返回一个torch_geometric.data.Data类型的数据对象作为输入。输入对象蕴含以下属性: x: 一个二维张量,示意每个超像素节点的特征向量。默认状况下,特征向量是每个超像素节点在RGB空间下的均匀色彩值。pos: 一个二维张量,示意每个超像素节点在原始图片上的地位坐标。seg: 一个二维张量(可选),示意原始图片上每个像素所属于哪个超像素节点。img: 一个四维张量(可选),示意原始图片。ToSLIC函数还能够承受一些额定参数来调整slic算法和输入对象: add_seg: 一个布尔值(默认为False),示意是否在输入对象中增加seg属性。add_img: 一个布尔值(默认为False),示意是否在输入对象中增加img属性。**kwargs: 其余参数,用于调整slic算法。具体参见skimage.segmentation.slic文档。上面给出一个简略的例子: from torchvision.datasets import MNISTimport torchvision.transforms as Tfrom torch_geometric.transforms import ToSLICtransform = T.Compose([T.ToTensor(),ToSLIC(n_segments=75, add_seg=True)])dataset = MNIST('/tmp/MNIST', download=True, transform=transform)data = dataset[0] # data is a Data object with x, pos and seg attributes这段代码首先从torchvision库中加载了MNIST数据集,并定义了一个组合变换transform。transform蕴含两个步骤:第一步是将PIL.Image类型的图片转换为torch.Tensor类型;第二步是将torch.Tensor类型的图片转换为Data类型,并指定要生成75个超像素节点,并在输入对象中增加seg属性。而后咱们从数据集中取出第一张图片,并利用transform变换失去data对象。 利用在训练GNN模型时,能够应用这个数据集作为输出数据,并将其转换为图形数据格式。例如,能够将图像中的超像素视为节点,超像素之间的邻接关系视为边。在PyG中,能够应用Data类来示意图形数据,其中包含节点特色、边索引和边特色等信息。 上面是一个应用ToSLIC模块进行图像宰割的例子: import torchimport torch.nn.functional as Ffrom torch_geometric.datasets import MNISTSuperpixelsfrom torch_geometric.nn import MessagePassingfrom torch_geometric.utils import add_self_loops, degreefrom torch_geometric.data import DataLoaderclass GCN(MessagePassing): def __init__(self, in_channels, out_channels): super(GCN, self).__init__(aggr='add') self.lin = torch.nn.Linear(in_channels, out_channels) def forward(self, x, edge_index): edge_index, _ = add_self_loops(edge_index, num_nodes=x.size(0)) x = self.lin(x) row, col = edge_index deg = degree(col, x.size(0), dtype=x.dtype) deg_inv_sqrt = deg.pow(-0.5) norm = deg_inv_sqrt[row] * deg_inv_sqrt[col] return self.propagate(edge_index, x=x, norm=norm) def message(self, x_j, norm): return norm.view(-1, 1) * x_jclass Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = GCN(3, 16) self.conv2 = GCN(16, 32) self.conv3 = GCN(32, 64) self.lin = torch.nn.Linear(64, 10) def forward(self, x, edge_index): x = self.conv1(x, edge_index) x = F.relu(x) x = self.conv2(x, edge_index) x = F.relu(x) x = self.conv3(x, edge_index) x = F.relu(x) x = global_mean_pool(x, batch) x = self.lin(x) return F.log_softmax(x, dim=1)dataset = MNISTSuperpixels(root='~/datasets/MNIST', train=True, transform=ToSLIC())loader = DataLoader(dataset, batch_size=64, shuffle=True)model = Net()optimizer = torch.optim.Adam(model.parameters(), lr=0.01)for epoch in range(100): model.train() for data in loader: optimizer.zero_grad() out = model(data.x.float(), data.edge_index) loss = F.nll_loss(out, data.y) loss.backward() optimizer.step() model.eval() correct = 0 for data in loader: out = model(data.x.float(), data.edge_index) pred = out.argmax(dim=1) correct += pred.eq(data.y).sum().item() acc = correct / len(dataset) print(f'Epoch: {epoch}, Accuracy: {acc:.4f}')在这个例子中,咱们应用了一个蕴含三个GCN层的模型来对超像素图进行分类,其中输出节点特色的维度为3,代表超像素的LAB色彩空间的三个通道。咱们应用全局池化层对每个超像素的特色进行聚合,最终输入一个10维向量,代表对应MNIST数字图像的类别概率分布。训练过程中,咱们应用ToSLIC将原始图像转换为超像素图,并应用DataLoader将其加载到模型中进行训练。 ...

April 19, 2023 · 2 min · jiezi

关于challenge:MMLab-AI-实战营从新手到大佬的修炼场

本文为作者作为 学员+助教 参加 2023 年初 OpenMMLab AI 实战营的教训贴,不能确保实用于将来的实战营,也不免有全面之处,心愿发现问题的小伙伴能够在评论区中踊跃探讨~让漂亮周边奖品陪伴一段成长AI 实战营真的提供了十分丰盛的激励实战营成就激励优良学员证书、周边、OpenMMLab 内推机会优良助教证书、进阶周边、MMS(布道师)社区最高荣誉直推通道、社区特邀专访、OpenMMLab 内推机会优良班长相似“优良助教”也带我摸索了很多有价值的技术和工具 学会了我的项目的保护流程 学会向开源社区提交 pr(pull request)和文章 学会……笔记&经验总结上面我来总结实战营中学习到的技术和常识,分为 4 个方面:常用命令、常用工具、GitHub 作业保护、OpenMMLab 奉献指南常用命令ANACONDA 常用命令与一些解决方案创立虚拟环境conda create -n your_env_name python=X.X更新 conda(慎用!!!,新 conda 可能用不了)conda updata conda查看虚拟环境菜单和环境内已载入库conda env listconda list激活虚拟环境Conda activate your_env_name如果遇到 conda 装置频繁报错,应用如下语句:conda clean -i如果可怜要删除虚拟环境conda remove -n your_env_name --allPyTorch 举荐装置命令pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 -f https://download.pytorch.org/whl/cu117/torch_stable.html我罕用的 pip 镜像pip install -i https://pypi.tuna.tsinghua.edu.cn/simple # 清华 pip install -i https://pypi.douban.com/simple # 豆瓣(举荐)装置其余我的项目的 requirements.txtpip install -r requirements.txtTENSORBOARD 可视化首先学习以下 tensorboardX 怎么用。在 OpenMMLab 中,只需找到 configs/_base_/default_runtime.py 中的如下代码,解除 dict(type='TensorboardLoggerHook') 正文局部即可开启 tensorboard 记录器log_config = dict( interval=50, hooks=[ dict(type='TextLoggerHook', by_epoch=False), # dict(type='TensorboardLoggerHook') # dict(type='PaviLoggerHook') # for internal services ])如果遇到环境问题,则依照提醒配置 tensorboard 环境即可个别训练代码运行之后会同时生成 tensorboardX 的日志文件。这时复制日志文件所在文件夹门路,关上 Anaconda 命令行,切换环境至 torch,输出图中语句为日志文件夹创立 tensorboardX 默认的本地端口 ...

April 18, 2023 · 2 min · jiezi

关于challenge:深度学习基础5交叉熵损失函数MSECTC损失适用于字识别语音等序列问题Balanced-L1-Loss适用于目标检测

1.穿插熵损失函数在物理学中,“熵”被用来示意热力学零碎所出现的无序水平。香农将这一概念引入信息论畛域,提出了“信息熵”概念,通过对数函数来测量信息的不确定性。穿插熵(cross entropy)是信息论中的重要概念,次要用来度量两个概率分布间的差别。假设 p和 q是数据 x的两个概率分布,通过 q来示意 p的穿插熵可如下计算: $H\left(p,q\right)=-\sum\limits_{x}p\left(x\right)\log q\left(x\right)$ 穿插熵刻画了两个概率分布之间的间隔,旨在描述通过概率分布 q来表白概率分布 p的艰难水平。依据公式不难理解,穿插熵越小,两个概率分布 p和 q越靠近。 这里依然以三类分类问题为例,假如数据 x属于类别 1。记数据x的类别散布概率为 y,显然 y=(1,0,0)代表数据 x的理论类别散布概率。记$\hat{y}$代表模型预测所得类别散布概率。那么对于数据 x而言,其理论类别散布概率 y和模型预测类别散布概率 $\hat{y}$的穿插熵损失函数定义为: $cross entryy=-y\times\log(\hat{y})$ 很显然,一个良好的神经网络要尽量保障对于每一个输出数据,神经网络所预测类别散布概率与理论类别散布概率之间的差距越小越好,即穿插熵越小越好。于是,可将穿插熵作为损失函数来训练神经网络。 图1 三类分类问题中输出x的穿插熵损失示意图(x 属于第一类) 在下面的例子中,假如所预测两头值 (z1,z2,z3)通过 Softmax映射后所得后果为 (0.34,0.46,0.20)。因为已知输出数据 x属于第一类,显然这个输入不现实而须要对模型参数进行优化。如果抉择穿插熵损失函数来优化模型,则 (z1,z2,z3)这一层的偏导值为 (0.34−1,0.46,0.20)=(−0.66,0.46,0.20)。 能够看出,$Softmax$和穿插熵损失函数互相联合,为偏导计算带来了极大便当。偏导计算使得损失误差从输入端向输出端传递,来对模型参数进行优化。在这里,穿插熵与Softmax函数联合在一起,因而也叫 $Softmax$损失(Softmax with cross-entropy loss)。 2.均方差损失(Mean Square Error,MSE)均方误差损失又称为二次损失、L2损失,罕用于回归预测工作中。均方误差函数通过计算预测值和理论值之间间隔(即误差)的平方来掂量模型优劣。即预测值和实在值越靠近,两者的均方差就越小。 计算形式:假如有 n个训练数据 $x_i$,每个训练数据 $x_i$ 的实在输入为 $y_i$,模型对 $x_i$的预测值为 $\hat{y_i}$。该模型在 n 个训练数据下所产生的均方误差损失可定义如下: $MSE=\dfrac{1}{n}\sum\limits_{i=1}^n\left(y_i-\hat{y}_i\right)^2$ 假如实在目标值为100,预测值在-10000到10000之间,咱们绘制MSE函数曲线如 图1 所示。能够看到,当预测值越靠近100时,MSE损失值越小。MSE损失的范畴为0到∞。 3.CTC损失3.1 CTC算法算法背景-----文字辨认语音等序列问题CTC 算法次要用来解决神经网络中标签和预测值无奈对齐的状况,通常用于文字辨认以及语音等序列学习畛域。举例来说,在语音辨认工作中,咱们心愿语音片段能够与对应的文本内容一一对应,这样能力不便咱们后续的模型训练。然而对齐音频与文本是一件很艰难的事,如 图1 所示,每个人的语速都不同,有人谈话快,有人谈话慢,咱们很难依照时序信息将语音序列切分成一个个的字符片段。而手动对齐音频与字符又是一件十分耗时耗力的工作 图1 语音辨认工作中音频与文本无奈对齐 ...

April 18, 2023 · 2 min · jiezi

关于challenge:机器学习入门与实践数据挖掘二手车价格交易预测含EDA探索特征工程特征优化模型融合等

【机器学习入门与实际】数据挖掘-二手车价格交易预测(含EDA摸索、特色工程、特色优化、模型交融等) note:我的项目链接以及码源见文末 1.赛题简介理解赛题 赛题详情数据详情预测指标剖析赛题数据读取pandas分类指标评估计算示例回归指标评估计算示例EDA摸索 载入各种数据迷信以及可视化库载入数据总览数据详情判断数据缺失和异样理解预测值的散布特色分为类别特色和数字特色,并对类别特色查看unique散布数字特征分析类别特征分析用pandas_profiling生成数据报告特色工程 导入数据删除异常值特色结构特色筛选建模调参,相干原理介绍与举荐 线性回归模型决策树模型GBDT模型XGBoost模型LightGBM模型举荐教材读取数据线性回归 & 五折穿插验证 & 模仿实在业务状况多种模型比照模型调参模型交融 回归\分类概率-交融分类模型交融一些其它办法本赛题示例1.1 数据阐明较量要求参赛选手依据给定的数据集,建设模型,二手汽车的交易价格。 来自 Ebay Kleinanzeigen 报废的二手车,数量超过 370,000,蕴含 20 列变量信息,为了保障较量的公平性,将会从中抽取 10 万条作为训练集,5 万条作为测试集 A,5 万条作为测试集B。同时会对名称、车辆类型、变速箱、model、燃油类型、品牌、公里数、价格等信息进行脱敏。 一般而言,对于数据在较量界面都有对应的数据详情介绍(匿名特色除外),阐明列的性质特色。理解列的性质会有助于咱们对于数据的了解和后续剖析。Tip:匿名特色,就是未告知数据列所属的性质的特色列。 train.csv name - 汽车编码regDate - 汽车注册工夫model - 车型编码brand - 品牌bodyType - 车身类型fuelType - 燃油类型gearbox - 变速箱power - 汽车功率kilometer - 汽车行驶公里notRepairedDamage - 汽车有尚未修复的损坏regionCode - 看车地区编码seller - 销售方offerType - 报价类型creatDate - 广告公布工夫price - 汽车价格v_0', 'v_1', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6', 'v_7', 'v_8', 'v_9', 'v_10', 'v_11', 'v_12', 'v_13','v_14'(依据汽车的评论、标签等大量信息失去的embedding向量)【人工结构 匿名特色】 数字全都脱敏解决,都为label encoding模式,即数字模式 ...

April 13, 2023 · 8 min · jiezi

关于challenge:深度学习基础入门篇四激活函数介绍tanhsigmoidReLUPReLUELUsoftplus等

1.激活函数激活函数是人工神经网络的一个极其重要的特色;激活函数决定一个神经元是否应该被激活,激活代表神经元接管的信息与给定的信息无关;激活函数对输出信息进行非线性变换,而后将变换后的输入信息作为输出信息传给下一层神经元。激活函数的作用 如果不必激活函数,每一层输入都是下层输出的线性函数,无论神经网络有多少层,最终的输入都是输出的线性组合。 激活函数给神经元引入了非线性因素,使得神经网络能够任意迫近任何非线性函数。 2.常见激活函数品种介绍2.1 sigmoid函数定义: $f(x)=\sigma(x)=\dfrac{1}{1+e^{-x}}\quad\text{}$ 导数: $f^{'}(x)=f(x)(1-f(x))$ 长处: $sigmoid$函数的输入映射在 (0,1)之间,枯燥间断,输入范畴无限,优化稳固,能够用作输入层;求导容易;毛病: 因为其软饱和性,一旦落入饱和区梯度就会靠近于0,依据反向流传的链式法则,容易产生梯度隐没,导致训练呈现问题;Sigmoid函数的输入恒大于0。非零中心化的输入会使得其后一层的神经元的输出产生偏置偏移(Bias Shift),并进一步使得梯度降落的收敛速度变慢;计算时,因为具备幂运算,计算复杂度较高,运算速度较慢。2.2 tanh函数定义: $f(x)=\tanh (x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}$ 导数: $f^{'}(x)=1-f(x)^2$ 长处: tanh比 sigmoid函数收敛速度更快;相比 sigmoid函数,tanh是以 0为核心的;毛病: 与 sigmoid函数雷同,因为饱和性容易产生的梯度隐没;与 sigmoid函数雷同,因为具备幂运算,计算复杂度较高,运算速度较慢。2.3 ReLU函数定义: $f(x)=\left\{\begin{array}{lr}0&x<0\\ x&x\geq0\end{array}\right.$ 导数: $f(x)^{\prime}= \begin{cases}0 & x<0 \\ 1 & x \geq 0\end{cases}$ 长处: 收敛速度快;相较于 sigmoid和 tanh中波及了幂运算,导致计算复杂度高, ReLU能够更加简略的实现;当输出 x>=0时,ReLU 的导数为常数,这样可无效缓解梯度隐没问题;当 x<0时,ReLU 的梯度总是 0,提供了神经网络的稠密表达能力;毛病: ReLU 的输入不是以 0为核心的;神经元坏死景象,某些神经元可能永远不会被激活,导致相应参数永远不会被更新;不能防止梯度爆炸问题;2.4 LReLU函数定义: $f(x)=\left\{\begin{array}{lr}\alpha x&x<0\\ x&x\geq0\end{array}\right.\quad$ 导数: $f(x)^{'}=\begin{cases}\alpha&x<0\\ 1&x\geq0\end{cases}$ 长处: 防止梯度隐没;因为导数总是不为零,因而可缩小死神经元的呈现;毛病: LReLU 体现并不一定比 ReLU 好;无奈防止梯度爆炸问题;2.5 PReLU函数定义 : ...

April 12, 2023 · 2 min · jiezi

关于challenge:记一次后端Java普普通通的技术面试

往年的金三银四仿佛走漏些许的冷清,不再像今年那样热气腾腾。很多人仿佛面临着毕业即就业的难堪地步。我也不例外,尽管也有面试,但相比于上次到职找工作,几乎一言难尽。一个是机会少,另外一个就是推动很是迟缓。0x00 筹备在正式记录之前,想略微分享一下投递简历相干技巧。除了局部企业硬卡学历和大厂经验,大部分企业更看重过往工作的匹配度。 打铁还需本身硬面试机会不要节约,肯定要好好筹备。无论是根底还是我的项目,根底的话根本就那些,而我的项目的话则是能体现出本人不同凡响的中央。通常是一个我的项目,再加2-3个亮点、难点。 简历(招呼)机会无论是之前的Hr共事还是面试时遇到的Hr,都在说一件事件。简历切实是太多了,每天都是99+,小红点基本就没有点掉的时候。能够抉择每天晚上7-8点、或者下午7-8点时进行投递,这时被回复的几率会大一些。另外不要认为投递完就完结,能够选择性的进行置顶操作。 针对已读不回 适当的回复交换,如果还是已读不回。大概率是不匹配,而Hr切实太多简历要解决,间接放弃即可。针对未读 可时不时的发送一些招呼、自我举荐类词语,让本人排名靠前,减少被回复的几率。招呼用语尽量不要应用默认的招呼用语,能够本人写几条能简短介绍本人的句子,让本人再泛滥会话列表中凸显进去。也能使Hr更乐意去理解和向技术部门举荐。要晓得,很多人都是被湮没在未读列表中的。 简历自身最好能有针对性的调整简历,使之与JD有更高的符合度。尤其是那种,你认为这个职位几乎就是为本人而打造的那种,很有必要做一份小而美的简历。使得业务部门,更加违心给你提供一次面试机会。 放弃好心态戒焦戒躁。防止焦虑与焦躁,能够尝试静下心来学习一门新技术,或者进步本人某方面的能力。切实不行就去跑跑步吧,身材才是反动的成本,多巴胺容易使人心情舒畅欢快。 0x01 面试一面,次要是对根底的考查。大多数流程为:①自我介绍 ②我的项目介绍 ③基础知识 ④反诘环节。 自我介绍缓解紧张感,也为面试官留点工夫看一下简历。这边能够有重点的疏导面试官后续问问题的方向。流水线式简短概括本人的过往经验即可,也可重点突出本人的亮点。 我的项目介绍详情次要还是能讲清我的项目的业务目标,都有哪些性能,数据流转等。把面试官当成小白,能让他明确你做的这个我的项目是个什么货色就行。 职责就是你在这个我的项目外面的职责是什么?做了哪些工作。比方某个模块,还是负责整个我的项目。 亮点、难点这块才是重点。比方业务复杂度很高?数据量很大?申请量很大?联合本人理论的业务场景去论述即可。比方应用了某某设计模式解决了某某问题?应用了某某计划解决某某场景? 基础知识Java根底最近的面试中,仿佛仅有一次被问到 ArrayList和LinkedList区别HashMap在put时的步骤并发相干(JUC)这块根本是必问内容。 罕用并发平安容器synchronized 和 ReentrantLockatomic罕用同步器及AQS线程池JVM这块也是必问内容,可深可浅。 内存模型及用处CMS,G1OOM,CPU100% 排查思路MQ这块的话,MQ品种很多,挑本人拿手的说即可。差异不大 理解哪些MQ,各自优缺点如何保障音讯不失落音讯沉积如何解决Redis根本也是必问 用过哪些数据结构及用处长久化形式,及优缺点集群形式分布式锁MySQL必问内容 索引及优化(InnoDB)分库分表分布式事务MongoDB应用场景,优缺点集群Spring (Boot/Cloud)Bean的生命周期Bean循环依赖主动配置原理Cloud组件反诘环节这个中央施展空间很大,简而言之就是:人有多大胆地有多大产。这块还有一个重点,放弃好心态,不管后面施展的好与不好。面试是一个互相的抉择的过程,大家都是平等的,求职不是低声下气。另外,面试个别30-60分钟,大家都拿进去这段时间,不要节约,要从中学到一些货色。同时这也是一次很随缘的交换机会。 惯例问题 如果去了会做哪块的货色团队规模技术栈后续的面试安顿(退出这一面通过的话)其余问题 对面试做个反馈?(这块根本能得出是否会有后续安顿)私下聊一些: 程序员之间的一些思维交换?有无加班996之类?压力大不大?0x02 最初最初祝大家都能找到称心的工作。 echo '5Y6f5Yib5paH56ugOiDmjpjph5Eo5L2g5oCO5LmI5Zad5aW26Iy25ZWKWzkyMzI0NTQ5NzU1NTA4MF0pL+aAneWQpihscGUyMzQp' | base64 -d本文参加了SegmentFault 思否面试闯关挑战赛,欢送正在浏览的你也退出。

March 30, 2023 · 1 min · jiezi

关于challenge:记一次从技术简历制作到-Offer-选择的技术面试

文章申明:本文基于实在校招面试教训。又是一年的求职季,这篇文章将会介绍从技术简历制作方法和 Offer 抉择心得。 技术简历制作首先明确一个大道理:大道至简。先来看看一个可能大厂喜爱的简历: 清晰明了的简历看起来就很难受有没有! 找工作就像相亲(毕竟当初相亲的公园里也须要简历了....)单方都得称心才有下一步的可能,所以咱们看看咱们须要筹备啥货色? 首先要做好简历的态度简历就是敲门砖,别藏着掖着学历好的话,请亮剑 -- 事实通知咱们学历就是牌面,如果学校是985、211、海内高校的大佬们,请别暗藏本人了。小弟只有瞻仰.... 学历不够,我的项目来凑 -- 如果你也像我一样双非,那么请多做个几个我的项目,最好是几个能体现技术的我的项目。 我的项目不够,放松做 -- 肯定要吃透至多1个我的项目(两个及以上最好)。这个我的项目肯定是本人写了代码,改过 Bug 的那种。别面试官一问就说这个局部不是我做的,我不晓得。那样预计离凉凉不远了... 简历要好看点、清晰明了难看的简历就是你对该工作的态度。对一个想要从事技术的同学来说,简历不须要做的多花哨。 简历不是贴便当贴,贴的越多反而没有核心内容,而且贴的越多越难看。 简历要有针对性体现你对该公司的关注度,通知看简历的人我就是你们公司须要招的那个人。 简历千万不能作假,作假就是往本人贴创可贴,贴的多,贴的不稳容易露馅。 说完做简历的态度,咱们来说说咱们的简历可能须要通过多少关。 让 HR 称心问了身边的 HR 小姐姐,一天看那么多份简历,期待看到一份正中下怀的简历。 什么叫正中下怀? 站在 HR 的角度来看:用人部门缺什么样的人,我就须要招什么样的人。 首先是这些简历的根本内容: 根本信息(姓名、电话、业余、邮箱)求职意向GitHub、集体博客、集体网站(可有可无)教育经验(本科、硕士)技能清单(学的、会的)实习经验(最好有)我的项目经验(重点项)在校流动(学生干部)荣誉处分(评奖评优)自我评估(可有可无)我集体的习惯就是先把根本信息结尾就放分明,(邮箱和手机号别填错了,不然看中你了也白搭)。 而后放技能清单+实习经验。因为想先让 HR 和面试官先通过技术匹配度记得我,这是我的小公心,大家能够试试哈。 我不把学历放太前,是不想因为学校双非而给HR一个“不是那么好”的印象。如果你的学历好,请摆在前面,要多显眼就摆多显眼。我的项目经验大家首先要把本人的我的项目吃透,而后肯定要体现本人的技术应用特点。 思路就是:做了什么,怎么做的,最初做的后果如何? 如果只想把简历管制在一页,其实前面的局部能够不写了。然而其实因为大家都是网上投PDF简历,我感觉简历 1-2 页也算失常。 HR 就会在简历中挑关键词,满足这些关键词的被看中的几率就大了。 打个比方,招 Java 后端开发:Java、SpringBoot、Redis、中间件、MySQL.... 所以咱们最好突出这些技术栈、技术点、技术名词... 让 HR 称心的话还有哪些须要留神的 强调我是谁?(姓名)我来自哪里?(教育经验、工作/实习经验)对我感兴趣的话你怎么分割到我?(电话、邮箱)我有哪些本事?(是会算法、开发还是测试?)我取得的哪些荣誉?(国省校奖?三好学生?奖学金...)教育经验放在前面,刚好跟前面的在校流动等分割在一起,起到了承前启后的作用,我感觉很赞。 在校流动可写可不写,如果能体现一些组织和沟通能力的流动,或者是较量能力,我感觉应该写上。 荣誉处分有就写没有就算了。 自我形容大略是对本人的其余能力的总结,齐全看简历篇幅,我的项目太多就不必了,我的项目少我感觉还是有必要的。 感激环节就是表忠心的环节,也不确定 HR 或面试官看了会不会感觉轻松一刻。 让技术官称心如果 HR 过了,可能会让你做口试了,口试通过就到了技术官(大概率就是你的共事或者直系领导)手里。如果没有口试,可能间接就到了技术官的手里。所以,简历让技术官称心才是重中之重。 那技术官怎么会称心呢?我的项目要有亮点我的项目要有深度我的项目要有本人的了解残暴的事实在于你做什么我的项目,面试官都可能都会感觉 low!重要的事件说三遍。我的项目最重要,实在面试时候,技术官为了节约工夫,客套的让你略微疾速自我介绍,之后就间接我的项目面试。 我面试的时候,真的还有面试官让你自我介绍环节都省了。面试官间接问:我看了你做了 XX 我的项目,说一下你怎么做的?我:???(心田 OS:我还没反馈过去呢,也让我先介绍一下我本人...) 技术官称心简历的亮点对技术的相熟度;对技术的深度或思考的深度高并发 -- 分片和负载平衡高可用 -- 主备、主从、主备/主从切换、集群、分区技术高性能 -- 比方亿级流量怎么办?尽管秒杀零碎被网上的人做烂了,但为什么还是大家抉择要做这个我的项目的起因。即便你的简历不做,面试官还是会问有没有相干的教训。起因就一个字:卷!我的项目面试的外围:相熟本人的简历我的项目!比方 Java 后端来说,上面的货色如果写进了简历,最好要相熟: ...

March 25, 2023 · 1 min · jiezi

关于challenge:Java-的常见查找算法与排序顺发

常见的七种查找算法: 数据结构是数据存储的形式,算法是数据计算的形式。所以在开发中,算法和数据结构非亲非故。明天的讲义中会波及局部数据结构的专业名词,如果各位铁粉有纳闷,能够先看一下哥们前面录制的数据结构,再回头看算法。 1. 根本查找 也叫做程序查找 阐明:程序查找适宜于存储构造为数组或者链表。 根本思维:程序查找也称为线形查找,属于无序查找算法。从数据结构线的一端开始,程序扫描,顺次将遍历到的结点与要查找的值相比拟,若相等则示意查找胜利;若遍历完结仍没有找到雷同的,示意查找失败。 示例代码: public class A01_BasicSearchDemo1 { public static void main(String[] args) { //根本查找/程序查找 //外围: //从0索引开始挨个往后查找 //需要:定义一个办法利用根本查找,查问某个元素是否存在 //数据如下:{131, 127, 147, 81, 103, 23, 7, 79} int[] arr = {131, 127, 147, 81, 103, 23, 7, 79}; int number = 82; System.out.println(basicSearch(arr, number)); } //参数: //一:数组 //二:要查找的元素 //返回值: //元素是否存在 public static boolean basicSearch(int[] arr, int number){ //利用根本查找来查找number在数组中是否存在 for (int i = 0; i < arr.length; i++) { if(arr[i] == number){ return true; } } return false; }}2. 二分查找 也叫做折半查找 ...

March 10, 2023 · 7 min · jiezi

关于challenge:Java-的包装类

1.1 概述Java提供了两个类型零碎,根本类型与援用类型,应用根本类型在于效率,然而很多状况,会创建对象应用,因为对象能够做更多的性能,如果想要咱们的根本类型像对象一样操作,就能够应用根本类型对应的包装类,如下: 根本类型对应的包装类(位于java.lang包中)byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean1.2 Integer类Integer类概述 包装一个对象中的原始类型 int 的值 Integer类构造方法及静态方法办法名阐明public Integer(int value)依据 int 值创立 Integer 对象(过期)public Integer(String s)依据 String 值创立 Integer 对象(过期)public static Integer valueOf(int i)返回示意指定的 int 值的 Integer 实例public static Integer valueOf(String s)返回保留指定String值的 Integer 对象static string tobinarystring(int i)失去二进制static string tooctalstring(int i)失去八进制static string toHexstring(int i)失去十六进制static int parseInt(string s)将字符串类型的整数转成int类型的整数示例代码//public Integer(int value):依据 int 值创立 Integer 对象(过期)Integer i1 = new Integer(100);System.out.println(i1);//public Integer(String s):依据 String 值创立 Integer 对象(过期)Integer i2 = new Integer("100");//Integer i2 = new Integer("abc"); //NumberFormatExceptionSystem.out.println(i2);System.out.println("--------");//public static Integer valueOf(int i):返回示意指定的 int 值的 Integer 实例Integer i3 = Integer.valueOf(100);System.out.println(i3);//public static Integer valueOf(String s):返回保留指定String值的Integer对象 Integer i4 = Integer.valueOf("100");System.out.println(i4);/* public static string tobinarystring(int i) 失去二进制 public static string tooctalstring(int i) 失去八进制 public static string toHexstring(int i) 失去十六进制 public static int parseInt(string s) 将字符串类型的整数转成int类型的整数 *///1.把整数转成二进制,十六进制String str1 = Integer.toBinaryString(100);System.out.println(str1);//1100100//2.把整数转成八进制String str2 = Integer.toOctalString(100);System.out.println(str2);//144//3.把整数转成十六进制String str3 = Integer.toHexString(100);System.out.println(str3);//64//4.将字符串类型的整数转成int类型的整数//强类型语言:每种数据在java中都有各自的数据类型//在计算的时候,如果不是同一种数据类型,是无奈间接计算的。int i = Integer.parseInt("123");System.out.println(i);System.out.println(i + 1);//124//细节1://在类型转换的时候,括号中的参数只能是数字不能是其余,否则代码会报错//细节2://8种包装类当中,除了Character都有对应的parseXxx的办法,进行类型转换String str = "true";boolean b = Boolean.parseBoolean(str);System.out.println(b);1.3 装箱与拆箱根本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“: ...

March 10, 2023 · 2 min · jiezi

关于challenge:Java-中JDK7时间类与JDK8中的时间类

第一章 Date类1.1 Date概述java.util.Date`类 示意特定的霎时,准确到毫秒。 持续查阅Date类的形容,发现Date领有多个构造函数,只是局部曾经过期,咱们重点看以下两个构造函数 public Date():从运行程序的此时此刻到工夫原点经验的毫秒值,转换成Date对象,调配Date对象并初始化此对象,以示意调配它的工夫(准确到毫秒)。public Date(long date):将指定参数的毫秒值date,转换成Date对象,调配Date对象并初始化此对象,以示意自从规范基准工夫(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。tips: 因为中国处于东八区(GMT+08:00)是比世界协调工夫/格林尼治工夫(GMT)快8小时的时区,当格林尼治规范工夫为0:00时,东八区的规范工夫为08:00。简略来说:应用无参结构,能够主动设置以后零碎工夫的毫秒时刻;指定long类型的结构参数,能够自定义毫秒时刻。例如: import java.util.Date;public class Demo01Date { public static void main(String[] args) { // 创立日期对象,把以后的工夫 System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020 // 创立日期对象,把以后的毫秒值转成日期对象 System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970 }}tips:在应用println办法时,会主动调用Date类中的toString办法。Date类对Object类中的toString办法进行了笼罩重写,所以后果为指定格局的字符串。1.2 Date罕用办法Date类中的少数办法曾经过期,罕用的办法有: public long getTime() 把日期对象转换成对应的工夫毫秒值。public void setTime(long time) 把办法参数给定的毫秒值设置给日期对象示例代码 public class DateDemo02 { public static void main(String[] args) { //创立日期对象 Date d = new Date(); //public long getTime():获取的是日期对象从1970年1月1日 00:00:00到当初的毫秒值 //System.out.println(d.getTime()); //System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年"); //public void setTime(long time):设置工夫,给的是毫秒值 //long time = 1000*60*60; long time = System.currentTimeMillis(); d.setTime(time); System.out.println(d); }}小结:Date示意特定的工夫霎时,咱们能够应用Date对象对工夫进行操作。第二章 SimpleDateFormat类java.text.SimpleDateFormat 是日期/工夫格式化类,咱们通过这个类能够帮咱们实现日期和文本之间的转换,也就是能够在Date对象与String对象之间进行来回转换。 ...

March 10, 2023 · 5 min · jiezi

关于challenge:WinnersSegmentFault-思否写作挑战赛中奖名单来咯

敬爱的小伙伴们,2月的「SegmentFault 思否写作挑战赛」 流动于 3 月 5 日早晨 12 点曾经完结啦! 上面就让咱们正式颁布一下获奖名单吧~ 获奖名单获奖一:实现任一关卡,即可取得挑战赛专属电子勋章一枚中奖用户实现项Baihai_IDPLevel 2dragonirLevel 2jerryLevel 1limingcanLevel 2ZillizLevel 2哈啰技术Level 2花花Level 2酷爱技术的BurtLevel 2获奖二:实现至多两项关卡,即可取得挑战赛专属电子勋章一枚 + 技术书籍一本中奖用户实现项LjznLevel 1 + Level 2MeathillLevel 1 + Level 2XboxYanLevel 1 + Level 2京东云开发者Level 1 + Level 2三掌柜Level 1 + Level 2王中阳GoLevel 2 + Level 3熊的猫Level 1 + Level 2陟上晴明Level 1 + Level 2获奖三:实现全副关卡,即可取得挑战赛专属电子勋章一枚 + 技术书籍一本 + 首页举荐一次中奖用户实现项chokcocoLevel 1 + Level 2 + Level 3获奖四:实现非凡关卡,即可取得 ONES 资助专属礼包一份中奖用户邀请身份实现项王中阳Go邀请者Level 2 + Level 3酷爱技术的Burt被邀请者Level 2三掌柜邀请者Level 1 + Level 2花花被邀请者Level 2陟上晴明邀请者Level 1 + Level 2jerry被邀请者Level 1如何领奖?获奖的小伙伴,请将收货信息填写到链接中链接:https://jinshuju.net/f/S2jRBw重点:表格填写截止到 2023 年 3 月 15 日,逾期则视为主动放弃如有问题能够在评论区留言获奖规定 & 挑战项详情:https://segmentfault.com/a/1190000043397696精彩文章欢送大家浏览参赛文章:https://segmentfault.com/t/challenge/blogs ...

March 7, 2023 · 1 min · jiezi

关于challenge:SegmentFault-思否面试闯关挑战赛

SegmentFault 思否挑战赛 3 月强势续航,赛制降级! “金三银四”求职季到啦,能力自查与晋升火烧眉毛 社区专栏与技术问答联合推出: SegmentFault 思否面试闯关挑战赛 本期挑战赛将于 3 月 7 日 正式开赛,共设四重关卡,不限技术方向。快来和小伙伴们一起被动追击,直冲 Offer 吧! 挑战赛规定参赛工夫:3 月 7 日 -3 月 31 日 ,4 月 4 日 18:00 前颁布获奖名单获奖规定实现 Lv.1 - Lv.3 中,任意一项挑战,即可取得挑战赛专属电子徽章一枚实现 Lv.1 - Lv.3 中,任意二项挑战,前 20 名可取得思否猫一个实现Lv.1 - Lv.3 全副挑战,前 10 名可取得 ONES & 思否盲盒礼包 + 技术书籍 1 本实现 Lv.4 关卡挑战,前 3 名可取得掌上游戏机一个挑战项关卡详情Level 1:易错求解流动期间,应用「问题模版」公布至多 15 个日常开发中遇到的易错问题,请勿发问社区已存在问题Level 2:经典试题流动期间,应用「自问自答」公布至多 10 个技术面试问题 + 参考答案 ,请勿发问社区已存在问题Level 3:命题写作流动期间,以 《记一次 _ 的技术面试》为题,撰写至多 1 篇 800 字以上(除代码外)的面试教训分享文章Level 4:限时百题斩流动期间,限时开启刷题冲刺,撰写至多 100 个问题的解答(自问自答类除外)礼品概览: ...

March 7, 2023 · 1 min · jiezi

关于challenge:ChatGPT会如何影响我们的工作生活和人力资源需求

ChatGPT,这几天体验了一下,的确是十分震撼。 一方面是因为它的答复的确相当好,自带一点框架逻辑,有上下文理解能力,能够诘问,有情商。尽管很多时候都是一些正确的废话 它还有媲美一个一般大学生的信息整合能力,并且一秒钟就能答复你,它甚至还会写代码 咱们曾经进入了第二次信息时代,然而在之前所有的这些大数据,包含人工智能的成绩都是由企业所享受的。咱们只优化了一些举荐算法,商业预测等等。这些成绩并没有给真正的一般消费者所感触到过。所以大家用上ChatGPT之后的那个直观感触,是十分有冲击力的。 日常应用方向一、常识查问在日常咱们的工作学习当中,ChatGPT能够帮到咱们的次要有四个方向。当然了,它还有更多的小性能你能够去开发。尤其是你有搭载第三方软件去做事能力,它能够做更多。但80%的用户次要的用处就是这四个最根底的常识查问。就是把它当作一个搜索引擎用。比方你忽然有个问题:造大桥贵还是造隧道贵,这种常识类的问题,它都能够帮你答复 然而大家要留神了,ChatGPT它没有验证的性能,它只是学习了大量过往并不是实更新的语料库。所以它没有方法保障它的答案是百分之百正确的 二、代码学习对代码不是很理解,然而想疾速上手的人来说,这真的是帮大忙了。轻易举个例子:先问它怎么用js申请后盾数据 这是它给我的答复,十分文本化的答复。第一步你要做什么,接着你要做什么 而后你要做什么。一步一步条理十分清晰 三、语言学习那第三块就是语言学习(目前反对95种语言)。天经地义,这就是一个自然语言解决模型,所以它了解你输出的任何的语种的问题。理解能力都十分强 训练形式也十分有意思,叫做生成式AI。 简略来说就是它在训练的时候,就增强去造就这个模型的创作能力,所以大家在互动的过程中,也能感觉到它创作的文本简直是95%的靠近于人天然谈话的那种形式,大家就能够利用这一点去做语言学习 四、简略创作第四点是所有自媒体人最喜爱的,就是它能够做一些简略的文案脚本的创作。当然它也能够画图,做视频,但这些性能可能还要搭载后续的第三方软件去做这个可视化的图像 会取代哪些工作其实每一次技术的变革,都会随同着一些职业的隐没。那这次以ChatGPT这种生成式AI的利用会随同着哪些职业成为过来呢? 如果你的工作是百分之百靠文字产出的话,那就有可能危险了。对话服务型的工作,像客服、翻译等等。还有一些简略翻新,比如说你是一个自媒体的文案 ChatGPT具备了十分好的对话性和极高的情商,它只有被喂进某一个行业品类,它须要应答的这些服务的规范流程,略微学习一下,就能够上岗了 相似的十分高级的这种翻译需要也必定会大大的缩小,第一阶段的减薪增员之后,这种AI的利用就会扩充到更多的行业里。而且这些行业可能是咱们之前还认为略微有一些门槛的,比方常识行业 游戏行业等等 机会有一些中央的需要变少了,另一些中央的口子就被关上了。看看机会嘛,打不过就退出 很显然,这一波ChatGPT带火了很多科技巨头投入到AI相干的畛域。国内有百度,其实始终都没有放弃做AI、NLP(自然语言解决技术)。腾讯最近也放了音讯,他们要加大这块的投入,包含科大讯飞等等。那咱们说AI这一块相干的用人需要的增长呢,也不是说只局限在外围的机器学习的钻研人员上。和这些产品研发相干的一些非核心岗位,包含懂一点技术的产品经理,卖这种AI应用软件服务的销售等等。 除了这些科技巨头的大量投入之外,我置信有很多小创公司都在看准一块蛋糕。那就是做基于这个模型的利用开发。 结语总的来说,目前看来,我感觉比起前几轮火过的一些科技概念,ChatGPT的生成式AI利用前景会比区块链广,技术的实现水平比元宇宙高。所以将来相似moss(量子计算机)这样的货色呈现,可能真的不只是一个科幻情节

March 4, 2023 · 1 min · jiezi

关于challenge:CSS-数学函数与容器查询实现不定宽文本溢出跑马灯效果

在许久之前,已经写过这样一篇文章 -- 不定宽溢出文本适配滚动。咱们实现了这样一种成果: 文本内容不超过容器宽度,失常展现文本内容超过容器的状况,内容能够进行跑马灯来回滚动展现像是这样: 然而,之前的计划,有一个很显著的毛病,如果咱们当时晓得了容器的宽度,那么没问题,然而如果没法确定容器的宽度,也就文本宽度不确定,容器宽度也不确定的话,那么整个成果会有一点瑕疵。 瑕疵在于,过后的 CSS 技术,其实没法判断以后文本内容长度是否超过了其容器宽度,导致即使文本没有没有超长,Hover 下来也会进行一个来回滚动,像是这样: 容器查问 cqw 和 CSS 数学函数 max背景形容大略是这样,感兴趣的同学,能够简略翻看一下上午提到的文章 -- 不定宽溢出文本适配滚动。 到明天,咱们从新扫视这个问题。看看到明天,咱们能够如何更加简略便捷的解决这个问题! 首先,咱们的问题其实能够形象成: 判断文本宽度与容器宽度的大小差别,文本宽度是否大于容器宽度如果超出,则设置来回位移动画,位移的幅度为容器宽度与文本宽度的差值那么,咱们一步一步来。 假如咱们的 HTML 构造如下: <div class="marquee"> <span>Lorem ipsum dolor sit amet elit. Animi, aliquid.<span></div>其中,div 为容器,span 为文本内容。同时,咱们利用容器查问,设置父容器 marquee 为容器查问的容器,并且将基于容器的inline-size 维度。 .marquee { white-space: nowrap; container-type: inline-size;}持续,咱们如何可能在 span 中得悉,以后 span 的内容长度与父容器宽度谁比拟大呢? 在之前,这是很难办到的,然而当初,咱们有了 容器查问 后,能够靠容器查问单位 cqw 实现。 首先,什么是容器查问?容器查问它给予了 CSS,在不扭转浏览器视口宽度的前提下,只是依据容器的宽度变动,对布局做成调整的能力。 对容器查问想理解更多的,能够戳:新时代布局新个性 -- 容器查问容器查问带来了很多新的单位,其中有: cqw 容器查问宽度(Container Query Width)占比。1cqw 等于容器宽度的 1%。假如容器宽度是 1000px,则此时 1cqw 对应的计算值就是 10px。cqh 容器查问高度(Container Query Height)占比。1cqh 等于容器高度的 1%。cqi 示意容器查问内联方向尺寸(Container Query Inline-Size)占比。这个是逻辑属性单位,默认状况下等同于 cqwcqb 容器查问块级方向尺寸(Container Query Block-Size)占比。同上,默认状况下等同于 cqhcqmin 容器查问较小尺寸的(Container Query Min)占比。取 cqw 和 cqh 中较小的一个cqmax 示意容器查问较大尺寸的(Container Query Min)占比。取 cqw 和 cqh 中较大的一个本文,咱们会使用到其中的 cqw,1cqw 等于容器宽度的 1%。那么,以后容器的宽度,其实就是 100 cqw。 ...

March 2, 2023 · 1 min · jiezi

关于challenge:vuejs-对于普通开发者意味着什么

vue.js 是一款非常风行的前端框架,因为简略实用,容易上手,取得了很多开发者的青睐。本文将简略介绍一下 vue.js 的次要特点,并剖析它对于一般开发者意味着什么。 Declarative Rendering (申明式渲染)所谓申明式,集体了解是所见即所得,通过扩大 HTML 的性能,在最靠近于指标 HTML 的状况下实现各种性能。这种渲染形式最常见于服务端渲染,例如 PHP 的web框架中,就罕用 HTML 模版来实现数据的更新。这种形式的长处是简单明了,写好页面根底的 HTML 之后,只须要在须要数据更新的中央稍作批改就能够了。 例如,这样的 vue 代码: <div id="app"> <button @click="count++"> Count is: {{ count }} </button></div>如果让一个齐全不理解 vue 的人来看,这仿佛就是非法的 HTML 文件。button 元素有了一个新的属性 @click,尽管不晓得是什么意思,但看起没有谬误。 这种形式在相熟服务端渲染的开发者看来,是很相熟的,不会有太大的学习老本。 Reactivity (响应式)相应式是指 vue 能主动跟踪 Javascirpt 中的状态变动,并更新页面上的内容。这个过程包含几个步骤:1.发生变化;2.检测到变动;3.更新变动。vue 帮忙咱们把第二步和第三步主动实现了。 例如,这样的 vue 代码: import { createApp } from 'vue'createApp({ data() { return { count: 0 } }}).mount('#app')开发者只须要申明 data 外面的一个值 count, 并将其初始值设为 0。之后当这个 count 值变动的时候,页面上所有对这个值有依赖的中央都会被相应更新。 Single-File Components (单文件组件)以往一个简略的组建须要有多个文件,包含 HTML 文件,CSS 文件,JS文件等,在我的项目中应用的时候很不不便,而且容易造成凌乱。vue 针对这一痛点,推出了SFC,单文件组件的概念,开发者只须要应用一个文件,就能够同时蕴含 HTML,CSS,JS的内容。 ...

February 28, 2023 · 1 min · jiezi

关于challenge:巧用-ChatGPT让开发者的学习和工作更轻松

引言随着人工智能技术的疾速倒退和广泛应用,ChatGPT 作为一种新兴的自然语言解决模型,近期备受瞩目,引发了宽泛探讨。 ChatGPT 具备多种利用场景,既能够用作聊天机器人,实现智能问答和自然语言交互,也能够作为文本生成工具,帮忙人们撰写文章、新闻和小说等。 作为一名开发者,我对它能给我的学习和工作提供哪些帮忙更感兴趣,因而进行了相干钻研。咱们先看看上面的图片: 下面的两张图片是与 ChatGPT 对话时的内容,依据内容可知: 对于前端工程师来说,ChatGPT 能够提供具备响应式和交互性的网站设计方案,网站开发的代码、用户体验优化、浏览器兼容性、搜索引擎优化和技术支持等方面的帮忙。对于后端工程师来说,ChatGPT 能够提供编写代码、代码性能优化计划、高性能和可伸缩的后端架构的设计领导、数据库设计和优化、零碎安全性和可靠性的实现计划、技术和框架选型的比照计划、举荐学习资源等方面的帮忙。在当今高度竞争的社会中,进步工作和学习效率是咱们不可避免的需要。通过应用 ChatGPT ,粗浅领会到 ChatGPT 在提高效率、解决难题方面的后劲。本文将分享一些应用 ChatGPT 的奇妙技巧和办法,把握这些技巧和办法,或者触类旁通,置信可能轻松高空对工作和学习中的各种挑战。 学习中巧用 ChatGPT学习路线抉择一条好的学习路线能够让咱们事倍功半地排汇新技术或常识。但作为初学者,咱们该如何确定一条好的学习路线呢?如果没有现有的材料可供参考,咱们能够向 ChatGPT 寻求帮忙。下图为 让 ChatGPT 提供一条 Go 学习路线 的聊天对话内容: 当我说出我想要 Go 语言学习路线之后,ChatGPT 立马给出了一条学习路线,并且将路线分为了五个阶段:1、入门学习阶段;2、并发编程学习阶段;3、Web 开发学习阶段;4、数据库操作学习阶段;5、扩大学习阶段。 每个阶段还介绍了须要学习哪些常识,看起来仿佛不错,但并不是很具体,因而我让它细化了学习路线: 看了它的细化内容,显著比之前更加具体了。将大的知识点细分为小的知识点能够更好地领导咱们的学习。另外,咱们还能够依照它所提供的对应书籍的章节进行学习,从而更有针对性地获取常识。 代码了解和代码正文在学习过程中,如果咱们对某段代码的逻辑不是很了解,咱们能够向 ChatGPT 求助,它可能解释代码的意义并提供代码正文。 以上以疾速排序代码为例,仅仅看代码可能难以了解疾速排序算法的逻辑,然而联合 ChatGPT 提供的解释,咱们就能够更轻松地了解了。因为每段解释与代码并不一一对应,所以让 ChatGPT 在代码中增加了正文。 编程问题解决在学习的过程中,咱们常常会遇到各种问题,例如代码编写、排查代码执行谬误的起因等。如果在现有的资料库中难以查问到咱们所需的后果,咱们能够向 ChatGPT 申请帮忙。 代码编写在 Go 语言中,如何正确的初始化一个 int 类型的切片? ChatGPT 给咱们提供了两种初始化的形式,一种非空切片的初始化形式,另一种是空切片的初始化形式。 Gin 框架疾速入门代码示例 ChatGPT 不仅提供了示例代码,还通过增加正文不便咱们了解代码。此外,它还解释了 gin.Default()、r.GET、r.POST 和 c.ShouldBindJSON 函数的作用。 向 ChatGPT 申请帮忙,让它用 Go 实现一个函数,该函数可能将驼峰命名转换成下划线的模式 ...

February 28, 2023 · 1 min · jiezi

关于challenge:Go基于viper实现apollo配置中心多实例快速接入

前言viper是实用于go应用程序的配置解决方案,这款配置管理神器,反对多种类型、开箱即用、极易上手。 本地配置文件的接入能很疾速的实现,那么对于近程apollo配置核心的接入,是否也能很疾速实现呢?如果有多个apollo实例都须要接入,是否能反对呢?以及apollo近程配置变更后,是否能反对热加载,实时更新呢? 拥抱开源带着下面的这些问题,结合实际商业我的项目的实际,曾经有较成熟的解决方案。本着分享的准则,现已将xconfig包脱敏开源,github地址:https://github.com/jinzaigo/xconfig,欢送体验和star。 上面疾速介绍下xconfig包的应用与能力,而后针对包的封装实际做个解说 获取装置go get -u github.com/jinzaigo/xconfigFeatures反对viper包诸多同名办法反对本地配置文件和近程apollo配置热加载,实时更新应用sync.RWMutex读写锁,解决了viper并发读写不平安问题反对apollo配置核心多实例配置化疾速接入接入示例本地配置文件指定配置文件门路实现初始化,即可通过xconfig.GetLocalIns().xxx()链式操作,读取配置 package mainimport ( "fmt" "github.com/jinzaigo/xconfig")func main() { if xconfig.IsLocalLoaded() { fmt.Println("local config is loaded") return } //初始化 configIns := xconfig.New(xconfig.WithFile("example/config.yml")) xconfig.InitLocalIns(configIns) //读取配置 fmt.Println(xconfig.GetLocalIns().GetString("appId")) fmt.Println(xconfig.GetLocalIns().GetString("env")) fmt.Println(xconfig.GetLocalIns().GetString("apollo.one.endpoint"))}xxx反对的操作方法: IsSet(key string) boolGet(key string) interface{}AllSettings() map[string]interface{}GetStringMap(key string) map[string]interface{}GetStringMapString(key string) map[string]stringGetStringSlice(key string) []stringGetIntSlice(key string) []intGetString(key string) stringGetInt(key string) intGetInt32(key string) int32GetInt64(key string) int64GetUint(key string) uintGetUint32(key string) uint32GetUint64(key string) uint64GetFloat(key string) float64GetFloat64(key string) float64GetFloat32(key string) float32GetBool(key string) boolSubAndUnmarshal(key string, i interface{}) error近程apollo配置核心指定配置类型与apollo信息实现初始化,即可通过xconfig.GetRemoteIns(key).xxx()链式操作,读取配置 ...

February 27, 2023 · 3 min · jiezi

关于challenge:一文详解Go-time包时间处理

前言本文次要介绍应用规范库中的time包进行工夫解决。疾速把握时区设置、工夫戳获取,以及工夫格式化等操作。 时区设置1. 默认应用本地时区本地指的是程序运行所属环境(物理机或容器等)。例如本地设置的是北京工夫(Asia/Shanghai),则获取到的工夫就是东八区的工夫 func main() { fmt.Println(time.Now()) fmt.Println(time.Now().Location())}输入:2023-02-19 22:52:38.217136 +0800 CST m=+0.000072078Local2.应用os.Setenv()设置时区应用os包设置环境变量TZ为对应时区。留神:1.该设置肯定要在time包应用之前,否则有效;2.依赖以后零碎的时区数据库,有则能够加载一个地位失去对应的时区,无则兜底应用UTC func main() { os.Setenv("TZ", "Asia/Shanghai") fmt.Println(time.Now()) fmt.Println(time.Now().Location())}输入:2023-02-19 22:54:05.885626 +0800 CST m=+0.000077761Asia/Shanghai3.应用time.LoadLocation()设置时区依赖以后零碎的时区数据库,有则能够加载一个地位失去对应的时区,无则会返回一个error func main() { loc, err := time.LoadLocation("Asia/Shanghai") if err != nil { fmt.Println("LoadLocation error: " + err.Error()) return } fmt.Println(time.Now().In(loc)) fmt.Println(time.Now().In(loc).Location())}正确输入:2023-02-19 23:03:22.543069 +0800 CSTAsia/Shanghai谬误输入:LoadLocation error: unknown time zone Asia/ShanghaiA4.应用内置的time.UTC和time.Local疾速切换时区time.UTC设置为UTC;time.Local设置为本地默认时区 func main() { fmt.Println(time.Now().In(time.UTC)) fmt.Println(time.Now().In(time.UTC).Location()) fmt.Println(time.Now().In(time.Local)) fmt.Println(time.Now().In(time.Local).Location())}输入:2023-02-19 15:22:41.626207 +0000 UTCUTC2023-02-19 23:22:41.626254 +0800 CSTLocal获取以后工夫信息通过time.Now获取以后的工夫对象,而后从工夫对象中能够获取到年、月、日、时、分、秒等信息 func main() { t := time.Now() // 获取以后工夫 fmt.Printf("以后工夫:%v\n", t) year := t.Year() // 年 month := t.Month() // 月 day := t.Day() // 日 hour := t.Hour() // 小时 minute := t.Minute() // 分钟 second := t.Second() // 秒 fmt.Println(year, month, day, hour, minute, second)}输入:以后工夫:2023-02-19 23:36:46.75675 +0800 CST m=+0.0002704952023 February 19 23 36 46获取工夫戳1.以后工夫的工夫戳通过time.Now获取以后的工夫对象,而后应用工夫对象调用相干办法获取工夫戳。 ...

February 27, 2023 · 2 min · jiezi

关于challenge:函数选项模式都还不会用的Gopher得赶紧码住

前言通过这篇文章《为什么说Go的函数是”一等公民“》,咱们理解到了什么是“一等公民”,以及都具备哪些个性,同时对函数的根本应用也更加深刻。 本文重点介绍下Go设计模式之函数选项模式,它得益于Go的函数是“一等公民”,很好的一个利用场景,宽泛被应用。 什么是函数选项模式函数选项模式(Functional Options Pattern),也称为选项模式(Options Pattern),是一种创造性的设计模式,容许你应用承受零个或多个函数作为参数的可变构造函数来构建简单构造。咱们将这些函数称为选项,由此得名函数选项模式。 看概念有点太僵硬难懂了,上面通过例子来解说下怎么应用,由浅入深,通俗易懂。 怎么应用函数选项模式个别程度先来一个简略例子,这个Animal构造体,怎么结构出一个实例对象 type Animal struct { Name string Age int Height int}通常的写法: func NewAnimal(name string, age int, height int) *Animal { return &Animal{ Name: name, Age: age, Height: height, }}a1 := NewAnimal("小白兔", 5, 100)简略易懂,构造体有哪些属性字段,那么构造函数的参数,就相应做定义并传入 带来的问题: 代码耦合度高:加属性字段,构造函数就得相应做批改,调用的中央全副都得改,势必会影响现有代码;代码灵便度低:属性字段不能指定默认值,每次都得明确传入;例如,现打算新加3个字段Weight体重、CanRun是否会跑、LegNum几条腿,同时要指定默认值CanRun=true、LegNum=4 新构造体定义: type Animal struct { Name string Age int Height int Weight int CanRun bool LegNum int}代码实现(函数加新参数定义,但默认值貌似实现不了,得调用构造函数时,明确传入): func NewAnimal(name string, age int, height int, weight int, canRun bool, legNum int) *Animal { return &Animal{ Name: name, Age: age, Height: height, Weight: weight, CanRun: canRun, LegNum: legNum, }}a1 := NewAnimal("小白兔", 5, 100, 120, true, 4)后续逐渐加新字段,这个构造函数就会被撑爆了,如果调用的中央越多,那么越伤筋动骨。 ...

February 27, 2023 · 2 min · jiezi

关于challenge:Go-for-range一不下心就掉坑

前言for循环问题,在面试中常常都会被问到,并且在理论业务我的项目中也常常用到for循环,要是没用好,一不下心就掉坑。 上面会筛选几个经典的案例,一块来探讨下,看看如何防止掉坑,多积攒积攒采坑教训。 案例一:for+传值先来到开胃菜,热热身~ type student struct { name string age int}func main() { m := make(map[string]student) stus := []student{ {name: "张三", age: 18}, {name: "李四", age: 23}, {name: "王五", age: 26}, } for _, stu := range stus { m[stu.name] = stu } for k, v := range m { fmt.Println(k, "=>", v.name) }}不出预料,输入后果为: 李四 => 李四王五 => 王五张三 => 张三这题比较简单,就是简略的传值操作,大家应该都能答上来。上面加大难度,改为传址操作 案例二:for+传址将案例一改为传址操作 type student struct { name string age int}func main() { m := make(map[string]*student) stus := []student{ {name: "张三", age: 18}, {name: "李四", age: 23}, {name: "王五", age: 26}, } for _, stu := range stus { m[stu.name] = &stu } for k, v := range m { fmt.Println(k, "=>", v.name) }}好好想想应该输入什么后果呢?还是跟案例一是一样的后果吗?难道会有坑? ...

February 27, 2023 · 2 min · jiezi

关于challenge:三分钟看完关于-ChatGPT-的技术概括

最近一段时间 OpenAPI 的人工智能聊天机器人 ChatGPT 火了,在寰球领有百万用户,有数投资人的青睐有加,掀起自媒体一场狂欢。在ChatGPT公布当前,其公司 OpenAI 的市值曾经超过了 290 亿美元。 在这里我想简略地聊一聊 ChatGPT 背地依赖的技术,再畅想一下它对咱们这个世界可能带来的扭转。 supervised learning (监督学习)监督式学习是一种机器学习的范式,它示意所有的输出样本都有标注标签。以往的一些机器学习利用,例如:辨认图片中的物体,语音转文字,文字辨认等等,大部分是采纳了这种学习范式。 在 ChatGPT 的训练过程中,工作人员会与AI进行对话,以人工的形式进行标注。 reinforcement learning (强化学习)强化学习是有别于监督学习的另一种机器学习范式,它可能使 AI 自主地寻找最优计划。它的特点是不再须要标注好的样本,也不须要人工地去纠正行为。AI 会在已知与未知之间找到平衡点。一些对抗性的人工智能利用,比方:会打Dota的AI,驰名的围棋AI alphago 等等,都是应用这种学习范式。 在 ChatGPT 的训练过程中,人类先给 AI 的对话回复进行打分,之后依据这些打分生成一个评分模型,之后便能够训练 AI 去取得更高的评分。 训练所用的硬件设施ChatGPT 的训练过程是事后实现好的,在微软的 Azure 云的超级计算基础设施上实现。 大型语言模型的来临大型语言模型好像一种外星生物来临在地球上,引起了人们的好奇和恐怖。它在博览群书之后,彷佛曾经领有了人类全副的智慧结晶。但也有人说,ChatGPT 不过是一个只会寻章摘句的书袋子,无奈有本人的创新能力。 各种观点都有情理,我认为大型语言模型的后劲是不言而喻的,它能胜任很大一部分的对话工作,例如:客服,柜台服务人员等等。我认为目前对 ChatGPT ,或者所对所有大型AI 的制约次要来自于它们无奈像人类一样接触事实世界,因为实际是测验真谛的唯一标准,AI 从互联网上取得的内容是输出性质的,AI 本人产生的输入没有失去事实世界的无效反馈。(据说 ChatGPT 曾经在收集用户的对话反馈,或者当反馈达到一定量级之后会产生量变)。 构想一下,如果 AI 可能实时地观测事实世界的最新变动,并且参加到社会活动中,例如,进行化学试验,经营一家公司,做出股票投资,甚至治理一座城市等等。它就可能从实际中进行学习,再联合过往的常识,一直修改,产生新的常识。 我期待看到第一篇由 AI 发表的论文,第一个由 AI 齐全负责的基金(如果能推出肯定会卖爆,毕竟投资界一贯的格言是要解脱兽性),第一家由 AI 负责决策的公司。当然,这前面必须是有具体的人类进行负责的,例如公司“法人”的概念,毕竟 AI 即使成为立功的借口,也不能代替人去坐牢。 总结科技倒退是一个螺旋回升的门路,在山重水复疑无路时,会柳暗花明,但在众人追捧的时候又有可能陷入困境,对 AI 的倒退,咱们放弃乐观,也放弃沉着。

February 27, 2023 · 1 min · jiezi

关于challenge:一文搞懂ChatGPT是什么怎么用如何提效如何用它变现赚钱

我花了几天工夫零碎的钻研了ChatGPT的原理、利用、实际、以及我交换群里大家的反馈。 总结一句话:要么拥抱ChatGPT,要么被ChatGPT干掉,就这么简略。 下图应该对你有启发: ChatGpt是什么?ChatGPT是由OpenAI开发的,目前能够收费注册和应用的智能聊天机器人。它的神奇之处在于,能够模仿实在人类的思维形式和对话逻辑,甚至能产出一些有深度的答复。非技术人员请看:关键词:ChatGPT是一个能够模仿人类思维形式和对话逻辑的一个应用程序。 它能辅助(局部代替)包含但不限于:程序员、编辑、自媒体、撰稿人、经营、老师、公关、律师等等简直所有岗位的工作。 技术人员请看:技术人员听我给你科普: GPT的全称是Generative Pre-Train Transformer,翻译成中文是:生成式AI 预训练 Transformer模型。关键词就是: 生成式AI预训练Transformer模型不要被这些名字吓到,听我一一道来: (对原理不敢趣味的敌人请间接跳过,往下看也行~) 生成式AI生成式AI是相比于之前传统的“剖析型AI”来说的。 剖析型AI次要是基于大数据做各种机器学习,用于剖析和决策。比方:人脸识别、导航路况预估、Siri语音助手、甚至短视频平台的视频举荐算法等等... 生成式AI的作用是生成内容,比方:帮人写文案、补全代码、甚至是写论文、文字生成图像和视频、辅助游戏开发等。 ChatGPT就是典型的生成式AI。咱们输入一段文本作为问题,它输入一段文字作为答案。实现原理ChatGPT的实现原理也很简略:文字接龙。 依据以后呈现的文字,预测出下一个呈现概率最大的文字。 当然还有“加强式”学习: 预训练咱们以猫狗分类举例:AI是如何辨别猫和狗的呢? 其实和人类的学习齐全一样,就是教会AI的深度神经网络,给AI看大量的猫和狗的照片,并且通知它哪个是猫?哪个是狗?就OK了。 教会AI意识猫狗之后,那怎么再教会AI学会辨别鸡和鸭呢? 咱们是否能训练一个通用的训练器呢?这个思维形式是咱们程序员典型的思维形式:形象+复用。对吧? 答案是必定的,并且这就是预训练,能够先训练辨认动物的大模型,在做微调,以便AI能辨别猫狗、鸡鸭、等等.... ChatGPT应用了超过40TB的文本数据做了预训练,失去了一个超大模型。咱们能够基于这个大模型做任何咱们想做的文本工作。Transformer模型是模型的名称,变形金刚大家都晓得吧,就是这个单词。 咱们能够简略了解为这是一个很厉害的算法构造,就像变形金刚一样厉害。 (PS:不要被配图误导,ChatGPT和大黄蜂没有关系,哈哈。配图只是为了通知大家Transformer模型算法很厉害,而已。) 小结看到这里大家可能有些慌了? ChatGPT这么厉害,咱们是不是要就业了呢? 我的答案是:不会!并且咱们能够基于ChatGPT更好的工作! 上面再和大家开展聊聊: 如何注册应用?对于如何注册应用ChatGPT,之前网络上曾经有很多教程了。最近公众号上的注册教程也都屏蔽了,为了防止不必要的麻烦,不是我这期内容的重点 感兴趣的能够看这篇文章ChatGPT注册账号和搞副业变现的思路 怎么提效?怎么搞副业赚钱?上面我从2个角度为大家分享: 一个是提效:基于咱们日常的工作,怎么应用ChatGpt进步工作效率呢?如果你是程序员、自媒体、撰稿人、经营同学、策动同学、公关同学等等都值得好好看一下。 一个是赚钱:站在守业或者搞副业的角度,聊一下如何基于ChatGPT这个风口赚钱变现? 下文具体列出了针对每个行业(岗位),ChatGPT能做的事件,我只能说句:卧槽, 工作方面程序员debug:有了ChatGPT,再碰到问题,就不须要百度和Google了,因为你百度进去的后果可能还没有ChatGPT的精确。重构和代码审查:ChatGPT反对通过代码审查帮忙改良代码。如果将代码提供给 ChatGPT,它能够为咱们提供倡议以确保代码的品质。它能够提供帮忙的一些办法包含:捕获谬误辨认安全漏洞倡议性能改良提供可读性倡议简略程序自动化:ChatGPT 最神的中央在于,咱们把特定动作,比方备份一个数据库,丢给它,它真的马上就生成一段代码。哪怕略微简单的工作,只有形容够精密,比方 “用 Java 写一个读取 Oracle 表 Employee 的类”,它真的能残缺生成这么一个 Java 类对于非技术人员来说,能够看上面ChatGPT的通用性能,必定会对你目前的工作有帮忙。 非技术人员1.文本生成: ChatGPT 能够帮忙生成各种类型的文本,包含报告、新闻文章、小说、广告文案等。例如,如果你是一名记者,你能够应用 ChatGPT 来帮忙你疾速生成新闻稿;如果你是一名广告创意人员,你能够应用 ChatGPT 来帮忙你构建广告文案。 2.语言翻译: ChatGPT 能够帮忙翻译各种语言,这对于跨国公司的工作人员来说尤其有用。例如,如果你须要将英文文本翻译成法文,你能够应用 ChatGPT 来实现这项工作。 3.文本摘要: ChatGPT 能够帮忙生成文本摘要,这对于须要疾速理解文本内容的人来说十分有用。例如,如果你是一名钻研人员,你能够应用 ChatGPT 来帮忙你疾速生成文献综述。 ...

February 24, 2023 · 1 min · jiezi

关于challenge:ChatGPT的炼成方式和在哈啰营销落地能力

ChatGPT是由OpenAI开发的大型语言模型,能够帮忙咱们解决很多日常生活中的事件,如更改谬误、写小说、答复问题、翻译、写文案等。 GPT 的演进GPT一共有三代,即GPT-1,GPT-2,GPT-3,目前十分火的ChatGPT是GPT-3.5。GPT-1诞生于2018年6月,比BERT略早几个月,层数为12层,词向量长度为768,训练参数量为1.17亿个,数据量为5GB;时隔半年之后,GPT-2诞生于2019年2月,训练参数量为15亿个,数据量为40GB;GPT-3诞生于2020年5月,训练参数量增长超过100倍至1750亿个,数据量达到45TB。 GPT-1以Transformer 为外围构造,是自左向右单向的。GPT-2提出了“所有的有监督学习都是无监督语言模型的一个子集”的思维,即它是一个无监督模型,两头所有的过程都是通过无监督去实现的。比照GPT-2,GPT-3的模型构造上没有做任何的扭转,它应用了超大的数据和参数量,真正诠释了什么叫“暴力出奇观”。GPT系列尽管都获得了不错的成绩,但始终会存在一个问题,即怎么样让它有害,它会生产出一些假的新闻,造成不好的社会影响。 GPT-1自然语言外面有很多未标注数据,标好的数据比拟少。GPT-1面临的问题是在没有标注的中央学习一个语言模型,在标好的数据上训练一个小模型。在做无监督的时候,咱们会遇到两个最大的问题,一是不晓得指标函数是什么,二是怎么传递到下一个子工作。 GPT-1采纳的是传统语言模型的形式,k是窗口的大小,窗口越大就代表整个工作会更难。 将这些预测的概率向量和它的地位编码进行联合,就能够失去h0,h0通过transform解码器去进行解码,最终就失去它的编码,最初会接上一个微调模型。 这是GPT-1外面的利用,次要包含分类、蕴含、类似和多选,每一类工作都有一个标记,通知这是工作的开始阶段、两头阶段还是完结阶段,如果是分类工作就在开始和完结阶段两头抽取一个text,开始和完结符号肯定是特殊符号,最好不要在这些文本当中呈现,最初咱们再接一个Linear的分类器。二是蕴含,即B是否可能反对A,举个例子,小王和小李是好敌人,如果前面一句话是小王送给小李一个馒头,那么它的后果可能是正确的,这句话能证实他们是好敌人。如果是小王明天中午吃了一个馒头,这并不能证实小王和小李是好敌人。三是类似度的训练,相似头条的去重能够用到这样的算法。四是多选,即有A、B、C三个抉择,应该去抉择哪一个。当然整个的成果是不如BERT的,从技术难度上来说,BERT会更简略,并且GPT-1用的数据自身没有BERT那么大。 GPT-2GPT-2模型来自论文《Language Models are Unsupervised Multitask Learners》,它心愿通过zero-shot有所翻新,即对于上游工作,不须要标注信息,在任何中央都能用。这里不能引入之前模型没见过的符号,提示符看上去更像一句话,这也是ChatGPT最后的一个版本,冒号后面通知它你要做什么事件,如在英语到法语的翻译工作中,给模型一个英语和法语。或者通知模型去答复一个问题,这个问题是什么,它会通知你答案是什么。作者在浏览了解、翻译、总结和答复问题上进行试验,能够发现GPT-2在浏览了解和答复问题上成果会更好一些,同时当它的数据量越大,模型可能持续回升。 GPT-3GPT-3模型来自论文《Language Models are Few-Shot Learners》,受到了zero-shot的启发,咱们发现用大量的数据去做标注很艰难,但如果一个样本都没有,它的泛化性不肯定好,同时人类不须要很大的数据去做工作。这里用了两个办法,一是元学习,二是in-context learning。 接下来咱们来看一下Zero-shot、One-shot、Few-shot和Fine-tuning的区别。最常见的是Fine-tuning,即会给一批新的数据,须要对原来的数据做肯定的梯度更新;Zero-shot是说只给提醒,剩下本人去做;One-shot是说会通知你去做什么,还会给一个示例;Few-shot是说会给更多的示例,通知工作应该做成什么样。In-context learning是它的外围,指咱们对模型进行疏导,教会它该当输入什么内容。 作者对这3种学习形式别离进行了试验,能够看到在成果上Few-shot> One-shot > Zero-shot,且参数量越大模型体现越好。 ChatGPT的原理ChatGPT的训练能够分成三步,第一步是须要去做一个有监督的模型;第二步是去收集数据给模型一个反馈,即做强化学习;第三步是依据强化学习,去优化原来的模型。 整个训练过程能够分为四个阶段,包含文字接龙、找一个老师、让老师给评分以及成为老师。 文字接龙ChatGPT的第一个学习阶段是文字接龙,当咱们给出一个不残缺的句子,如“这个大白”,GPT会接下一个字,如“大白天”、“大白美”、“大白丑”,每次输入都会不一样,然而它会有一个概率。这里咱们举个例子,如胡歌很帅,它刚开始学的就是胡,去预测胡歌;已知胡歌,去预测胡歌很;已知胡歌很,去预测胡歌很帅,整个过程齐全不须要人工标注。 文字接龙有什么用呢?它就可能帮咱们答复很多问题。如它在网上看到了一句话叫做“中国最大的淡水湖”,而后让它答复问题,它能够一个个字接下去,就可能会答复鄱阳湖。当然如果这样去做,它的准确率是非常低的,因为没有标注的数据,品质都是不可管制的。 比如说你问它“中国最大的淡水湖”,它可能答复“鄱阳湖”,也有可能答复“这个问题谁晓得呢”,还有可能答复网上的一个选择题“是鄱阳湖还是太湖呢”。那么,怎么让它输入稳定下来变得更加可控呢? 找一个老师要达到一个可用的状态,就要给它找到一个老师,去提供正确的答案,当然这种答案不须要特地多,ChatGPT外面大概给了一万个正确的答案。老师就会通知它“中国最大的淡水湖是鄱阳湖”,而后对这些正确的答案加上更多的权重,通知它人类的偏好是这样的,激发它原本的力量,原本ChatGPT也有能力生成这些答案。 让老师给评分当它找到老师当前,就能够去缓缓模拟一个老师的爱好。当GPT去输入“鄱阳湖”、“太湖”的时候,会有一个判断器通知说得分是多少,如果是“鄱阳湖”就能够给它更高的分数。 成为老师在失去评分的规范后,咱们须要把规范通知GPT,让它晓得这个答案是正确的,这就是比拟常见的强化学习。即会通知你,如果你答复对了,我会给你一个处分,而后你去反馈到GPT当中去,给鄱阳湖加上更多的权重,这样ChatGPT就会本人成为老师,晓得什么样的答案是正确的答案。 ChatGPT在营销的利用ChatGPT最外围的观点有两个,一是应用了超大的参数,二是给数据做高质量的标注。这能够给算法同学一个启发,咱们大部分工夫能够不花在怎么用一些DIN、DCN、DeepFM之类的模型,更重要的是须要去给它更多的数据,加大它的参数量;二是高分量的标注,训练样本的品质肯定要高,不能给一些谬误或者含糊的答案,要给的数据标签肯定要是十分正确的标签。在哈啰目前还没有一个超大模型呈现,利用在举荐、营销、定价等各个方向。 利用场景次要有两个,一是逛逛,在ChatGPT下面咱们能够通知它一句话,而后它能够去生成图片,或者在逛逛外面的一个问题,咱们能够用ChatGPT去辅助答复。二是经营同学在做广告标签的时候,咱们能够去让ChatGPT生成这些标语,拿过去给它十句左右的提醒语,适应哈啰的场景。 本文参加了SegmentFault 思否写作挑战赛,欢送正在浏览的你也退出。

February 23, 2023 · 1 min · jiezi

关于challenge:我所了解的-CSS

起源CSS 到底是什么?简略的答复是,层级装璜表,可能形容网页上元素的款式状态,例如色彩、大小、布局等等。简单的答复是,它既是浏览器所反对的款式配置,也是一种配置语言。回到很久很久以前,互联网的初期,人们刚刚发明了XML的小表弟 —— HTML,将其用于结构一个“难看”的网页。人们用不同的元素名,来示意页面上的不同内容,并依据浏览器内置的格调来渲染它们。例如 h1是大字号的黑体,code是等宽的小字,p是分段的注释等等。起初,人们慢慢感觉内置的这些款式无奈满足对于难看的谋求,浏览器厂商就想,罗唆让你们这些些写网页的人本人去配置好了。于是,HTML 元素有了 style 属性,人们能够通过它来批改元素的款式: <div style="color: green">hello</div>语法一个元素没问题,元素一多,这样的配置办法就麻烦了,比方页面上所有的按钮都要对立格局,每个都独自配置必定不事实。于是 style sheet 应运而生,简而言之就是用独自的文件来保留页面上所有元素的款式配置。CSS 的次要语法很简略,大括号里面的是选择器,示意选中的元素,大括号外面是具体的款式配置: h1 { color: red; font-size: 20px;}每个款式属性之间,应用分号宰割,最初一项能够省略分号。对于分号的地位并没有要求,如果你喜爱,把分号放在行首也是能够的。css 继承了 XML 和 HTML 对于大小写不敏感的特点,当然,为了代码的整洁性,最好还是对立一个大小写的格局: elEmEnt { CoLoR: red ;fonT-size: 20px ;background-color: green}CSS 中惟一的数据类型就是字符串,它不像 JSON,有布尔值、数字这些,CSS里全都是字符串,但记住它们不须要加引号。CSS 里每个属性能够接管一个或多个参数,参数之间用空格宰割,例如: padding: 10px 10px 10px;选择器元素名,类,id方才咱们说了大括号外边那个就是选择器,这让我想起了jQuery 外面的$选择器,其实和那个很相似。根本的规定是:.结尾的示意元素的 class, # 结尾的示意元素的id,字母结尾的示意元素的类型名。留神,class 和 id 都是大小写敏感的,这和元素类型名不一样。 h1 {}.my-class {}#my-id {}如果想同时给多个选择器配置雷同的格调参数,那么用,隔开就能够了,示意 “或” 的意思: .my-class, #my-id { background-color: yellow}伪类选择器还能够增加一些修饰符,例如,示意鼠标悬浮时的格调,在前面加上 :hover 即可,这种单个冒号的润饰叫做伪类(pseudo class): .my-class:hover { color: red}伪元素还有一种,就在前面加两个冒号,叫做伪元素(pseudo element),比方,::first-letter 示意元素内容的首字母: .my-class::first-letter { color: red}依据我的理论测试,同时应用时,两个冒号的必须放在一个冒号的前面,也就是 .my-class:hover::first-letter 这样能起成果,反之有效。 ...

February 22, 2023 · 1 min · jiezi

关于challenge:前端开发关于Webpack的使用详解

前言在前端开发过程中,尤其是当初前端框架的频繁应用的当下,作为前端开发者想必对于Webpack的应用并不生疏,尤其是在应用Vue框架做前端开发的时候,打包时候必用Webpack。还有就是在前端求职面试的时候,Webpack相干的知识点也是面试官必然考查的,那么本篇博文就来分享一下对于Webpack应用相干的知识点,记录下来,不便前期查阅应用。Webpack概念Webpack其实是一个前端资源加载/打包工具,也就是自动化打包解决方案,即模块打包机,它将依据模块的依赖关系进行动态剖析,而后将这些模块依照指定的规定生成对应的动态资源,也就是把某些浏览器中不能间接运行的拓展打包成适合的格局来不便浏览器间接应用。 备注:Webpack也就是一个打包模块化的工具,在Webpack外面所有文件皆为模块,通过loader转换文件,应用plugin注入钩子,最初输入由多个模块组合成的文件。 Webpack打包原理在我的项目开发过程中,大抵分为两个状态:开发状态和生产状态。在这两种状态下,webpack在打包编译的时候,会采纳不同的形式,比方代码是否压缩等。与这两种状态绝对应,webpack的配置文件也要分为两个,一个用于开发时候的配置,一个用于上生产时候的配置。然而理论开发过程中,个别不是定义两个配置文件,而是三个,别离为:开发配置、生产配置和私有配置。这样比拟便于管理webpack,更清晰地区分不同模式下的编译。 Webpack打包原理:把所有依赖打包成一个bundle.js,通过代码宰割成单元片段按需加载。 Webpack核心内容Webpack的外围次要有以下几个局部: mode—模式。development / production模式 ,依据模式来设置mode参数,能够启用相应模式下的 webpack 内置的优化。entry—入口。以后我的项目应该应用何模块,来作为构建其外部依赖的开始,即指定打包入口文件。output—进口。设置输入它所创立的 bundles,以及如何命名这些文件,默认值为 ./dist。loader—加载器。让webpack可能去解决那些非js文件,起因是webpack本身只能辨认js。plugin—插件。能够用于执行范畴更广的工作。插件的范畴包含,从打包优化和压缩,始终到从新定义环境中的变量。另外,Webpack次要文件组成: entry 入口,构建我的项目的终点地位,默认为./src/index.jsoutput 进口,打包之后的输入地位,默认为./distloader:加载器,让webpack领有了加载和解析非JavaScript文件的能力babel-loader:把 ES6 转换成 ES5image-loader:加载并且压缩图片文件css-loader:解析 CSSplugin:插件,扩大webpack的性能,让webpack具备更多的灵活性。define-plugin:定义环境变量html-webpack-plugin: 压缩htmlWebpack的装置Webpack的装置,首先要确保曾经装置了Node.js,因为Node.js自带了软件包装置工具npm。间接在电脑终端中输出命令行:node -v (查看以后node版本,而且要确保node版本大于8.9) Webpack打包流程Webpack打包流程分为:初始化参数、编译模块、输入资源。模块热更新,可使代码批改过后无需刷新浏览器就可部分更新,是高级版的主动刷新浏览器。次要的从启动到完结会顺次执行以下流程: 1、全局装置Webpack首先指定以后装置的版本是3.6.0,因为脚手架3.0依赖是该版本,命令行如下: npm install webpack@3.6.0-g 2、部分装置Webpack部分装置Webpack,应用--save-dev 开发的时候依赖,开发阶段才会用到,我的项目真正公布运行之后就不会再应用。 ①在我的项目中装置部分的Webpack。脚手架降级到3.0就是Webpack4,配置文件会被暗藏,查看不不便。具体命令行如下所示: npm install webpack@3.6.0--save-dev ②通过node_modules/.bin/webpack启动webpack打包。这个比较复杂,若想简略,须要在package.json中定义启动。具体步骤如下所示: 在package.json的scripts中定义执行脚本。package.json中的scripts的脚本在执行时,会依照肯定的程序寻找命令对应的地位。首先会寻找本地node_modules/.bin门路中对应的命令,若没有找到,会去全局的环境变量中持续寻找。(执行bulid指令:npm run build),文件内容如下所示: { "name": "wechatui", "version": "3.0.0", "description": "", "author": "", "private": true, "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "test": "node build/test.js", "pre": "node build/pre.js", "build": "node build/build.js" }, "devDependencies": { "webpack": "^3.6.0", }}Webpack的设置1、定义webpack私有配置文件webpack的私有配置文件的作用:就是将开发环境和生产环境独特的配置抽离进去。比方js文件和css文件的编译规定,编译的入口文件等。上面举一个简略的私有配置文件: webpack.base.js的例子,具体代码如下所示: ...

February 14, 2023 · 1 min · jiezi