扩散模型,快速入门和基于python实现的一个简单例子(复制可直接运行)

提示:内容丰富,收藏本文,以免忘记哦

文章目录

  • 一、扩散模型
  • 二、一个简单的迭代式扩散模型的例子
      • 温度扩散模型
      • python代码实现
      • 差分近似模拟拉普拉斯算子
  • 三、扩散模型和深度学习进行结合
      • 简介
      • 用python和torch的代码实现
  • 四、扩散模型与生成模型
      • 第二类扩散模型(重点)
      • 区别
      • 示例
  • 五、深度学习结合扩散模型和PINN方法的区别与联系
      • 却别与联系
      • 两者结合的简单例子
      • 结合起来的python代码
      • 两者结合的优势
  • 六、总结


一、扩散模型

本文要记录的大概内容:

扩散模型(Diffusion Model) 是一种用于描述物质或信息在空间中传播和扩散的数学模型。它广泛应用于物理学、生态学、社会科学等领域,用于研究和解释各种扩散现象的行为和特征。

扩散模型基于扩散方程(Diffusion Equation),它描述了物质或信息的扩散过程。扩散方程通常是一个偏微分方程,其中考虑了扩散物质的浓度、时间和空间变化。其一般形式如下:

∂C/∂t = D∇²C

其中,∂C/∂t 表示浓度随时间的变化率,D 是扩散系数,∇² 表示拉普拉斯算子,C 表示物质或信息的浓度分布。

扩散模型的基本假设是:

物质或信息会沿着浓度梯度的方向从高浓度区域向低浓度区域传播,直到达到均衡状态。
该模型考虑了扩散物质的浓度梯度和扩散速率,并可以预测和分析扩散过程中的行为。

在不同领域中,扩散模型具有不同的应用。例如,在物理学中,扩散模型可以用于描述热量、质量和电荷的传导过程;在生态学中,可以用于研究物种的扩散和种群的分布;在社会科学中,可以用于分析信息传播、疾病传播和意见形成等。

扩散模型通常使用数值方法进行求解,如有限元法、有限差分法或蒙特卡洛模拟等。这些方法可以模拟和预测扩散过程中的行为,并提供对系统动力学的理解。

扩散模型是一种重要的数学工具,用于研究和解释物质或信息在空间中传播和扩散的过程。它在多个学科领域中都有广泛的应用,为我们理解和预测自然和社会现象提供了有价值的工具。


以下是本篇文章正文内容,下面案例可供参考

二、一个简单的迭代式扩散模型的例子

温度扩散模型

简介:一个简单的扩散模型的例子是在一维空间中模拟热量的扩散过程。我们可以假设一个细长的杆,其中一端受到热源的加热,而另一端保持冷却。我们的目标是模拟热量如何在杆内扩散和分布。

python代码实现

注意,本代码中不包含任何深度学习框架或算法

import numpy as np
import matplotlib.pyplot as plt

# 定义模型参数
length = 10  # 杆的长度
num_points = 100  # 空间离散点数
dx = length / (num_points - 1)  # 离散点之间的间距
num_steps = 1000  # 时间步数
dt = 0.001  # 时间步长
diffusion_coefficient = 0.1  # 扩散系数

# 初始化温度分布
temperature = np.zeros(num_points)
temperature[0] = 1.0  # 初始条件:热源在一端

# 进行扩散模拟
for step in range(num_steps):
    new_temperature = temperature.copy()

    for i in range(1, num_points - 1):
        # 使用离散扩散方程进行更新
        new_temperature[i] = temperature[i] + diffusion_coefficient * (
            temperature[i+1] - 2 * temperature[i] + temperature[i-1]) * dt / dx**2

    temperature = new_temperature

# 绘制结果
x = np.linspace(0, length, num_points)
plt.plot(x, temperature, color='blue', linewidth=2)
plt.xlabel('Position')
plt.ylabel('Temperature')
plt.title('Diffusion of Heat')

# 添加网格线
plt.grid(True, linestyle='--', linewidth=0.5, alpha=0.7)

# 调整坐标轴范围和刻度
plt.xlim(0, length)
plt.ylim(0, 1.2)
plt.xticks(np.arange(0, length+1, 2))
plt.yticks(np.arange(0, 1.3, 0.2))

plt.show()

在这个示例中,我们通过离散化空间和时间来模拟热量的扩散过程。代码中的参数可以根据需要进行调整,例如杆的长度、离散点数、时间步数和扩散系数。通过迭代更新温度分布,我们可以观察到热量如何从热源逐渐扩散到整个杆上,并最终达到稳定的温度分布。
tu

图1. 该图是扩散模型的结果position代表位置也就是长度,Temperature代表温度。

差分近似模拟拉普拉斯算子

在给出的代码中,并没有直接使用拉普拉斯算子。实际上,我们在离散化扩散方程时使用了近似的差分形式来模拟拉普拉斯算子。

具体来说,以下代码片段中的部分实现了离散化的扩散方程:

for step in range(num_steps):
    new_temperature = temperature.copy()

    for i in range(1, num_points - 1):
        # 使用离散扩散方程进行更新
        new_temperature[i] = temperature[i] + diffusion_coefficient * (
            temperature[i+1] - 2 * temperature[i] + temperature[i-1]) * dt / dx**2

    temperature = new_temperature

在这段代码中,我们使用了差分形式近似了拉普拉斯算子。
具体来说:

temperature[i+1] - 2 * temperature[i] + temperature[i-1]

部分表示了温度在位置i处的二阶导数。通过乘以diffusion_coefficient、dt和除以dx**2,我们将差分形式应用于离散化的扩散方程。

这种差分形式的近似实际上是一种常用的方法,用于在离散空间中近似模拟微分方程中的导数项。在这个例子中,我们通过差分形式近似了拉普拉斯算子的作用,以模拟热量在空间中的扩散过程


三、扩散模型和深度学习进行结合

简介

当结合扩散模型和深度学习时,一种常见的方法是使用卷积神经网络(Convolutional Neural Network,简称CNN)来学习扩散过程中的模式和规律。以下是一个简单的例子,使用Python和PyTorch来实现扩散模型与深度学习的结合。
这个代码实现了一个使用卷积神经网络(CNN)结合扩散模型的预测模型。具体来说,它使用CNN学习了扩散模型中的温度分布变化规律,并通过训练来预测给定初始温度分布下的最终温度分布。

该模型的结构如下:

输入层:输入是一个一维的温度分布数据,表示为形状为 (1, 1, num_points) 的张量,其中 num_points 是空间离散点数。
卷积层1:使用3个卷积核,输入通道数为1,输出通道数为16,卷积核大小为3,填充为1,激活函数为ReLU。
卷积层2:使用3个卷积核,输入通道数为16,输出通道数为1,卷积核大小为3,填充为1,不使用激活函数。
输出层:输出是预测的最终温度分布,形状与输入相同。

模型的训练过程如下:

  1. 首先,将初始温度分布和目标温度分布转换为PyTorch张量,作为训练数据。
  2. 初始化模型、优化器和损失函数(均方误差损失)。
  3. 迭代训练模型:对于每个训练步骤,将模型的预测结果与目标温度分布计算损失,并通过反向传播来更新模型参数。
  4. 在训练完成后,使用训练好的模型对初始温度分布进行预测,得到最终温度分布的预测结果。
  5. 最后,通过可视化将目标温度分布和预测结果进行比较。

总结起来,这个模型使用卷积神经网络来学习扩散过程中的温度分布变化,通过训练来预测给定初始温度分布下的最终温度分布。

用python和torch的代码实现

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt

# 模型参数
length = 10
num_points = 100
dx = length / (num_points - 1)
num_steps = 1000
dt = 0.001
diffusion_coefficient = 0.1

# 生成训练数据
x = np.linspace(0, length, num_points)
temperature_init = np.sin(np.pi * x / length)  # 初始温度分布为正弦函数
temperature_target = np.exp(-x)  # 目标温度分布为指数函数

# 将数据转换为PyTorch张量
temperature_init = torch.tensor(temperature_init, dtype=torch.float).view(1, 1, -1)
temperature_target = torch.tensor(temperature_target, dtype=torch.float).view(1, 1, -1)

# 定义卷积神经网络模型
class DiffusionModel(nn.Module):
    def __init__(self):
        super(DiffusionModel, self).__init__()
        self.conv1 = nn.Conv1d(1, 16, kernel_size=3, padding=1)
        self.conv2 = nn.Conv1d(16, 1, kernel_size=3, padding=1)

    def forward(self, x):
        x = torch.relu(self.conv1(x))
        x = self.conv2(x)
        return x

# 初始化模型和优化器
model = DiffusionModel()
optimizer = optim.Adam(model.parameters(), lr=0.01)
loss_fn = nn.MSELoss()

# 训练模型
for step in range(num_steps):
    optimizer.zero_grad()
    temperature_pred = model(temperature_init)
    loss = loss_fn(temperature_pred, temperature_target)
    loss.backward()
    optimizer.step()

    # 打印损失
    if (step+1) % 100 == 0:
        print(f"Step [{step+1}/{num_steps}], Loss: {loss.item()}")

# 使用训练好的模型进行预测
with torch.no_grad():
    temperature_pred = model(temperature_init)

# 可视化结果
temperature_pred = temperature_pred.squeeze().numpy()
plt.plot(x, temperature_target.squeeze().numpy(), label='Target')
plt.plot(x, temperature_pred, label='Prediction')
plt.xlabel('Position')
plt.ylabel('Temperature')
plt.title('Diffusion Model with CNN')
plt.legend()
plt.show()

最终结果如下:
在这里插入图片描述


四、扩散模型与生成模型

第二类扩散模型(重点)

第二类 扩散模型(Diffusion Models,DM) 是一种生成模型,其基本思想是通过逐步添加噪声来生成数据,并通过反向过程逐步还原数据。它的本质是一个马尔可夫架构,其中训练过程利用了深度学习的反向传播(BP)算法,但它更注重于数学层面的创新。

在扩散模型中,通过迭代地应用噪声函数,数据逐渐变得模糊或含有噪声。然后,通过反向推理的方式,模型尝试逐步还原每一步加入的噪声,从而还原出无噪声的原始数据。这个过程可以看作是在马尔可夫链中进行的,每一步的噪声预测依赖于前一步的状态。

与传统的生成模型相比,扩散模型在训练过程中使用了深度学习的反向传播算法,通过最小化还原后数据与原始数据之间的差异来优化模型参数。这使得模型能够学习到数据的概率分布,并生成具有与原始数据相似特征的样本。

尽管扩散模型使用了深度学习的反向传播算法进行训练,但其核心思想是基于数学层面的创新,通过马尔可夫架构和逐步还原的方式生成数据。它在图像生成、图像修复和数据增强等任务中展现了出色的性能和创新性。

区别

与提到的在一维空间中模拟热量扩散的例子,它是一种基于物理学的扩散模型,特别是热传导方程。这个模型描述了热量在一维空间中的传播过程,它是一种连续性模型。

与此相比,扩散模型(Diffusion Models,DM)是指一类生成模型,如扩散变分自编码器(Diffusion Variational Autoencoders,Diffusion VAEs)或扩散生成对抗网络(Diffusion Generative Adversarial Networks,Diffusion GANs)。这些模型使用了一种基于深度学习的方法,通过逆扩散过程生成数据样本。

虽然这两种模型中都存在“扩散”这个词,但它们的概念和应用是不同的。物理学中的扩散模型用于描述物质或能量在空间中的传播,而生成模型中的扩散模型用于生成数据样本。

因此,在你提到的例子中,我们可以将其称为热传导模型或热传导方程,而不是生成模型中的扩散模型。这两类模型有不同的目的和方法,应用于不同的领域和问题。

示例

一个常见的例子是扩散变分自编码器(Diffusion Variational Autoencoders,Diffusion VAEs)。下面是一个简单的用Python实现的扩散变分自编码器的例子:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.distributions import Normal

# 定义扩散变分自编码器的类
class DiffusionVAE(nn.Module):
    def __init__(self, input_dim, hidden_dim, latent_dim):
        super(DiffusionVAE, self).__init__()
        
        # 编码器
        self.encoder = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, latent_dim),
        )
        
        # 解码器
        self.decoder = nn.Sequential(
            nn.Linear(latent_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, input_dim),
            nn.Sigmoid(),
        )
        
    def forward(self, x):
        # 编码
        z = self.encoder(x)
        
        # 生成随机噪声
        epsilon = torch.randn_like(z)
        
        # 逆扩散过程
        reconstructed_x = self.decoder(z + epsilon)
        
        return reconstructed_x, z

# 定义训练函数
def train(model, data, num_epochs, batch_size):
    criterion = nn.BCELoss()
    optimizer = optim.Adam(model.parameters(), lr=0.001)
    
    num_batches = len(data) // batch_size
    
    for epoch in range(num_epochs):
        for batch_idx in range(num_batches):
            # 获取当前批次的数据
            batch = data[batch_idx * batch_size : (batch_idx + 1) * batch_size]
            
            # 前向传播
            reconstructed_batch, z = model(batch)
            
            # 计算重构损失和KL散度
            reconstruction_loss = criterion(reconstructed_batch, batch)
            kl_divergence = 0.5 * torch.sum(z.pow(2) - torch.log(1 + z.pow(2)))
            
            # 总损失
            loss = reconstruction_loss + kl_divergence
            
            # 反向传播和优化
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
            
        # 打印当前epoch的损失
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

# 示例数据
data = torch.randn(1000, 100)

# 创建扩散变分自编码器的实例
model = DiffusionVAE(input_dim=100, hidden_dim=256, latent_dim=64)

# 训练模型
train(model, data, num_epochs=10, batch_size=64)

这个例子展示了如何使用PyTorch实现一个简单的扩散变分自编码器。模型包括一个编码器和一个解码器,通过逆扩散过程进行训练。训练过程中,使用重构损失和KL散度来衡量重构的准确性和潜在空间的正则化。最终,模型在训练数据上逐渐学习生成数据样本。


五、深度学习结合扩散模型和PINN方法的区别与联系

却别与联系

深度学习结合扩散模型和PINN(Physics-Informed Neural Networks)方法都是用于建模和求解物理系统的方法。它们在目标和实现方式上存在一些差异和联系。

目标:

  1. 深度学习结合扩散模型的目标是通过使用深度神经网络学习扩散过程中的模式和规律,从给定的初始条件预测最终的温度分布。它依赖于大量的数据来训练神经网络,并可以通过反向传播算法进行优化。

  2. PINN方法的目标是将已知的物理方程(如扩散方程)作为约束条件嵌入到神经网络中,通过优化神经网络参数来满足这些物理方程的约束条件。它利用神经网络的非线性拟合能力来逼近物理系统的解,并通过优化算法(如梯度下降)来调整网络参数。

实现方式:

  1. 深度学习结合扩散模型使用卷积神经网络等深度学习模型,通过训练数据来学习扩散过程中的模式和规律。它主要关注于数据驱动的建模和预测,不需要显式地使用物理方程。

  2. PINN方法将物理方程嵌入到神经网络的结构中,通过网络的输入和输出来表示物理系统的状态和约束条件。它通过优化网络参数来同时满足数据和物理方程的约束条件,从而得到物理系统的解。PINN方法更注重于使用物理方程进行建模和求解。
    优点和适用性:

  3. 深度学习结合扩散模型在处理复杂的非线性扩散过程时具有较强的拟合能力和灵活性。它适用于复杂的实际问题,尤其是当物理方程难以解析求解或者缺乏准确的物理参数时。

  4. PINN方法将物理方程作为先验知识嵌入到神经网络中,可以更好地利用物理系统的结构和特性。它适用于需要准确的物理解释和较少训练数据的问题,可以提供更好的泛化性能。

需要注意的是,深度学习结合扩散模型和PINN方法并不是相互排斥的方法,而是可以互补使用的。在实际应用中,根据问题的特点和需求,可以选择合适的方法或将它们结合起来,以得到更好的建模和求解效果。

两者结合的简单例子

一个简单的例子是通过结合深度学习和PINN方法来求解具有非线性边界条件的扩散方程。在这个例子中,我们将使用深度学习来学习扩散过程中的模式和规律,并将物理方程的约束条件嵌入到神经网络中。

考虑一个一维扩散问题,扩散方程的形式为:

∂u/∂t = ∂²u/∂x²

其中,u是温度分布,t是时间,x是空间。

我们将在一个区域[0, L]上求解该方程,并假设边界条件为非线性的。具体而言,我们定义边界条件为:

u(0, t) = sin(t)
u(L, t) = exp(-t)

我们希望通过深度学习和PINN方法来求解在给定初始条件:

u(x, 0) = sin(πx/L)

的情况下,扩散方程的解。

结合起来的python代码

在这个例子中,我们首先定义了一个扩散方程模型,使用多层感知机(MLP)来近似扩散方程的解。然后,我们构建了训练数据,包括空间和时间上的网格点以及对应的精确解。接下来,我们定义了PINN模型,其中包含了MLP结构,并定义了损失函数和优化器。在训练过程中,我们使用自动微分计算了模型的梯度,并根据扩散方程的物理约束计算了残差。最后,我们使用训练好的模型进行预测,并将预测结果可视化。

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt

# 定义扩散方程模型
class DiffusionModel(nn.Module):
    def __init__(self):
        super(DiffusionModel, self).__init__()
        self.fc = nn.Sequential(
            nn.Linear(2, 10),
            nn.ReLU(),
            nn.Linear(10, 10),
            nn.ReLU(),
            nn.Linear(10, 1)
        )

    def forward(self, x):
        return self.fc(x)

# 构建训练数据
L = 1.0
num_points = 100
t_initial = 0.0
t_final = 1.0
x = np.linspace(0, L, num_points)
t = np.linspace(t_initial, t_final, num_points)
x_mesh, t_mesh = np.meshgrid(x, t)
x_flat = x_mesh.flatten()
t_flat = t_mesh.flatten()
u_exact = np.sin(np.pi * x_mesh / L) * np.exp(-t_mesh)
u_exact = u_exact.flatten()

# 转换为张量
x_train = torch.tensor([x_flat, t_flat], dtype=torch.float).t().requires_grad_(True)
u_train = torch.tensor(u_exact, dtype=torch.float).unsqueeze(1)

# 定义PINN模型
model = DiffusionModel()

# 定义损失函数
loss_fn = nn.MSELoss()

# 定义优化器
optimizer = optim.Adam(model.parameters(), lr=0.01)

# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
    optimizer.zero_grad()

    # 前向传播
    u_pred = model(x_train)
    x_grad = torch.autograd.grad(u_pred, x_train, grad_outputs=torch.ones_like(u_pred), create_graph=True)[0]
    u_t = x_grad[:, 1].unsqueeze(1)
    u_x = x_grad[:, 0].unsqueeze(1)
    u_xx = torch.autograd.grad(u_x, x_train, grad_outputs=torch.ones_like(u_pred), create_graph=True)[0][:, 0].unsqueeze(1)

    # 物理约束
    residual = u_t - u_xx

    # 计算损失
    loss = loss_fn(residual, torch.zeros_like(residual)) + loss_fn(u_pred[0], u_train[0])

    # 反向传播和优化
    loss.backward()
    optimizer.step()

    if (epoch + 1) % 100 == 0:
        print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}")

# 使用训练好的模型进行预测
with torch.no_grad():
    u_pred = model(x_train)

# 可视化结果
u_pred = u_pred.view(num_points, num_points).numpy()
plt.imshow(u_pred, extent=[0, L, t_initial, t_final], origin='lower', aspect='auto')
plt.colorbar(label='Temperature')
plt.xlabel('Position')
plt.ylabel('Time')
plt.title('Diffusion Equation Solution')
plt.show()

输出结果:
在这里插入图片描述

两者结合的优势

通过结合深度学习和PINN方法,我们可以在不需要显式求解扩散方程的情况下,通过学习数据和物理方程的约束条件来预测扩散过程中的温度分布。深度学习部分可以帮助我们学习扩散过程中的模式和规律,而PINN方法则确保模型满足扩散方程的物理约束条件。这种结合可以提高模型的准确性和泛化能力,尤其在面对复杂的非线性扩散问题时具有优势。


六、总结

扩散模型是一种数学模型,用于描述物质在空间中的传播和扩散过程。它基于扩散方程,该方程描述了物质浓度或温度在时间和空间上的变化。扩散模型假设物质沿着浓度或温度梯度的方向传播,并受到浓度差或温度差的驱动。通过解析或数值方法求解扩散方程,可以预测物质在不同时间和位置上的分布,从而在许多领域中应用于理解和解决扩散相关的问题,如化学反应、热传导、生物医学等。

深度学习结合扩散模型和PINN方法可以用于求解物理系统,其中深度学习通过学习数据模式来预测结果,PINN方法将物理方程约束嵌入神经网络中。它们的结合可以提高模型的准确性和泛化能力,特别适用于复杂非线性问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM GC算法

一, 垃圾回收分类: 按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。 按工作模式分,可以分为并发垃圾回收器和独占式垃圾回收器 按碎片处理方式分,可以分为压缩式垃圾回收器和非压缩式垃圾回收器按工作的内存区间分,又可分为…

C语言盐水的故事(ZZULIOJ1214:盐水的故事)

题目描述 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下;然后滴二滴,停一 下;再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升&…

基于springBoot+mysql实现的竞赛管理系统

基于springBootmysql实现的竞赛管理系统,演示地址:系统登录 - 软件学院比赛管理系统 管理员账号:1,密码:1 包括比赛管理,队伍管理,教师管理,经费管理,学生管理,比赛结果,…

目前工资最高的几家外包公司汇总!(2023最新版)

最近,很多小伙伴问:只有外包的 offer 能去吗? 大环境不行,面试太少了,很多本科生想进外包都没机会。 非常时期,不需要在意那么多,外包作为过渡也是没问题的,很多外包其实比小公司还…

杂记 | 使用Docker安装并配置MongoDB以支持事务(单副本,并解决了证书文件错误的问题)

文章目录 00 安装前的准备01 创建Docker Compose文件02 设置证书文件03 启动MongoDB04 初始化副本集和创建用户05 验证安装 00 安装前的准备 在开始之前,确保已经安装了Docker,本文基于Docker Compose进行示范,没有装Docker Compose也可将其…

LeetCode算法题解(动态规划)|LeetCode198. 打家劫舍、LeetCode213. 打家劫舍 II、LeetCode337. 打家劫舍 III

一、LeetCode198. 打家劫舍 题目链接:198. 打家劫舍 题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的…

docker安装Sentinel zipkin

文章目录 引言I Sentinel安装1.1 运行容器1.2 DOCKERFILE 参考1.3 pom 依赖1.4 .yml配置(整合springboot)II 资源保护2.1 Feign整合Sentinel2.2 CommonExceptionAdvice:限流异常处理类III zipkin引言 消息服务和请求第三方服务可不配置Sentinel。 I Sentinel安装 Sentinel …

Fabric:搭建自定义网络

Hyperledger Fabric: V2.5.4 写在最前 从本篇博客开始,将陆续介绍使用Fabric搭建自定义网络及部署执行链码的过程。本篇主要介绍如何搭建网络。   由于前文在安装Fabric的时候,已经将目录fabric-samples/bin加入到了环境变量PATH中,所以正文…

Java 的第二十章:多线程

创建线程 继承Thread 类 Thread 类时 java.lang 包中的一个类,从类中实例化的对象代表线程,程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行,任务是指线程在启动时执行的工作,start() 方法启动线程&am…

如何在自定义数据集上训练 YOLOv8 实例分割模型

在本文中,我们将介绍微调 YOLOv8-seg 预训练模型的过程,以提高其在特定目标类别上的准确性。Ikomia API简化了计算机视觉工作流的开发过程,允许轻松尝试不同的参数以达到最佳结果。 使用 Ikomia API 入门 通过 Ikomia API,我们只需…

C++ : 初始化列表 类对象作为类成员

传统方式初始化 C 提供了初始化列表语法,用来初始化属性 初始化列表 语法: 构造函数():属性1(值1), 属性2(值2)... {} class Person { public://传统方式初始化 Person(int a, int b, int c) {m_A a;m_B b;m_C c…

生成工具集合

文章目录 前言一、SVG 波浪图片生成器二、背景图片生成器三、布局/形状分隔线四、Neumorphism五、动画按钮六、开发工具七、Interactions(图片轮播)八、CSS Gradient (渐变属性)九、获取波浪十、平滑阴影十一、CSS Clip-path Make…

图像重定向Image Retarget

1、什么是图像重定向? 图像重定向旨在调整图像的尺寸和比例,以适应不同的显示设备或布局要求。 它可以通过添加或删除像素来改变图像的宽度和高度,同时保持图像的内容和结构的相对比例。 这种技术可以通过保持图像的关键特征和结构来最大程度…

Java-多线程基本知识学习总结

多线程 前言一、线程的创建1、继承Thread类2、实现Runnable接口 二、线程的生命周期三、操作线程的方法1、线程的休眠2、线程的加入3、线程的礼让4、线程的优先级 四、线程同步End 前言 Java是支持多线程的编程语言,所谓多线程就是程序能够同时完成多种操作。 计算…

Linux中执行java命令报错:cannot execute binary file: Exec format error

网上很多文章 都是说操作系统和JDK,32位和64位不兼容问题 当你非常确定你的操作系统是64位,并且JDK也是64位的时候 或者非常确定你的操作系统是32位,并且JDK也是32位的时候 怎么办? 使用以下命令,查看你的操作系统…

IDEA插件推荐

今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,支持三大功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试;生成API目录树,双击即可快速定位API定义的代码…非常好用!而且完全免费&…

MySQL进阶-InnoDB引擎

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、语雀 、Github 🎉公众号:猫十二懿 一、InnoDB 逻辑存储引擎 InnoDB的逻辑存储结构如下图所示: 大小关系:表空间(Tablespace&#xff0…

消息队列MQ

文章目录 同步通讯和异步通讯什么是MQ?一.RabbitMQ概述二.SpringAMQP1.Work Queue 工作队列2.发布订阅-Fanout Exchange3.发布订阅-DirectExchange4.发布订阅-TopicExchange 3.消息转换器 同步通讯和异步通讯 其实在之前的JAVASE中就已经在线程一章中接触过了同步和异步的概念…

实战:登录接口测试用例举例

以下是一些可能的登录接口测试用例(使用Python编写的): 1. 测试正常情况下的登录接口: # 请求URL url "https://example.com/api/login" # 请求参数 username "testuser" password "testpassword&q…

数据治理框架和成熟度模型

数据治理成熟度模型 一个企业的数据治理能力越高,所享受到数据治理带来的价值也会越多,如增加收入、减少成本、降低风险等。于是,很多企业想要准确地评估本公司的数据治理能力,可以利用数据治理成熟度模型方法,包括 D…