Flux 开源替代,他来了——Liberflux

LibreFLUX 是 FLUX.1-schnell 的 Apache 2.0 版本,它提供完整的 T5 上下文长度,使用注意力屏蔽,恢复了无分类器引导,并完全删除了 FLUX 美学微调/DPO 的大部分内容。 这意味着它比基本通量要难看得多,但它有可能更容易进行微调,以适应任何新的分布。 它牢记开源软件的核心原则,即它应该难以使用,比专有解决方案更慢、更笨拙,其美学风格也应该停留在 2000 年代早期。

在这里插入图片描述
prompt:The image features a man standing confidently, wearing a simple t-shirt with a humorous and quirky message printed across the front. The t-shirt reads: “I de-distilled FLUX schnell into a slow, ugly model and all I got was this stupid t-shirt.” The man’s expression suggests a mix of pride and irony, as if he’s aware of the complexity behind the statement, yet amused by the underwhelming reward. The background is neutral, keeping the focus on the man and his t-shirt, which pokes fun at the frustrating and often anticlimactic nature of technical processes or complex problem-solving, distilled into a comically understated punchline.

示例

推理

要使用该模型,只需使用 diffusers 调用自定义管道即可。 它目前适用于 diffusers==0.30.3,并将很快更新到最新的 diffusers。 该模型在 CFG 比例为 2.0 至 5.0 时效果最佳,因此如果您得到的图像模糊或有奇怪的阴影,请尝试调低 CFG 比例(扩散器中的 guidance_scale)。 另外,如果在前几个时间步中关闭 CFG 比例(自定义管道中的 no_cfg_until_timestep=2),也可以使用更高的 CFG 比例。

# ! pip install diffusers==0.30.3
import torch
from diffusers import DiffusionPipelinepipe = DiffusionPipeline.from_pretrained("jimmycarter/LibreFLUX",custom_pipeline="jimmycarter/LibreFLUX",use_safetensors=True,torch_dtype=torch.bfloat16,trust_remote_code=True,
)# High VRAM
prompt = "Photograph of a chalk board on which is written: 'I thought what I'd do was, I'd pretend I was one of those deaf-mutes.'"
negative_prompt = "blurry"
images = pipe(prompt=prompt,negative_prompt=negative_prompt,return_dict=False,# guidance_scale=3.5,# num_inference_steps=28,# generator=torch.Generator().manual_seed(42),# no_cfg_until_timestep=0,
)
images[0][0].save('chalkboard.png')# If you have <=24 GB VRAM, try:
# ! pip install optimum-quanto
# Then
from optimum.quanto import freeze, quantize, qint8
# quantize and freeze will take a short amount of time, so be patient.
quantize(pipe.transformer,weights=qint8,exclude=["*.norm", "*.norm1", "*.norm2", "*.norm2_context","proj_out", "x_embedder", "norm_out", "context_embedder",],
)
freeze(pipe.transformer)
pipe.enable_model_cpu_offload()images = pipe(prompt=prompt,negative_prompt=negative_prompt,device=None,return_dict=False,do_batch_cfg=False, # https://github.com/huggingface/optimum-quanto/issues/327# guidance_scale=3.5,# num_inference_steps=28,# generator=torch.Generator().manual_seed(42),# no_cfg_until_timestep=0,
)
images[0][0].save('chalkboard.png')

为便于在 ComfyUI 中使用,我们提供了一个转换器文件,但请注意,ComfyUI 目前不支持注意遮罩,因此您的图像可能会降低质量。

微调

使用 SimpleTuner 和 --flux_attention_masked_training 训练选项以及 jimmycarter/LibreFlux-SimpleTuner 中的模型,可以轻松地对模型进行微调。 这是去除了自定义管道的同一模型,目前自定义管道干扰了 SimpleTuner 对其进行微调的能力。 除了全等级微调外,SimpleTuner 还通过 LyCORIS 广泛支持参数效率微调。 要进行推理,请使用本软件仓库中的自定义管道,并按照 SimpleTuner 中的示例在 LyCORIS 权重中打补丁。

from lycoris import create_lycoris_from_weightspipe = DiffusionPipeline.from_pretrained("jimmycarter/LibreFLUX",custom_pipeline="jimmycarter/LibreFLUX",use_safetensors=True,torch_dtype=torch.bfloat16,trust_remote_code=True,
)lycoris_safetensors_path = 'pytorch_lora_weights.safetensors'
wrapper, _ = create_lycoris_from_weights(1.0, lycoris_safetensors_path, pipe.transformer)
wrapper.merge_to()
del wrapperprompt = "Photograph of a chalk board on which is written: 'I thought what I'd do was, I'd pretend I was one of those deaf-mutes.'"
negative_prompt = "blurry"
images = pipe(prompt=prompt,negative_prompt=negative_prompt,return_dict=False,
)
images[0][0].save('chalkboard.png')# optionally, save a merged pipeline containing the LyCORIS baked-in:
# pipe.save_pretrained('/path/to/output/pipeline')

Schnell 脱馏非技术报告

欢迎阅读我的非技术性报告,在资源极其有限的情况下,我用最不科学的方法对 FLUX.1-schnell 进行了去蒸馏。 我不敢说我做了一个很好的模型,但我确实做了一个模型。 它是在大约 1,500 H100 小时当量的基础上训练出来的。

在这里插入图片描述
人人都是艺术家机器学习研究员。

为什么

FLUX 是一个很好的文本到图像模型,但目前推出的版本都是经过提炼的。 FLUX.1-dev 经过蒸馏后无需使用 CFG(无分类器引导),因此无需为有条件(您的提示)和无条件(否定提示)制作样本,只需为有条件制作样本即可。 这意味着,FLUX.1-dev 的速度是没有经过蒸馏的模型的两倍。

FLUX.1-schnell(德语,意为 “快速”)经过进一步提炼,只需 4 步条件生成即可获得图像。 重要的是,FLUX.1-schnell 采用 Apache-2.0 许可,因此您可以免费使用,无需从 Black Forest Labs 获得商业许可。 开箱即用的 schnell 在使用 CFG 时非常糟糕,除非跳过前几个步骤。

FLUX 蒸馏模型是通过对教师模型(非蒸馏模型)和学生模型(蒸馏模型)的输出进行训练,再加上一些技巧(如对抗网络),为其基础模型(非蒸馏模型)创建的。

对于去除法模型,图像生成所需的时间比两倍还少,因为每一步都需要计算条件图像和非条件图像的样本。 这样做的好处是您可以免费在商业上使用它们,训练也更容易一些,而且它们可能更有创造力。

恢复最初的培训目标

这部分其实很简单。 您只需用 MSE 损失对正常流量匹配目标进行训练,模型就会开始重新学习如何进行匹配。 尽管如此,我并不认为 LibreFLUX 或 OpenFLUX.1 能够完全去除模型的抖动。 我看到的证据是,当使用的 CFG 比例值大于 4.0 时,这两个模型都会出现压倒图像的奇怪阴影或模糊现象。 与原始模型的训练时间(假设约为 0.5-2.0m H100 小时)相比,我们的训练时间都不长,所以这并不特别令人惊讶。

FLUX 和注意力掩蔽

FLUX 模型使用一种名为 T5-XXL 的文本模型来获取文本到图像任务的大部分条件。 重要的是,它们将文本填充为 256 个(schnell)或 512 个(dev)词组。 512 个标记是模型的最大训练长度。 所谓填充,是指重复最后一个标记,直到序列达到这个长度。

这就导致模型使用这些填充标记来存储信息。 如果将文本编码器填充段中标记符的注意力图可视化,就会发现在文本最后一个标记符之后不久的大约 10-40 个标记符和填充符末尾的大约 10-40 个标记符都包含模型用来制作图像的信息。 由于这些信息通常用于存储信息,这意味着任何足够长的提示符如果没有这些填充标记,最终都会导致性能下降。

要防止这种情况很容易,只要在注意力集中时屏蔽掉这些填充标记即可。 BFL 和他们的工程师都知道这一点,但他们可能决定不这么做,因为这样做可以保持原样,而且注意力的大多数快速实现都只使用因果(LLM)类型的填充,这样可以让他们训练得更快。

我已经实现了注意力屏蔽,我希望能够使用全部 512 个代币而不降低性能,因此我在进行微调时开启了注意力屏蔽。 小规模的微调往往会对模型造成损害,但由于我需要对蒸馏 schnell 进行大量训练才能让它正常工作,所以我觉得添加它可能没什么关系。

请注意,FLUX.1-schnell 只在 256 个标记上进行了训练,所以我的微调允许用户使用整个 512 个标记序列长度。

快速去除法,适合小型 GPU

由于 FLUX 很大,我完全避免进行任何全等级(正常,所有参数)微调。 我最初使用 quanto 以 int8 精度训练模型。 因为 LoKr 比 LoRA 更接近全等级微调,所以我从 6 亿个参数的 LoKr 开始。 刚开始时,损耗下降得非常慢,所以在尝试了将矩阵初始化到 LoKr 的代码后,我决定使用这个函数,它注入的噪声量只是所应用层的量级的一小部分。

def approximate_normal_tensor(inp, target, scale=1.0):tensor = torch.randn_like(target)desired_norm = inp.norm()desired_mean = inp.mean()desired_std = inp.std()current_norm = tensor.norm()tensor = tensor * (desired_norm / current_norm)current_std = tensor.std()tensor = tensor * (desired_std / current_std)tensor = tensor - tensor.mean() + desired_meantensor.mul_(scale)target.copy_(tensor)def init_lokr_network_with_perturbed_normal(lycoris, scale=1e-3):with torch.no_grad():for lora in lycoris.loras:lora.lokr_w1.fill_(1.0)approximate_normal_tensor(lora.org_weight, lora.lokr_w2, scale=scale)

这已经不是普通的 PEFT(参数有效微调)了,因为这会在开始时轻微扰动模型的所有权重。 经过测试,这似乎不会导致模型性能下降,而且它使我的 LoKr 的损失下降速度快了一倍,因此我在 scale=1e-3 时使用了它。 我用 bfloat16 训练了 LoKr 权重,并使用了 adamw_bf16 优化器。

利用 LoKr 选择更好的训练层

FLUX 是一个非常标准的变换器模型,但也有一些特殊之处。 其中一个特殊之处在于它们的 "规范 "层,该层包含非线性,因此除了在层中应用单一的规范化而不带任何权重(LayerNorm with elementwise_affine=False)外,它们的行为并不像规范。 当你进行微调并查看这些层的变化时,这些层似乎是变化最大的层之一。

关于变换器的另一个问题是,所有繁重的工作通常都是在网络的起始层和末端层完成的,因此你可以对这些层进行比其他层更多的微调。 当我观察扩散变换器中每个区块之间隐藏状态的余弦相似度时,它或多或少反映了在 LLMs 中观察到的情况。 因此,我向 LyCORIS 资源库(该资源库维护着一个 LoKr 实现)提出了一个拉动请求,该请求可以让您更轻松地选择单个层并在其上设置不同的因子,然后将我的 LoKr 重点放在这些层上。

Beta 时间步调度和时间步分层

扩散模型的一个问题是,它们是多任务模型(不同的时间步被视为不同的任务),而所有任务往往都与不同形状和大小的梯度以及不同程度的损失相关联。 如果批处理量很大,这并不是什么大问题,因此模型的时间步都会得到或多或少的均匀采样,梯度也会变得平滑,方差也会变小。 我还知道,schnell 模型在高噪声时间步采样时造成的图像失真问题较多,因此我做了两件事:

  1. 实施近似于原始 sigmoid 采样的 Beta 计划,让我将采样的时间步移到高噪声步,类似于 SD3 研究论文中的一些替代采样方法,但没有那么极端。
  2. 实施多级分层采样,以便在每一步中根据区域选择每批模型训练的时间步,这就像使用更大的批次规模一样,使梯度显著归一化。
from scipy.stats import beta as sp_betaalpha = 2.0
beta = 1.6
num_processes = self.accelerator.num_processes
process_index = self.accelerator.process_index
total_bsz = num_processes * bsz
start_idx = process_index * bsz
end_idx = (process_index + 1) * bsz
indices = torch.arange(start_idx, end_idx, dtype=torch.float64)
u = torch.rand(bsz)
p = (indices + u) / total_bsz
sigmas = torch.from_numpy(sp_beta.ppf(p.numpy(), a=alpha, b=beta)
).to(device=self.accelerator.device)

数据集

现在没有人再谈论他们训练的数据集是什么了,但我使用的是从网上公开的数据集,每个图像有 2-3 个 VLM 标题。 每张图片至少有一个短标题和一个长标题。 数据集多种多样,其中大部分没有审美选择,这有助于引导模型摆脱文本到图像模型的传统超优化图像生成方式。 很多人认为这看起来更糟糕,但我喜欢它能生成一堆不同的图像。 该模型在约 50 万张高分辨率图片上进行了随机正方形裁剪和随机长宽比裁剪的训练。

训练

我使用 5x 3090s 和大约 500,000 张图像开始了为期一个多月的训练。 我使用的是 600m LoKr,批量为 1(通过 DDP 有效批量为 5)。 之后,模型看起来还不错。 后来,我意外地获得了 7x H100 的计算资源,于是我将 PEFT 模型合并进来,开始在一个新的 LoKr 上以 3.2b 的参数进行训练。 在运行 7x H100 时,我的批处理规模为 6(通过 DDP,有效批处理规模为 42)。

图 1. LibreFLUX 和 OpenFLUX.1 的并排图像。 它们是使用扩散器制作的,LibreFLUX 的文本嵌入最大长度为 512 个标记,OpenFLUX.1 的文本嵌入最大长度为 256 个标记。 LibreFLUX 开启了注意力屏蔽,而 OpenFLUX 没有。 模型在不同分辨率下采样 35 步。 两者的负面提示都是 “模糊”。 所有推理都是通过 quanto 将变压器量化为 int8 来完成的。

在这里插入图片描述

A cinematic style shot of a polar bear standing confidently in the center of a vibrant nightclub. The bear is holding a large sign that reads ‘Open Source! Apache 2.0’ in one arm and giving a thumbs up with the other arm. Around him, the club is alive with energy as colorful lasers and disco lights illuminate the scene. People are dancing all around him, wearing glowsticks and candy bracelets, adding to the fun and electric atmosphere. The polar bear’s white fur contrasts against the dark, neon-lit background, and the entire scene has a surreal, festive vibe, blending technology activism with a lively party environment.

在这里插入图片描述

widescreen, vintage style from 1970s, Extreme realism in a complex, highly detailed composition featuring a woman with extremely long flowing rainbow-colored hair. The glowing background, with its vibrant colors, exaggerated details, intricate textures, and dynamic lighting, creates a whimsical, dreamy atmosphere in photorealistic quality. Threads of light that float and weave through the air, adding movement and intrigue. Patterns on the ground or in the background that glow subtly, adding a layer of complexity.Rainbows that appear faintly in the background, adding a touch of color and wonder.Butterfly wings that shimmer in the light, adding life and movement to the scene.Beams of light that radiate softly through the scene, adding focus and direction. The woman looks away from the camera, with a soft, wistful expression, her hair framing her face.

在这里插入图片描述

a highly detailed and atmospheric, painted western movie poster with the title text “Once Upon a Lime in the West” in a dark red western-style font and the tagline text “There were three men … and one very sour twist”, with movie credits at the bottom, featuring small white text detailing actor and director names and production company logos, inspired by classic western movie posters from the 1960s, an oversized lime is the central element in the middle ground of a rugged, sun-scorched desert landscape typical of a western, the vast expanse of dry, cracked earth stretches toward the horizon, framed by towering red rock formations, the absurdity of the lime is juxtaposed with the intense gravitas of the stoic, iconic gunfighters, as if the lime were as formidable an adversary as any seasoned gunslinger, in the foreground, the silhouettes of two iconic gunfighters stand poised, facing the lime and away from the viewer, the lime looms in the distance like a final showdown in the classic western tradition, in the foreground, the gunfighters stand with long duster coats flowing in the wind, and wide-brimmed hats tilted to cast shadows over their faces, their stances are tense, as if ready for the inevitable draw, and the weapons they carry glint, the background consists of the distant town, where the sun is casting a golden glow, old wooden buildings line the sides, with horses tied to posts and a weathered saloon sign swinging gently in the wind, in this poster, the lime plays the role of the silent villain, an almost mythical object that the gunfighters are preparing to confront, the tension of the scene is palpable, the gunfighters in the foreground have faces marked by dust and sweat, their eyes narrowed against the bright sunlight, their expressions are serious and resolute, as if they have come a long way for this final duel, the absurdity of the lime is in stark contrast with their stoic demeanor, a wide, panoramic shot captures the entire scene, with the gunfighters in the foreground, the lime in the mid-ground, and the town on the horizon, the framing emphasizes the scale of the desert and the dramatic standoff taking place, while subtly highlighting the oversized lime, the camera is positioned low, angled upward from the dusty ground toward the gunfighters, with the distant lime looming ahead, this angle lends the figures an imposing presence, while still giving the lime an absurd grandeur in the distance, the perspective draws the viewer’s eye across the desert, from the silhouettes of the gunfighters to the bizarre focal point of the lime, amplifying the tension, the lighting is harsh and unforgiving, typical of a desert setting, with the evening sun casting deep shadows across the ground, dust clouds drift subtly across the ground, creating a hazy effect, while the sky above is a vast expanse of pale blue, fading into golden hues near the horizon where the sun begins to set, the poster is shot as if using classic anamorphic lenses to capture the wide, epic scale of the desert, the color palette is warm and saturated, evoking the look of a classic spaghetti western, the lime looms unnaturally in the distance, as if conjured from the land itself, casting an absurdly grand shadow across the rugged landscape, the texture and detail evoke hand-painted, weathered posters from the golden age of westerns, with slightly frayed edges and faint creases mimicking the wear of vintage classics

在这里插入图片描述

Selfie of a woman in front of the eiffel tower, a man is standing next to her and giving a thumbs up

https://huggingface.co/jimmycarter/LibreFLUX

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

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

相关文章

数据结构与算法汇总整理篇——数组与字符串双指针与滑动窗口的联系学习及框架思考

数组 数组精髓&#xff1a;循环不变量原则 数组是存放在连续内存空间上的相同类型数据的集合&#xff0c;通过索引(下标)访问元素&#xff0c;索引从0开始 随机访问快(O(1)时间复杂度)&#xff1b;插入删除慢(需要移动元素)&#xff1b;长度固定(部分语言中可动态调整) 其存…

解决电脑突然没有声音

问题描述&#xff1a;电脑突然没有声音了&#xff0c;最近没有怎么动过系统&#xff0c;没有安装或者卸载过什么软件&#xff0c;也没有安装或者卸载过驱动程序&#xff0c;怎么就没有声音了呢&#xff1f; 问题分析&#xff1a;仔细观察&#xff0c;虽然音量按钮那边看不到什…

索引的使用以及使用索引优化sql

索引就是一种快速查询和检索数据的数据结构&#xff0c;mysql中的索引结构有&#xff1a;B树和Hash。 索引的作用就相当于目录的作用&#xff0c;我么只需先去目录里面查找字的位置&#xff0c;然后回家诶翻到那一页就行了&#xff0c;这样查找非常快&#xff0c; 一、索引的使…

[Linux网络编程]06-I/O多路复用策略---select,poll分析解释,优缺点,实现IO多路复用服务器

一.I/O多路复用 I/O多路复用是一种用于提高系统性能的 I/O 处理机制。 它允许一个进程&#xff08;或线程&#xff09;同时监视多个文件描述符&#xff08;可以是套接字、管道、终端设备等&#xff09;&#xff0c;等待这些文件描述符中出现读、写或异常状态。一旦有满足条件的…

ts:类的创建(class)

ts&#xff1a;类的创建&#xff08;class&#xff09; 一、主要内容说明二、例子class类的创建1.源码1 &#xff08;class类的创建&#xff09;2.源码1的运行效果 三、结语四、定位日期 一、主要内容说明 class创建类里主要有三部分组成&#xff0c;变量的声明&#xff0c;构…

ts:数组的常用方法(filter)

ts&#xff1a;数组的常用方法&#xff08;filter&#xff09; 一、主要内容说明二、例子filter方法&#xff08;过滤&#xff09;1.源码1 &#xff08;push方法&#xff09;2.源码1运行效果 三、结语四、定位日期 一、主要内容说明 ts中数组的filter方法&#xff0c;是筛选数…

【STM32】单片机ADC原理详解及应用编程

本篇文章主要详细讲述单片机的ADC原理和编程应用&#xff0c;希望我的分享对你有所帮助&#xff01; 目录 一、STM32ADC概述 1、ADC&#xff08;Analog-to-Digital Converter&#xff0c;模数转换器&#xff09; 2、STM32工作原理 二、STM32ADC编程实战 &#xff08;一&am…

C++STL之stack

1.stack的使用 函数说明 接口说明 stack() 构造空的栈 empty() 检测 stack 是否为空 size() 返回 stack 中元素的个数 top() 返回栈顶元素的引用 push() 将元素 val 压入 stack 中 pop() 将 stack 中尾部的元素弹出 2.stack的模拟实现 #include<vector> namespace abc { …

LeetCode 热题 100之普通数组

1.最大子数组和 思路分析&#xff1a;这个问题可以通过动态规划来解决&#xff0c;我们可以使用Kadane’s Algorithm&#xff08;卡登算法&#xff09;来找到具有最大和的连续子数组。 Kadane’s Algorithm 的核心思想是利用一个变量存储当前的累加和 currentSum&#xff0c;并…

MATLAB生物细胞瞬态滞后随机建模定量分析

&#x1f3af;要点 基于随机动态行为受化学主方程控制&#xff0c;定量分析单细胞瞬态效应。确定性常微分方程描述双稳态和滞后现象。通过随机性偏微分方程描述出暂时性滞后会逐渐达到平稳状态&#xff0c;并利用熵方法或截断方法计算平衡收敛速度的估计值。随机定量分析模型使…

python查询并安装项目所依赖的所有包

引言 如果需要进行代码的移植&#xff0c;肯定少不了在另一台pc或者服务器上进行环境的搭建&#xff0c;那么首先是要知道在已有的工程的代码中用到了哪些包&#xff0c;此时&#xff0c;如果是用人工去一个一个的代码文件中去查看调用了哪些包&#xff0c;这个工作甚是繁琐。…

C++《vector的模拟实现》

在之前《vector》章节当中我们学习了STL当中的vector基本的使用方法&#xff0c;了解了vector当中各个函数该如何使用&#xff0c;在学习当中我们发现了vector许多函数的使用是和我们之前学习过的string类的&#xff0c;但同时也发现vector当中一些函数以及接口是和string不同的…

H5实现PDF文件预览,使用pdf.js-dist进行加载

H5实现PDF文件预览&#xff0c;使用pdf.js-dist进行加载 一、应用场景 在H5平台上预览PDF文件是在原本已经开发完成的系统中新提出的需求&#xff0c;原来的系统业务部门是在PC端进行PDF的预览与展示&#xff0c;但是现在设备进行了切换&#xff0c;改成了安卓一体机进行文件…

基于neo4j的课程资源生成性知识图谱

你是不是还在为毕业设计苦恼&#xff1f;又或者想在课堂中进行知识的高效管理&#xff1f;今天给大家分享一个你一定会感兴趣的技术项目——基于Neo4j的课程资源生成性知识图谱&#xff01;&#x1f4a1; 这套系统通过知识图谱的形式&#xff0c;将课程资源、知识点和学习路径…

前端页面样式没效果?没应用上?

当我们在开发项目时会有很多个页面、相同的标签&#xff0c;也有可能有相同的class值。样式设置的多了&#xff0c;分不清哪个是当前应用的。我们可以使用网页的开发者工具。 在我们开发的网页中按下f12或&#xff1a; 在打开的工具中我们可以使用元素选择器&#xff0c;单击我…

渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下

day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过 一、时间注入 SQL注入时间注入&#xff08;也称为延时注入&#xff09;是SQL注入攻击的一种特殊形式&#xff0c;它属于盲注&#xff08;Blind SQL Injection&#xff09;的一种。在盲注中&#xff0c;攻击…

基于丑萌气质狗--C#的sqlserver学习

#region 常用取值 查询List<string> isName new List<string> { "第一", "第二", "第三", "第四" }; List<string> result isName.Where(m > m "第三").ToList();MyDBContext myDBnew MyDBContext(…

web3对象如何连接以太网络节点

实例化web3对象 当我们实例化web3对象&#xff0c;我们一般开始用本地址&#xff0c;如下 import Web3 from web3 var web3 new Web3(Web3.givenProvider || ws://localhost:5173)我们要和以太网进行交互&#xff0c;所以我们要将’ws://localhost:5173’的本地地址换成以太…

如何在短时间内入门并掌握深度学习?

如何在短时间内快速入门并掌握深度学习&#xff0c;是很多读者的困惑——晦涩难懂的数学 知识、复杂的算法、烦琐的编程……深度学习虽然让无数读者心怀向往&#xff0c;却也让不少人望而生畏&#xff0c;深感沮丧&#xff1a;时间没少花&#xff0c;却收效甚微。 如何才能更好…

python对文件的读写操作

任务:读取文件夹下的批量txt数据&#xff0c;并将其写入到对应的word文档中。 txt文件中包含&#xff1a;编号、报告内容和表格数据。写入到word当中&#xff1a;编号、报告内容、表格数据、人格雷达图以及对应的详细说明&#xff08;详细说明是根据表格中的标识那一列中的加号…