【Transformer 】 Hugging Face手册 (02/10)

一、说明

        启动🤗并运行变形金刚!无论您是开发人员还是日常用户,此快速教程都将帮助您入门,并向您展示如何使用 pipeline() 进行推理、使用 AutoClass 加载预训练模型和预处理器,以及使用 PyTorch 或 TensorFlow 快速训练模型。如果您是初学者,我们建议您接下来查看我们的教程或课程,以更深入地解释此处介绍的概念。

二、快速浏览

2.1 安装       

        在开始之前,请确保已安装所有必需的库:

!pip install transformers datasets
您还需要安装首选的机器学习框架:
  • pytorch
pip install torch
  • TensorFlow (张量流)
pip install tensorflow

2.2 管道

        pipeline() 是使用预训练模型进行推理的最简单、最快捷的方法。您可以将pipeline() 用于不同模式的许多任务,其中一些任务如下表所示:

        有关可用任务的完整列表,请查看管道 API 参考。

任务描述形态管道标识符
文本分类为给定的文本序列指定标签自然语言处理pipeline(task=“sentiment-analysis”)
文本生成在给定提示的情况下生成文本自然语言处理pipeline(task=“text-generation”)
综述生成一系列文本或文档的摘要自然语言处理pipeline(task=“summarization”)
图像分类为图像分配标签计算机视觉pipeline(task=“image-classification”)
图像分割为图像的每个像素分配标签(支持语义、全景和实例分割)计算机视觉pipeline(task=“image-segmentation”)
物体检测预测图像中对象的边界框和类计算机视觉pipeline(task=“object-detection”)
音频分类为某些音频数据分配标签音频pipeline(task=“audio-classification”)
自动语音识别将语音转录为文本音频pipeline(task=“automatic-speech-recognition”)
视觉问答回答有关图像的问题,给定图像和问题模 态pipeline(task=“vqa”)
文档问题解答回答有关文档的问题,给定文档和问题模 态pipeline(task=“document-question-answering”)
图片说明为给定图像生成标题模 态pipeline(task=“image-to-text”)

        首先创建一个 pipeline() 实例并指定要使用它的任务。在本指南中,你将使用 pipeline() 进行情绪分析作为示例:

from transformers import pipeline
classifier = pipeline("sentiment-analysis")

2.3 分类器

      pipeline() 下载并缓存默认的预训练模型和分词器,用于情绪分析。现在,您可以在目标文本上使用:classifier

>>> classifier("We are very happy to show you the 🤗 Transformers library.")
[{'label': 'POSITIVE', 'score': 0.9998}]

        如果您有多个输入,请将您的输入作为列表传递给 pipeline() 以返回字典列表:

>>> results = classifier(["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."])
>>> for result in results:
...     print(f"label: {result['label']}, with score: {round(result['score'], 4)}")
label: POSITIVE, with score: 0.9998
label: NEGATIVE, with score: 0.5309

      pipeline() 还可以针对您喜欢的任何任务遍历整个数据集。在此示例中,让我们选择自动语音识别作为我们的任务:

>>> import torch
>>> from transformers import pipeline>>> speech_recognizer = pipeline("automatic-speech-recognition", model="facebook/wav2vec2-base-960h")

        加载要循环访问的音频数据集(有关详细信息,🤗请参阅数据集快速入门)。例如,加载 MInDS-14 数据集:

>>> from datasets import load_dataset, Audio>>> dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")

        您需要确保数据集的采样率与采样率相匹配 评价 facebook/wav2vec2-base-960h 接受过以下培训:

>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=speech_recognizer.feature_extractor.sampling_rate))

        调用列时,会自动加载音频文件并重新采样。 从前 4 个样本中提取原始波形数组,并将其作为列表传递到管道:"audio"

>>> result = speech_recognizer(dataset[:4]["audio"])
>>> print([d["text"] for d in result])
['I WOULD LIKE TO SET UP A JOINT ACCOUNT WITH MY PARTNER HOW DO I PROCEED WITH DOING THAT', "FONDERING HOW I'D SET UP A JOIN TO HELL T WITH MY WIFE AND WHERE THE AP MIGHT BE", "I I'D LIKE TOY SET UP A JOINT ACCOUNT WITH MY PARTNER I'M NOT SEEING THE OPTION TO DO IT ON THE APSO I CALLED IN TO GET SOME HELP CAN I JUST DO IT OVER THE PHONE WITH YOU AND GIVE YOU THE INFORMATION OR SHOULD I DO IT IN THE AP AN I'M MISSING SOMETHING UQUETTE HAD PREFERRED TO JUST DO IT OVER THE PHONE OF POSSIBLE THINGS", 'HOW DO I FURN A JOINA COUT']

        对于输入较大的大型数据集(如语音或视觉),需要传递生成器而不是列表,以将所有输入加载到内存中。有关详细信息,请查看管道 API 参考。

2.4  在管道中使用另一个模型和分词器

pipeline() 可以容纳 Hub 中的任何模型,从而可以轻松地将 pipeline() 用于其他用例。例如,如果您想要一个能够处理法语文本的模型,请使用 Hub 上的标签来筛选适当的模型。顶部筛选的结果返回一个多语言 BERT 模型,该模型针对可用于法语文本的情绪分析进行了微调:

>>> model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
  • pytorch
隐藏 Pytorch 内容

使用 AutoModelForSequenceClassification 和 AutoTokenizer 加载预训练模型及其关联的标记器(下一节中将详细介绍):AutoClass

>>> from transformers import AutoTokenizer, AutoModelForSequenceClassification>>> model = AutoModelForSequenceClassification.from_pretrained(model_name)
>>> tokenizer = AutoTokenizer.from_pretrained(model_name)
  • TensorFlow (张量流)
使用 TFAutoModelForSequenceClassification 和 AutoTokenizer 加载预训练模型及其关联的标记器(下一节将详细介绍):TFAutoClass
>>> from transformers import AutoTokenizer, TFAutoModelForSequenceClassification>>> model = TFAutoModelForSequenceClassification.from_pretrained(model_name)
>>> tokenizer = AutoTokenizer.from_pretrained(model_name)

        在 pipeline() 中指定模型和分词器,现在您可以应用法语文本:classifier

>>> classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
>>> classifier("Nous sommes très heureux de vous présenter la bibliothèque 🤗 Transformers.")
[{'label': '5 stars', 'score': 0.7273}]

        如果找不到适合用例的模型,则需要对数据进行预训练模型的微调。请查看我们的微调教程,了解如何操作。最后,在对预训练模型进行微调后,请考虑在 Hub 上与社区共享该模型,让每个人都能实现机器学习的民主化!🤗

三、自动类

        在后台,AutoModelForSequenceClassification 和 AutoTokenizer 类协同工作,为上面使用的 pipeline() 提供支持。AutoClass 是一种快捷方式,可自动从预训练模型的名称或路径中检索其架构。您只需要为您的任务选择合适的预处理类及其关联的预处理类。AutoClass

        让我们回到上一节的示例,看看如何使用 来复制 pipeline() 的结果。AutoClass

3.1 自动分词器

        分词器负责将文本预处理为数字数组作为模型的输入。有多个规则控制标记化过程,包括如何拆分单词以及应该在什么级别拆分单词(在标记器摘要中了解有关标记化的更多信息)。要记住的最重要的一点是,您需要实例化具有相同模型名称的标记器,以确保使用与模型预训练相同的标记化规则。

        使用 AutoTokenizer 加载分词器:

>>> from transformers import AutoTokenizer>>> model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
>>> tokenizer = AutoTokenizer.from_pretrained(model_name)

        将文本传递给分词器:

>>> encoding = tokenizer("We are very happy to show you the 🤗 Transformers library.")
>>> print(encoding)
{'input_ids': [101, 11312, 10320, 12495, 19308, 10114, 11391, 10855, 10103, 100, 58263, 13299, 119, 102],'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

        分词器返回一个字典,其中包含:

  • input_ids:代币的数字表示。
  • attention_mask:指示应注意哪些令牌。

        分词器还可以接受输入列表,并填充和截断文本以返回长度均匀的批处理:

  • Pytorch 内容
>>> pt_batch = tokenizer(
...     ["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."],
...     padding=True,
...     truncation=True,
...     max_length=512,
...     return_tensors="pt",
... )
  • TensorFlow (张量流)
>>> tf_batch = tokenizer(
...     ["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."],
...     padding=True,
...     truncation=True,
...     max_length=512,
...     return_tensors="tf",
... )

        查看预处理教程,了解有关标记化的更多详细信息,以及如何使用 AutoImageProcessor、AutoFeatureExtractor 和 AutoProcessor 对图像、音频和多模态输入进行预处理。

3.2 自动模型

  • Pytorch 内容

        Transformers 提供了一种简单而统一的方式来加载预训练实例。这意味着您可以像加载 AutoTokenizer 一样加载 AutoModel。唯一的区别是为任务选择了正确的 AutoModel。对于文本(或序列)分类,应加载 AutoModelForSequenceClassification:

>>> from transformers import AutoModelForSequenceClassification>>> model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
>>> pt_model = AutoModelForSequenceClassification.from_pretrained(model_name)

        有关 AutoModel 类支持的任务,请参阅任务摘要。

现在,将预处理的输入批次直接传递到模型。您只需要通过添加以下内容来解压缩字典:**

>>> pt_outputs = pt_model(**pt_batch)

        模型在属性中输出最终激活。将 softmax 函数应用于 以检索概率:logitslogits

>>> from torch import nn>>> pt_predictions = nn.functional.softmax(pt_outputs.logits, dim=-1)
>>> print(pt_predictions)
tensor([[0.0021, 0.0018, 0.0115, 0.2121, 0.7725],[0.2084, 0.1826, 0.1969, 0.1755, 0.2365]], grad_fn=<SoftmaxBackward0>)
  • TensorFlow (张量流)

        transformers 提供了一种简单而统一的方式来加载预训练实例。这意味着您可以像加载 AutoTokenizer 一样加载 TFAutoModel。唯一的区别是为任务选择了正确的 TFAutoModel。对于文本(或序列)分类,应加载 TFAutoModelForSequenceClassification:

>>> from transformers import TFAutoModelForSequenceClassification>>> model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
>>> tf_model = TFAutoModelForSequenceClassification.from_pretrained(model_name)

        有关 AutoModel 类支持的任务,请参阅任务摘要。

        现在,将预处理的输入批次直接传递到模型。您可以按原样传递张量:

>>> tf_outputs = tf_model(tf_batch)

        模型在属性中输出最终激活。将 softmax 函数应用于 以检索概率:logitslogits

>>> import tensorflow as tf>>> tf_predictions = tf.nn.softmax(tf_outputs.logits, axis=-1)
>>> tf_predictions

        所有 🤗 Transformer 模型(PyTorch 或 TensorFlow)都会在最终激活之前输出张量 函数(如 softmax),因为最终激活函数通常与损耗融合在一起。模型输出是特殊的数据类,因此其属性会在 IDE 中自动完成。模型输出的行为类似于元组或字典(可以使用整数、切片或字符串进行索引),在这种情况下,将忽略 None 的属性。

3.3 保存模型

  •  Pytorch 内容

        对模型进行微调后,可以使用 PreTrainedModel.save_pretrained()将其与分词器一起保存:

>>> pt_save_directory = "./pt_save_pretrained"
>>> tokenizer.save_pretrained(pt_save_directory)
>>> pt_model.save_pretrained(pt_save_directory)

        当您准备好再次使用模型时,请使用 PreTrainedModel.from_pretrained()) 重新加载它:

>>> pt_model = AutoModelForSequenceClassification.from_pretrained("./pt_save_pretrained")
  • TensorFlow (张量流)

        对模型进行微调后,可以使用 TFPreTrainedModel.save_pretrained()将其与分词器一起保存:

>>> tf_save_directory = "./tf_save_pretrained"
>>> tokenizer.save_pretrained(tf_save_directory)
>>> tf_model.save_pretrained(tf_save_directory)

        当您准备好再次使用模型时,请使用 TFPreTrainedModel.from_pretrained()) 重新加载它:

        
>>> tf_model = TFAutoModelForSequenceClassification.from_pretrained("./tf_save_pretrained")

        Transformers 的一个特别酷🤗的功能是能够保存模型并将其重新加载为 PyTorch 或 TensorFlow 模型。or 参数可以将模型从一个框架转换为另一个框架:from_ptfrom_tf

  • Pytorch 内容
>>> from transformers import AutoModel>>> tokenizer = AutoTokenizer.from_pretrained(tf_save_directory)
>>> pt_model = AutoModelForSequenceClassification.from_pretrained(tf_save_directory, from_tf=True)
  • TensorFlow (张量流)
>>> from transformers import TFAutoModel>>> tokenizer = AutoTokenizer.from_pretrained(pt_save_directory)
>>> tf_model = TFAutoModelForSequenceClassification.from_pretrained(pt_save_directory, from_pt=True)

四、自定义模型构建

        您可以修改模型的配置类以更改模型的构建方式。该配置指定模型的属性,例如隐藏层数或注意力头数。从自定义配置类初始化模型时,可以从头开始。模型属性是随机初始化的,需要先训练模型,然后才能使用它来获得有意义的结果。

        首先导入 AutoConfig,然后加载要修改的预训练模型。在 AutoConfig.from_pretrained() 中,您可以指定要更改的属性,例如注意力头的数量:

>>> from transformers import AutoConfig>>> my_config = AutoConfig.from_pretrained("distilbert-base-uncased", n_heads=12)
  •  Pytorch 内容

        使用 AutoModel.from_config() 从自定义配置创建模型:

>>> from transformers import AutoModel>>> my_model = AutoModel.from_config(my_config)
  • TensorFlow (张量流)

        使用 TFAutoModel.from_config() 从自定义配置创建模型:

>>> from transformers import TFAutoModel>>> my_model = TFAutoModel.from_config(my_config)

        有关构建自定义配置的更多信息,请查看创建自定义体系结构指南。

4.1 Trainer - PyTorch 优化的训练循环

        所有模型都是标准的 torch.nn.Module,因此您可以在任何典型的训练循环中使用它们。虽然您可以编写自己的训练循环,🤗但 Transformers 为 PyTorch 提供了一个 Trainer 类,其中包含基本的训练循环,并为分布式训练、混合精度等功能添加了附加功能。

        根据您的任务,您通常会将以下参数传递给 Trainer:

  1. 您将从 PreTrainedModel 或 torch.nn.Module 开始: 

    >>> from transformers import AutoModelForSequenceClassification>>> model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")
  2. TrainingArguments 包含可以更改的模型超参数,例如学习速率、批处理大小和要训练的 epoch 数。如果未指定任何训练参数,则使用默认值: 

    >>> from transformers import TrainingArguments>>> training_args = TrainingArguments(
    ...     output_dir="path/to/save/folder/",
    ...     learning_rate=2e-5,
    ...     per_device_train_batch_size=8,
    ...     per_device_eval_batch_size=8,
    ...     num_train_epochs=2,
    ... )
  3. 加载预处理类,如分词器、图像处理器、特征提取器或处理器: 

    >>> from transformers import AutoTokenizer>>> tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
  4. 加载数据集: 

    >>> from datasets import load_dataset>>> dataset = load_dataset("rotten_tomatoes")  # doctest: +IGNORE_RESULT
  5. 创建一个函数来标记数据集: 

    >>> def tokenize_dataset(dataset):
    ...     return tokenizer(dataset["text"])

    然后使用 map 将其应用于整个数据集:

    >>> dataset = dataset.map(tokenize_dataset, batched=True)
  6. 一个 DataCollatorWithPadding,用于从数据集创建一批示例:

    >>> from transformers import DataCollatorWithPadding>>> data_collator = DataCollatorWithPadding(tokenizer=tokenizer)

        现在在 Trainer 中收集所有这些类:

>>> from transformers import Trainer>>> trainer = Trainer(
...     model=model,
...     args=training_args,
...     train_dataset=dataset["train"],
...     eval_dataset=dataset["test"],
...     tokenizer=tokenizer,
...     data_collator=data_collator,
... )  # doctest: +SKIP

        准备就绪后,调用 train() 开始训练:

>>> trainer.train()

        对于使用序列到序列模型的任务(如翻译或摘要),请改用 Seq2SeqTrainer 和 Seq2SeqTrainingArguments 类。

        您可以通过在 Trainer 中对方法进行子类化来自定义训练循环行为。这允许您自定义损失函数、优化器和调度器等功能。查看 Trainer 参考,了解哪些方法可以进行子类化。

        自定义训练循环的另一种方法是使用 Callbacks。您可以使用回调与其他库集成,并检查训练循环以报告进度或提前停止训练。回调不会修改训练循环本身中的任何内容。要自定义类似损失函数的东西,您需要改为子类化 Trainer。

4.2 使用 TensorFlow 进行训练

        所有模型都是标准的 tf.keras.Model,因此可以使用 Keras API 在 TensorFlow 中进行训练。🤗 Transformers 提供了 prepare_tf_dataset() 方法,可以轻松地将数据集加载为 a,因此您可以立即开始使用 Keras 的编译和拟合方法进行训练。tf.data.Dataset

  1. 您将从 TFPreTrainedModel 或 tf.keras.Model 开始:

    >>> from transformers import TFAutoModelForSequenceClassification>>> model = TFAutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")
  2. 加载预处理类,如分词器、图像处理器、特征提取器或处理器:

    >>> from transformers import AutoTokenizer>>> tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
  3. 创建一个函数来标记数据集:

    >>> def tokenize_dataset(dataset):
    ...     return tokenizer(dataset["text"])  # doctest: +SKIP
  4. 使用 map 将分词器应用于整个数据集,然后将数据集和分词器传递给 prepare_tf_dataset()。如果需要,还可以在此处更改批处理大小并随机排列数据集:

    >>> dataset = dataset.map(tokenize_dataset)  # doctest: +SKIP
    >>> tf_dataset = model.prepare_tf_dataset(
    ...     dataset["train"], batch_size=16, shuffle=True, tokenizer=tokenizer
    ... )  # doctest: +SKIP
  5. 准备就绪后,您可以拨打电话开始训练。请注意,Transformer 模型都具有与任务相关的默认损失函数,因此除非您想要:compilefit

    >>> from tensorflow.keras.optimizers import Adam>>> model.compile(optimizer=Adam(3e-5))  # No loss argument!
    >>> model.fit(tf_dataset)  # doctest: +SKIP

4.3 下一步是什么?

        现在,你已经完成了 🤗 Transformers 快速教程,请查看我们的指南,了解如何执行更具体的操作,例如编写自定义模型、为任务微调模型以及如何使用脚本训练模型。如果您有兴趣了解更多关于变形金刚核心概念的信息🤗,请喝杯咖啡并查看我们的概念指南!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VRRP负载平衡

1.构图 2.实验 2.1如图提示配置pc1-pc4 掩码:255.255.255.0网关均设置为192.168.1(\2).254 2.2配置sw1-sw2 [sw1]port-group 1 //创建接口组&#xff0c;组号是1[sw1-port-group 1]group-member gigabitethernet 0/0/1 to gigabitethernet 0/0/3 //添加组成员&#xff0c;从…

springboot142新冠病毒密接者跟踪系统

新冠病毒密接者跟踪系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff…

有源滤波装置在电能质量生物制药行业中的应用

上海安科瑞电气股份有限公司 胡冠楠 咨询家&#xff1a;“Acrelhgn”&#xff0c;了解更多产品资讯 摘要&#xff1a;随着电子设备大量的使用&#xff0c;非线性负荷越来越多&#xff0c;企业电力网的谐波污染问题也越来越严重&#xff0c;由于谐波的不良作用恶化电能质量&…

【鸿蒙】大模型对话应用(三):跨Ability跳转页面

Demo介绍 本demo对接阿里云和百度的大模型API&#xff0c;实现一个简单的对话应用。 DecEco Studio版本&#xff1a;DevEco Studio 3.1.1 Release HarmonyOS SDK版本&#xff1a;API9 关键点&#xff1a;ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 页面跳…

C#用正则表达式判断字符串是否纯数字vs用Char.IsDigit 方法遍历字符数组是否纯数字

目录 一、使用的方法 1.正则表达式 2.Char.IsDigit 方法 二、源码 1.源代码 2.生成效果 一、使用的方法 1.正则表达式 在程序运行过程中&#xff0c;经常需要用户输入数字信息&#xff0c;如输入员工年龄、工资等。使用正则表达式Regex类的IsMatch方法&#xff0c;可以有…

产业热点 | 从 Vision Pro 发售,洞见空间计算时代新机遇

*图源&#xff1a;Apple 官网 近日首批 Vision Pro 启动预约发售&#xff0c;短短一周就预估售出 20 万台&#xff0c;如今正式发售在即&#xff0c;再度受到各界的热切关注。 *图源&#xff1a;Apple 官网 同样作为空间计算赛道企业&#xff0c;ALVA Systems 在过去十余年始…

2024年美赛数学建模A题思路模型代码

​2024年美赛ABCDEF题思路模型代码论文&#xff1a;开赛后2.2早上第一时间更新&#xff0c;详细内容见文末名片 目录 下面是我对美赛的一些看法&#xff0c;大家可以参考 赛题思路代码模型论文&#xff1a;开赛后第一时间更新&#xff0c;获取见文末名片 总说&#xff08;历年美…

ubuntu20配置mysql8

首先更新软件包索引运行 sudo apt update命令。然后运行 sudo apt install mysql-server安装MySQL服务器。 安装完成后&#xff0c;MySQL服务将作为systemd服务自动启动。你可以运行 sudo systemctl status mysql命令验证MySQL服务器是否正在运行。 连接MySQL 当MySQL安装…

【免费分享】数据可视化-银行动态实时大屏监管系统,含源码

一、动态效果展示 1. 动态实时更新数据效果图 ​ 2. 鼠标右键切换主题 二、确定需求方案 1. 屏幕分辨率 这个案例的分辨率是16:9&#xff0c;最常用的的宽屏比。 根据电脑分辨率屏幕自适应显示&#xff0c;F11全屏查看&#xff1b; 2. 部署方式 B/S方式&#xff1a;支持…

SpringBoot+Redis如何实现用户输入错误密码后限制登录(含源码)

点击下载《SpringBootRedis如何实现用户输入错误密码后限制登录&#xff08;含源码&#xff09;》 1. 引言 在当今的网络环境中&#xff0c;保障用户账户的安全性是非常重要的。为了防止暴力破解和恶意攻击&#xff0c;我们需要在用户尝试登录失败一定次数后限制其登录。这不…

全程云OA未授权访问+SQL注入漏洞复现 [附POC]

文章目录 全程云OA未授权访问+SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现全程云OA未授权访问+SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利…

【开发实践】python使用 moviepy实现mp4转gif(含可视化界面)

一、分析介绍 MoviePy是一个用于视频编辑和处理的Python库。它提供了一种简单而直观的方式来创建、编辑和合成视频&#xff0c;同时也支持添加音频和图像。 以下是MoviePy的一些主要功能和用法示例&#xff1a; 创建视频剪辑&#xff1a; from moviepy.editor import VideoFi…

visual studio 0x800700d8怎么解决

遇到Visual Studio中的0x800700d8错误通常表示在尝试执行某个操作时遇到了问题&#xff0c;这可能是由于系统组件缺失、文件损坏、权限问题或其他系统级错误导致的。下面是一些详细的解决步骤&#xff0c;你可以尝试按照这些步骤来解决问题&#xff1a; 运行Windows更新&#…

如何做好多平台内容营销?媒介盒子分享

随着社交媒体不断多元化&#xff0c;内容营销逐渐发展出了新趋势&#xff0c;那就是跨平台内容营销。互联网平台相对封闭&#xff0c;平台的运营偏好也会吸引不同社区的粉丝聚集&#xff0c;造就其不同的品牌人格&#xff0c;然后用户个体需求极其复杂&#xff0c;兴趣也在不断…

Arcgis10.3安装

所需软件地址 链接&#xff1a;https://pan.baidu.com/s/1aAykUDjkaXjdwFjDvAR83Q?pwdbs2i 提取码&#xff1a;bs2i 1、安装License Manager 点击License Manager.exe&#xff0c;默认下一步。 安装完&#xff0c;点击License Server Administrator&#xff0c;停止服务。…

大数据学习之Redis,十大数据类型的具体应用(四)

3.8 Redis基数统计&#xff08;HyperLogLog&#xff09; 需求 统计某个网站的UV、统计某个文章的UV 什么是UV unique Visitor &#xff0c;独立访客&#xff0c;一般理解为客户端IP 大规模的防止作弊&#xff0c;需要去重复统计独立访客 比如IP同样就认为是同一个客户 需要去…

滑动窗口入门(算法村第十六关青铜挑战)

窗口&#xff1a;窗口其实就是两个变量left和ight之间的元素&#xff0c;也可以理解为一个区间。窗口大小可能固定&#xff0c;也可能变化。滑动&#xff1a;窗口是移动的&#xff0c;事实上移动的仍然是left和ight两个变量&#xff0c;而不是序列中的元素。当变量移动的时&…

OpenGL着色器对象 Shader Objects

着色器对象 要创建着色器对象&#xff0c;你可以使用以下命令&#xff1a; uint glCreateShader( enum type );当创建着色器对象时&#xff0c;它最初是空的。type 参数指定要创建的着色器对象的类型&#xff0c;必须是指示相应着色器阶段的值之一。以下是该命令的简要概述&a…

算法笔记刷题日记——Day1 C_C++在ACM中的常用语法

写在前面 这学期选了ACM课&#xff0c;但平时缺乏练习&#xff0c;不怎么刷题&#xff0c;因此期末考试成绩并不理想。考虑到之后的考研复试中包含机试&#xff0c;且计试可以算是非常重要的印象分&#xff0c;因此我打算寒假刷一下算法笔记&#xff0c;备战3月初的PAT甲级和3…

【前端学习路线】

前端学习路线 1. 大纲: 前端学习路线2. ES6 语法1. let 和 const2. 箭头函数3. 解构3.1 数组解构3.2 对象解构 4 剩余参数4.1 和解构联用4.2 合并数组 5. 可选链6. Set7.数组操作8.字符串扩展方法8.1 startsWith() 和 endsWith()8.2 模板字符串 1. 大纲: 前端学习路线 学习前端…