恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

高斯扩散模型原理与工程实践:从加噪去噪到DDIM加速

  • 首页
  • 资讯中心
  • /
  • 高斯扩散模型原理与工程实践:从加噪去噪到DDIM加速

相关资讯

完全平方数问题全解:动态规划、BFS与四平方定理 2026/10/12 12:34:38
Python ARIMA销量预测实战:从平稳性差分到模型定阶与预测 2026/10/12 12:34:38
蓝桥杯Python抽奖题:优惠券收集问题的期望与取模实现 2026/10/12 12:34:38

最新资讯

PS5通用折腾指南:从存储扩展到系统设置的AnyPS5实用方案
能源价格风险管理MATLAB复现:跳跃扩散模型与VaR/CVaR实战
多代理协作实战:从零素材到3D动作游戏原型
2022 CSP-S复赛题解:模型简化与竞赛优化策略
Python中文NLP实战:从分词、特征工程到文本分类与情感分析全链路
MATLAB评价与预测模型实战:从AHP、熵权法到TOPSIS与时间序列

今日推荐

Debian新手入门:从部署到日常操作的完整指南
MongoDB复制集扩缩容实战:从rs.add到选主事故复盘
条形码目标检测数据集实战:从YOLOv8训练到部署

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

高斯扩散模型原理与工程实践:从加噪去噪到DDIM加速

发布时间:2026/10/12 12:34:38
高斯扩散模型原理与工程实践:从加噪去噪到DDIM加速 简介高斯扩散模型是环境科学中用于大气污染物扩散预测的经典数学模型特别适合环评人员、环境专业学生及从事空气质量建模的从业者学习使用。文档系统梳理了模型的核心假设包括污染物浓度在垂直与水平方向呈正态分布、风速均匀、源强连续均匀、质量守恒及忽略侧向扩散等并推导了高架源地面浓度的简化公式涵盖风速、扩散参数、源高、距离等关键变量。资源为1个doc文档整体大小仅76KB内容精炼便于快速查阅。目前已有2981人学习下载。通过这份资料读者可以掌握高斯扩散模式的基本适用条件与计算框架理解其在环境影响评价、污染源排放控制中的用途同时也能认识到模型在复杂气象、非点源和山区场景下的局限性为后续选用更高级模型或进行参数校准打下基础。1. 高斯扩散模型是什么先学会破坏再学会重建做图像生成任务时最常见的思路是让网络直接照着一堆训练图去画。高斯扩散模型走的是另一条路线先把一张图逐步加高斯噪声加到面目全非再训练网络把这个过程倒着走回去。这里的“高斯”不是装饰词它决定了破坏过程能否用解析公式一笔带过也决定了反向重建在数学上是否稳定。如今图像、音频、时间序列等生成任务里都绕不开这个模型对从业者最直接的价值是训练比 GAN 稳定采样效果可以由步数控制新手也能用一份最小代码跑通并看到真实生成结果。适合正在做生成方向、想从对抗生成切到扩散思路的人也适合想把扩散器接到自己业务数据上的算法工程师。2. 高斯扩散模型原理拆解前向加噪、反向去噪与训练目标2.1 前向过程高斯噪声怎么让破坏变成闭合公式扩散模型的前向过程看起来是“拿着图一步步加噪”真正让它可用的是一个概率论巧合高斯分布对加权求和封闭。两个独立高斯随机变量的线性组合仍然是高斯所以从任意原始图 x0 出发走到第 t 步的状态可以一次性写成x_t sqrt(alpha_bar_t) * x0 sqrt(1 - alpha_bar_t) * epsilon其中 epsilon 是标准高斯噪声alpha_bar_t 是前 t 步保留系数的累积乘积。这句话的意义很实际我不需要真的迭代 t 次加噪只要给定 x0 和随机采样出的 epsilon一次采样就能拿到任意时刻 t 的中间状态而且这个分布是精确的不是近似。训练时每个样本的时间步 t 是随机抽取的因此“能否快速采样任意 t 的中间状态”直接决定了训练能不能开大规模并行。为什么不用均匀噪声或椒盐噪声均匀分布的问题在于两个均匀变量之和不再是均匀分布卷积后密度函数会变成三角形甚至更复杂的形状写不出简洁的闭合公式椒盐噪声等于往图像里插入离群点反向过程会非常不稳定。高斯噪声是少数几个既能解析表达、又能在高维空间里代表“完全随机”的分布。中心极限定理还暗示多步叠加后几乎所有有界噪声都会趋向高斯所以选高斯既是主动选择也是必然结果。前向过程里有两个需要拍板的参数噪声表 beta_t 和时间步总数 T。beta_t 决定每一步的噪声强度。我一般用线性表从一个最小值升到最大值例如从 1e-4 到 0.02T 取 1000。后来有同事用了余弦表让加噪在早中期的节奏更均匀高分辨率任务上收敛更省心。选表的思路可以记住一句宁可让加噪偏慢不要偏快。加噪快了中间状态过早失去结构网络在大部分时间步上看到的都是接近纯噪声的输入学到的东西很有限。2.2 反向过程网络在预测什么三种目标怎么选前向过程是确定公式反向过程的难点在于贝叶斯后验 p(x_{t-1}|x_t) 我们并不知道。扩散模型给了一个实用近似把反向分布也当成高斯分布训练网络去拟合它的均值。拟合目标有几种等价形式工程里最常见的三个是预测噪声 epsilon、预测原图 x0、预测速度 v。这三种目标对训练难度的体感差异很明显。预测噪声是目前的主flow默认项因为在前向公式里 epsilon 是“随机扰动”部分回归目标的尺度不会随图像明暗变化而偏置训练最平稳。预测 x0 在某些小数据集上收敛快但它要回归的对象本身是带结构的图像模型容易被局部纹理带偏最后生成的图像轮廓不错、细节发假。预测 v 介于两者之间在视频和高分辨率任务里用得更多。我建议刚开始做直接预测噪声先不要花时间对比目标函数。网络结构上时间步信息必须注入每一层这是扩散模型和普通图像回归任务最不一样的地方。常见做法是把 t 先做正弦位置嵌入再接一个全连接把维度对齐然后以逐通道偏置的方式加到卷积特征图上。这一步漏了模型就变成一个静态的去噪函数同一个输入在不同时间步会得到完全相同输出采样链路直接断裂。三种目标在训练循环里的差别其实只有几行# 伪代码对比三种训练目标回归目标不同模型主干可以完全复用 loss_eps F.mse_loss(model(x_t, t), epsilon) # 预测噪声最稳 loss_x0 F.mse_loss(model(x_t, t), x0) # 预测原图收敛快但容易糊细节 loss_v F.mse_loss( model(x_t, t), sqrt_alpha_bar[t] * epsilon - sqrt_one_minus_alpha_bar[t] * x0 ) # 预测速度折中方案逻辑说明x_t 是加噪后的中间图不管选哪种目标模型输入输出形状完全一致切换成本很低。这就是为什么建议先跑通噪声预测后续想试别的目标改一行损失函数就行不用动网络。2.3 训练损失为什么简化后的 MSE 就是主流损失从变分下界完整推导损失函数会得到好几个加权项真正落到训练代码里的往往是截断简化后的一个均方误差给定随机采样的时间步 t 和噪声 epsilon让模型的噪声预测尽量接近真实采样噪声。L_simple E_{t, x0, epsilon} [ || model(x_t, t) - epsilon ||^2 ]这么做不是理论不严谨而是完整损失的权重项对最终生成质量的影响弱到可以忽略保留它们只会让收敛更慢、调参更玄。做第一版模型一个 MSE 足够。训练时 t 在 0 到 T-1 之间均匀采样对应损失里对 t 取期望的含义。均匀采样意味着模型会在整个加噪过程上平均用力不会出现某个时间步没被充分训练。如果训练后期发现输出图像偏模糊可以试试把采样概率向 T/2 以内的中段时间步倾斜但这是调优后话第一版均匀采样最省事也不会出错。3. 从零训练一个高斯扩散模型最小可复现的训练流程这一章的目标很具体在一个 28x28 的公开数字手写数据集上用三个代码块把训练跑起来。第一个代码块定义噪声调度表与加噪采样第二个代码块给一个带时间编码的最小网络第三个代码块是训练主循环。模型按 CPU 可跑的量级设计几分钟就能看到损失在掉几万步之后能出形状。3.1 噪声调度表与前向加噪写数据入口就这几行先定义时间步总数 1000beta_t 用线性表import torch import math def build_noise_schedule(T1000, beta_min1e-4, beta_max0.02, devicecpu): betas torch.linspace(beta_min, beta_max, T, devicedevice) alphas 1.0 - betas alpha_bar torch.cumprod(alphas, dim0) # 预计算训练时直接查表避免每次都做开方 sqrt_alpha_bar torch.sqrt(alpha_bar) sqrt_one_minus_alpha_bar torch.sqrt(1.0 - alpha_bar) return betas, sqrt_alpha_bar, sqrt_one_minus_alpha_bar逻辑说明alpha_bar 是保留系数的累积乘积sqrt_alpha_bar 控制保留多少原图sqrt_one_minus_alpha_bar 控制保留多少噪声。预计算是因为训练循环里这两个值会被反复查表放进常量张量里比每次临时算快也避免把梯度误引到调度参数上。beta_min 和 beta_max 是感知最强的两个参数最小值太小前几步几乎没有可学信号最大值太大只有少数时间步是有效监督。我习惯在 1e-4 到 0.02 这个区间起步数据集更简单时可以往 0.01 压。前向加噪采样对应一个函数torch.no_grad() def forward_diffuse(x0, t, sqrt_alpha_bar, sqrt_one_minus_alpha_bar): epsilon torch.randn_like(x0) x_t ( sqrt_alpha_bar[t, None, None, None] * x0 sqrt_one_minus_alpha_bar[t, None, None, None] * epsilon ) return x_t, epsilont 是整型张量取值在 [0, T) 之间每个样本一个随机时间步。这里通过广播把标量系数对齐到图像维度。x_t 作为模型输入epsilon 作为回归目标。注意 t 的 dtype 必须是 long用浮点索引会直接报错或查错表randn_like 必须和 x0 同设备同 dtype否则会在隐式转换上浪费调试时间。3.2 带时间编码的噪声预测网络能跑通的最小结构网络需要满足两个条件输入输出尺寸一致能接收到时间步信息。我用的简化结构如下它把标准 U-Net 里耗显存的池化上下采样去掉了只保留残差块和时间注入在 28x28 小图上足够看清扩散模型的工作方式import torch.nn as nn import torch.nn.functional as F def timestep_embedding(t, dim128): half dim // 2 freqs torch.exp(-math.log(10000) * torch.arange(half, devicet.device) / half) args t.float()[:, None] * freqs[None, :] return torch.cat([torch.sin(args), torch.cos(args)], dim-1) class ResBlock(nn.Module): def __init__(self, in_ch, out_ch, time_dim): super().__init__() self.norm1 nn.GroupNorm(8, in_ch) self.conv1 nn.Conv2d(in_ch, out_ch, 3, padding1) self.time_proj nn.Linear(time_dim, out_ch) self.norm2 nn.GroupNorm(8, out_ch) self.conv2 nn.Conv2d(out_ch, out_ch, 3, padding1) self.shortcut nn.Conv2d(in_ch, out_ch, 1) if in_ch ! out_ch else nn.Identity() def forward(self, x, t_emb): h F.silu(self.norm1(x)) h self.conv1(h) h h self.time_proj(t_emb)[:, :, None, None] h F.silu(self.norm2(h)) h self.conv2(h) return self.shortcut(x) h class MiniDiffusionNet(nn.Module): def __init__(self, in_ch1, base_ch64, time_dim128): super().__init__() self.time_dim time_dim self.t_embed nn.Linear(time_dim, time_dim) self.input ResBlock(in_ch, base_ch, time_dim) self.mid1 ResBlock(base_ch, base_ch, time_dim) self.mid2 ResBlock(base_ch, base_ch * 2, time_dim) self.head nn.Conv2d(base_ch * 2, in_ch, 3, padding1) def forward(self, x, t): t_emb F.silu(self.t_embed(timestep_embedding(t, self.time_dim))) h self.input(x, t_emb) h self.mid1(h, t_emb) h self.mid2(h, t_emb) return self.head(h)逻辑说明timestep_embedding 用正弦位置编码把 t 映射到 128 维保证相邻时间步在嵌入空间里足够接近、远处时间步能被区分。t_embed 再升维一次让时间特征和卷积通道对齐。ResBlock 里时间信息以逐通道偏置的方式加到卷积输出上等于告诉这一层“当前需要去噪到什么程度”。GroupNorm 用 8 组归一化不依赖 batch 统计量比 BatchNorm 更适合扩散模型常见的小 batch 训练。边界提醒这个结构没有标准 U-Net 的跨分辨率信息通路感受野受限所以 28x28 能用、128x128 以上就会明显变弱。真正做高分辨率项目时把 ResBlock 之间插入池化下采样和对齐上采样即可训练代码一行不用改。这里先求流程跑通不追求结构完整。3.3 训练循环与关键参数学习率、batch、EMA训练循环本身很短但参数选择有讲究def train_step(model, x0, opt, sqrt_alpha_bar, sqrt_one_minus_alpha_bar, T1000): t torch.randint(0, T, (x0.size(0),), devicex0.device, dtypetorch.long) x_t, epsilon forward_diffuse(x0, t, sqrt_alpha_bar, sqrt_one_minus_alpha_bar) pred model(x_t, t) loss F.mse_loss(pred, epsilon) opt.zero_grad() loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) opt.step() return loss.item()t 在 0 到 T-1 间均匀采样每个样本一个随机时间步对应训练损失里对 t 取期望的数学表达式。学习率我一般用 2e-4 配 AdamWbatch 大小在 28x28 图上不低于 8 就行。梯度裁剪设 max_norm1.0防止靠近大时间步时噪声预测出现偶发大梯度这个偶发在扩散模型里比在普通 CNN 里更常见。EMA 要不要用我的经验是扩散模型里基本等于白送收益。把模型权重做滑动平均后再用于采样能明显平滑训练后期的损失震荡。实现思路是额外维护一份权重复制品每步按 0.999 的比例把新权重混入旧权重采样时只读这份 EMA 副本。显存不够时的习惯做法把图像先缩到 64x64base_ch 减半batch 再减半。我做某图像处理 Demo 时就是这么干的效果会打折扣但流程先跑通比指标重要模型架构和训练参数完全不用动。注意t 的取值必须严格小于 T索引前先确认调度表的长度把 T 当成 beta 表长度之外的数是新手最容易踩的索引越界。4. 采样与加速DDPM 朴素采样、DDIM 与步数的取舍训练完成后模型只会输出噪声估计还必须通过反向递推才能得到图像。这一章讲两条采样路线DDPM 的逐步随机走法和 DDIM 的确定性跳步。4.1 DDPM 采样按时间反向走一遍 1000 步DDPM 采样是概率性的每一轮都重新采高斯噪声。核心迭代关系用模型的噪声预测去修正当前状态torch.no_grad() def sample_ddpm(model, betas, sqrt_alpha_bar, sqrt_one_minus_alpha_bar, img_shape): T betas.size(0) x torch.randn(img_shape, devicebetas.device) for t in range(T - 1, -1, -1): t_tensor torch.full((x.size(0),), t, devicex.device, dtypetorch.long) epsilon_pred model(x, t_tensor) alpha_t 1.0 - betas[t] x (x - betas[t] / sqrt_one_minus_alpha_bar[t] * epsilon_pred) / torch.sqrt(alpha_t) if t 0: x x torch.sqrt(betas[t]) * torch.randn_like(x) return x逻辑说明t 从 T-1 往下走到 0每一步先从当前模型预测里减去这一轮要移除的噪声分量再除以保留系数回到上一时刻的期望位置最后加一个随机项模拟反向后验的采样。t 越大时 x 越接近纯噪声模型此时输出了主要“去噪方向”越接近 t0模型的能力越关键最后的几步直接决定图像锐度。这里有个特别容易翻车的细节range 必须写成 range(T - 1, -1, -1)写成 range(T, 0, -1) 会把 t0 的最后一步跳过采出来的图像通常对比度不足、发灰。我在第一次自写采样器时踩过这个坑症状就是损失正常、生成图永远像隔了一层雾。4.2 DDIM 加速用闭合公式跨步去噪DDPM 每步都加随机噪声导致无法跳步。DDIM 把反向过程改成确定性地沿期望走于是可以每隔几步采样一个时间点。核心思路是先用模型的当前噪声估计反推一张干净的 x0_hat再从此处推向目标时间步torch.no_grad() def sample_ddim(model, sqrt_alpha_bar, sqrt_one_minus_alpha_bar, img_shape, num_steps50, eta0.0): T sqrt_alpha_bar.size(0) x torch.randn(img_shape, devicesqrt_alpha_bar.device) step_interval T // num_steps timesteps list(range(T - 1, -1, -step_interval)) if timesteps[-1] ! 0: timesteps.append(0) for i, t in enumerate(timesteps): t_next timesteps[i 1] if i 1 len(timesteps) else 0 t_tensor torch.full((x.size(0),), t, devicex.device, dtypetorch.long) epsilon_pred model(x, t_tensor) x0_hat (x - sqrt_one_minus_alpha_bar[t] * epsilon_pred) / sqrt_alpha_bar[t] sigma_t eta * torch.sqrt( (1 - sqrt_alpha_bar[t_next] ** 2) / (1 - sqrt_alpha_bar[t] ** 2) ) * torch.sqrt( 1 - sqrt_alpha_bar[t] ** 2 / sqrt_alpha_bar[t_next] ** 2 ) noise_coef torch.sqrt( torch.clamp(1 - sqrt_alpha_bar[t_next] ** 2 - sigma_t ** 2, min0.0) ) x sqrt_alpha_bar[t_next] * x0_hat noise_coef * epsilon_pred if eta 0: x x sigma_t * torch.randn_like(x) return x逻辑说明最关键的是 x0_hat 这一行它把当前状态还原成对原图的估计这是 DDIM 相对 DDPM 的核心增量。t_next 是跳步前推的目标时间点当 T 不能被 num_steps 整除时最后一步强制补 0防止采样停在非零状态。noise_coef 用 clamp 保护避免末步因浮点误差出现负开方。eta 控制随机性eta0 时是确定性过程同一起点和同一个模型会生成完全相同的图eta 大于 0 时重新引入随机扰动一般取 0.1 能兼顾稳定性和多样性。DDIM 在步数足够时质量接近 DDPM但计算量可以差一个数量级这也是它能成为落地标配的直接原因。实际工程里多数项目先固定 50 步做基线再向 20 步探索极限很少直接跑 1000 步。4.3 采样步数的边界什么情况 20 步什么情况 50 步以上采样步数不是越少越好也不是固定值它和你服务的图像分辨率、任务容忍度强相关。下面是一份实践参考步数区间质量表现单张耗时相对适合场景10~20结构可辨、细节粗糙极低实时预览、草图探索50细节完整、少量伪影中等一般业务生成、批量出图100~200接近 1000 步的稳定质量较高高质量交付、指标评测1000原始论文的基准质量极高学术对照、离线渲染我的经验阈值是28x28 或 64x64 小图DDIM 20 步就够看清形态128x128 自然图像50 步是安全起点256x256 以上100 步起步再往下压。看到指标下降时优先检查是不是最后几步处理不干净而不是盲目加总步数。5. 高斯扩散模型训练避坑指南从损失全 NaN 到生成模糊的排查下面是训练扩散模型时最常见的四类问题按「现象 → 原因 → 解决」逐条说清多数能靠日志和采样图一次性定位。5.1 损失不下降或前几步直接 NaN现象训练最开始 200 步内loss 忽高忽低或者直接变成 NaN模型输出全为同一常数。原因多半是时间步索引用了浮点类型查调度表时报错或查错位置也可能是学习率过高比如超过 1e-3使大时间步上的梯度一步跨出有效区间更隐蔽的是模型输出通道和输入通道不一致MSE 报错前数值已经开始异常。解决先跑一个 batch 的前向验证所有张量形状再把学习率降到 2e-4训练循环里加梯度裁剪最后把 T 从 1000 临时降到 200快速跑通流程后再升回去这个两步排查法能省掉大量定位时间。调度表索引前用t.max() T断言一次基本能杜绝越界问题。5.2 生成图像模糊、细节缺失现象训练损失正常收敛但采样出来的图边缘发虚像蒙了一层雾数字或物体轮廓在但纹理细节全无。原因扩散模型收敛比 GAN 慢是常态训练步数不足是最常见原因其次检查 beta_max取值过大时大部分时间步的中间状态已接近纯噪声网络有效学习区间被压缩最后看采样端DDPM 用较少步数采样时最后几步去噪不彻底也会发灰。解决把训练步数翻倍一般 3~5 万步后小数据集会明显变清晰。然后把 beta_max 从 0.02 降到 0.01 或 0.005 重新试。采样端优先切到 DDIM步数放到 100图像通常立刻变锐。这一步仍没解决再考虑增加模型 base_ch。5.3 生成样本单一、重复出现同一种图现象换不同随机种子采样出来的图在构图和色调上高度相似甚至像把训练集里某几张原图近似的搬了出来。原因这是典型的模型倾向性问题。常见源是训练数据分布太窄或模型容量偏小导致只记住少数模式。扩散模型的模式崩塌不如 GAN 那么剧烈但一样存在。解决先检查数据类别不均衡时做重采样保证每类样本量接近。再提升模型容量把 base_ch 从 64 加到 128或补全 U-Net 的池化上下采样。最后看采样起点如果起点只落在极窄区间尝试把采样起点的方差从 1.0 放大到 1.5~2.0多样性通常会改善。5.4 EMA 权重没生效、保存的 checkpoint 采样效果差现象训练过程可视化看着图像质量不错但用保存的权重文件重新采样效果明显变差回到几百步前的水平。原因EMA 副本和主网络权重没同步。常见做法是把 EMA 副本每轮都覆盖但加载时忘了把 EMA 权重回灌主模型也可能是 EMA 更新率 0.999 配了过小学习率EMA 停留在很久之前的权重状态。解决保存时只保留一份 EMA 副本训练结束后显式把 EMA 参数写回 model.state_dict()采样和评估统一用这份权重。加载后可以检查第一层卷积的权重均值是否和训练日志一致这能很快判断权重复制品是否正确。我现在的默认做法是每 1000 步额外保存一份采样图如果落盘图和日志中的效果对不上链路的问题就出在保存环节。6. 把模型用起来条件生成、无分类器引导与模型验证技巧6.1 条件生成与无分类器引导训练的最后一公里通常是有条件生成也就是给定类别标签或文本向量控制输出内容。做法很简单模型再加一个条件编码分支训练时把标签向量拼进时间嵌入之后一起送入网络推理时同时跑两个前向一个带条件一个不带条件用无分类器引导公式插值with torch.no_grad(): eps_uncond model(x, t_tensor, None) # 不带条件的前向 eps_cond model(x, t_tensor, label) # 带条件的前向 eps eps_uncond guidance_scale * (eps_cond - eps_uncond)逻辑说明guidance_scale 为 0 时等价于无条件模型取 2~8 时能显著提升条件和生成内容的一致性但过大时会出现过饱和伪影甚至噪声。这个技巧在训练和采样端都很稳定是当前扩散模型可控生成的默认选项。条件生成落地时训练数据里要有少量“无条件样本”常见做法是 10% 概率随机丢弃标签让网络在不给标签时也能正常前向。6.2 训练完成后怎么验证模型真的学到了东西不要只看 loss 曲线。我的固定验证顺序是先看中间状态再做重建检查最后看插值验证项做法合格信号加噪可视化取验证图加噪到 t200肉眼确认还有轮廓轮廓清晰可辨重建误差加噪到 t100 后直接单步反推与原始图对比边缘结构大致恢复采样插值两个随机起点分别采样观察语义连续性生成图差异连续平滑我自己的教训是每次训练完第一件事不是跑 FID而是把 t0 到 t200 的加噪中间状态可视化一遍。这个习惯能直接判断模型到底学到了结构还是只记住了像素帮我过滤掉了至少一半“损失正常但效果差”的半成品模型。看清楚这一步再去调 CFG 和采样器才不会白费。希望帮到你。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号