当前位置: 首页 > news >正文

化妆品网站建设项目计划书电子商务网站开发 ppt

化妆品网站建设项目计划书,电子商务网站开发 ppt,网络营销有哪些手段,可以免费做会计题的网站一、扩散模型 扩散模型的起源可以追溯到热力学中的扩散过程。热力学中的扩散过程是指物质从高浓度往低浓度的地方流动#xff0c;最终达到一种动态的平衡。这个过程就是一个扩散过程。 在深度学习领域中#xff0c;扩散模型#xff08;diffusion models#xff09;是深度生…一、扩散模型 扩散模型的起源可以追溯到热力学中的扩散过程。热力学中的扩散过程是指物质从高浓度往低浓度的地方流动最终达到一种动态的平衡。这个过程就是一个扩散过程。  在深度学习领域中扩散模型diffusion models是深度生成模型中新的SOTA。 扩散模型在图片生成任务中超越了原SOTAGAN并且在诸多应用领域都有出色的表现如计算机视觉、NLP、波形信号处理、多模态建模、分子图建模、时间序列建模、对抗性净化等。 1、扩散模型原理介绍 在深度学习中生成模型的目标是根据给定的样本训练数据生成新样本。首先给定一批训练数据假设其服从某种复杂的真实分布则给定的训练数据可视为从该分布中采样的观测样本。如果能从这批观测样本中估计出训练数据的真实分布就可以从该分布中源源不断地采样出新的样本。 生成模型作用是估计训练数据的真实分布并将其假定为这个过程称为拟合网络。 如何确定估计的分布和真实分布的差距 要求所有的训练数据样本采样自的概率最大主要思想就是统计学中的最大似然估计思想这也是生成模型的基本思想之一因此生成模型的学习目标就是对训练数据的分布进行建模。 公认最早的扩散模型DDPMDenoing Diffusion Probalilistic Model的扩散模型原理就由此而来扩散过程如下图所示具体分为前向过程和反向过程两部分 DDPM前向和反向过程 1.1、扩散模型前向过程 前向过程是给数据中添加噪声的过程假设给定一批训练数据数据分布为     其中0表示初始状态即还没有开始扩散即上图的原图小狗。 如上所述将前向加噪声过程分为离散的多个时间步在每一个时间步  给上一个时间步 的数据 添加高斯噪声从而生成带有噪声简称“带噪”的数据   同时数据 也会被送入下一个时间步    以继续添加噪声。其中噪声的方差由一个位于区间01的固定值   和当前时刻“带噪”的数据分布确定。在反复迭代和加噪即添加噪声 次之后只要  足够大根据马尔可夫链的性质就可以得到纯随机噪声分布的数据即类似稳定墨水系统的状态。 马尔可夫链是马尔可夫过程的原始模型也是一个表示状态转移的离散随机过程。该离散过程具有“无记忆”的性质即下一状态的概率分布仅由当前状态表示而与之前的所有状态无关同时只要时间序列足够长即状态转移的次数足够多最终的概率分布将趋于稳定。  1.1.1、扩散模型公式 从时间步  到时间步   的单步扩散加噪声过程的数学表达式如下 (1) 最终的噪声分布数学表达式如下 (2) 1.2、扩散模型反向过程 前向过程是将数据噪声化的过程增加噪声反向过程则是“去噪”的过程即从随机噪声中迭代恢复出清晰数据的过程。从采样自高斯噪声  的一个随机噪声中恢复出原始数据    就需要知道反向过程中每一步的图像分布状态转移。DDPM也将这个方向过程定义为马尔可夫链由一系列用神经网络参数化的高斯分布组成的也就是需要训练的扩散模型。 从时间步    到时间步    的单步反向去噪的过程公式如下所示 由于反向过程的每一步都是参数化的高斯分布因此可以分布求高斯分布的均值和方差。经过贝叶斯公式推导 上式巧妙地通过贝叶斯公式将逆向过程转换为前向过程且最终得到的概率密度函数和高斯概率密度函数的指数部分 相对应。其中是与无关的常数项。令 这个公式表示的是高斯分布正态分布的概率密度函数其中 - 是当前时刻的观测值 - 和 分别是前一次和前几次的观测值 - 是预测值即使用贝叶斯方法预测出来的下一个时刻的值 - 是预测误差的方差也就是预测值与实际值之间的差异程度。 这个公式的意义在于根据已知的前几次观测值和当前时刻的观测值使用贝叶斯方法预测出下一个时刻的观测值并计算出预测误差的方差。这个预测值和预测误差的方差可以用来评估模型的准确性和稳定性。 将绿色部分与红色部分一一对应一是计算平滑后的数据 二是计算平滑后的条件期望 。 1. 平滑后的数据 这里和 分别表示第 个观测值和前一个观测值的条件期望。 是平滑因子用于调整数据的平滑程度。 2. 平滑后的条件期望 这里使用了一个加权平均的方法来计算条件期望。具体来说我们将当前观测值的预测值乘以平滑因子然后加上前一个观测值的预测值乘以平滑因子。最后将结果除以平滑因子的倒数。 这两个公式可以帮助我们在贝叶斯推倒扩散模型中对数据进行平滑处理从而得到更加稳定和可靠的预测结果。 从上述可以看出方差是一个定量扩散过程参数固定而均值是一个依赖于和的函数因此需要使用扩散模型来优化参数。此部分推导过程参考 扩散模型Diffusion Model原理 贝叶斯分类器基本原理 当事件B发生时事件A发生的条件概率可以表示为 其中$P(AB)$表示事件A和事件B同时发生的概率$P(B)$表示事件B发生的概率。根据全概率公式有 其中表示在事件A发生的情况下事件B发生的概率表示在事件A不发生的情况下事件B发生的概率表示事件A不发生的概率。将上述两个式子代入上式得到 因此当事件B发生时事件A发生的概率为1即 。 二、极大似然估计原理 极大似然估计的原理目的是利用已知的样本结果反推最有可能最大概率导致这种结果的参数值。 极大似然估计是建立在极大似然原理的基础上的一个统计方法极大似然估计提供了一种给定观测数据来评估模型参数的方法即“模型已定参数未知”。通过若干次试验观察其结果利用试验结果得到某个参数值能够使样本出现的概率最大则称为极大似然估计。 由于样本集中的样本都是独立同分布的可以只考虑一类样本集来估计参数向量假设已知的样本集为 联合概率密度函数   称为相对于  的    似然函数。 如果    是参数空间中能够使似然函数    最大的值则   应该是 最可能 的参数值那么    就是   的极大似然估计量。它是样本集的函数记作 称为极大似然估计函数估计值。 三、极大似然估计例子 假设有两个外形完全相同的箱子1号箱子中有99只白球1只黑球2号箱子中只有1只白球99只黑球。在一次实验中取出黑球请问是从哪个箱子中取出的 人们通常会猜测这只黑球最像是从2号箱取出来的此时描述的“最像”就有“极大似然”的意思这种想法常称为“极大似然原理”。 最大似然估计是一种参数估计的方法它是概率论在统计学的应用之一。 最大似然估计是建立在这样的思想上已知某个参数能使这个样本出现的概率最大我们当然不会再去选择其他小概率的样本所以干脆就把这个参数作为估计的真实值。 举个例子假设我们有一组数据其中包含了一些人的年龄和收入信息。我们想要估计这些人的平均年龄和平均收入。根据最大似然估计的思想我们应该尽量让这组数据符合真实情况。也就是说如果我们假设这些人的平均年龄是30岁那么当这组数据中有人年龄确实为30岁时我们就认为这个假设是正确的如果有人年龄不是30岁但其他方面都符合条件我们也认为这个假设是正确的。同样地如果我们假设这些人的平均收入是5000元/月那么当这组数据中有人收入确实为5000元/月时我们就认为这个假设是正确的如果有人收入不是5000元/月但其他方面都符合条件我们也认为这个假设是正确的。 因此在最大似然估计中我们需要根据实际情况来选择合适的参数值。 四、优化目标 扩散模型预测的噪声残差即要求后向过程中预测的噪声分布与前向过程中施加的噪声分布之间的“距离”最小。扩散模型的最终优化目标的数学表达式如下 其中可以看出在训练DDPM时只要用一个简单的MSE(均方误差)损失最小化前向过程施加的噪声分布和后向过程预测的噪声分布就能实现最终的优化目标。 五、从零开始搭建扩散模型代码实现 5.1、导入相关的包 导入所需的相关库采用diffusers提供的DDPM模型接口 注可能会遇到一些安装包问题可采用下面的pip源 安装源指令pip默认的pip install XXX清华大学源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple [包名] 豆瓣源 pip install -i https://pypi.doubanio.com/simple [包名] 阿里云源 pip install -i http://mirrors.aliyun.com/pypi/simple/ [包名] import torch import torchvision from torch import nn from torch.nn import functional as F from torch.utils.data import DataLoader from diffusers import DDPMScheduler,UNet2DModel import matplotlib.pyplot as plt import warnings warnings.filterwarnings(ignore)device torch.device(cuda if torch.cuda.is_available() else cpu) print(device) 注本文的代码都是在colab中实现本地也可以运行。 5.2、数据集测试 本文采用官方提供的一个小型测试集FashMNISTtorchvision.datasets.FashionMNIST包含10个类别当然也可以使用其他测试集这里主要是过一遍流程 dataset torchvision.datasets.FashionMNIST(root./FashionMNIST,trainTrue,downloadTrue,transformtorchvision.transforms.ToTensor()) train_dataloader DataLoader(dataset,batch_size8,shuffleTrue) image,label next(iter(train_dataloader)) print(image shape:,image.shape) print(Label:,label)# 查看数据的类别10个类 classes_list dataset.classes print(classes_list) plt.imshow(torchvision.utils.make_grid(image)[0],cmapGreys) 输出 image shape: torch.Size([8, 1, 28, 28]) Label: tensor([4, 3, 5, 8, 8, 1, 4, 3]) [T-shirt/top, Trouser, Pullover, Dress, Coat, Sandal, Shirt, Sneaker, Bag, Ankle boot] 5.3、扩散模型之退化过程 在扩散过程中需要为内容加入噪声如何通过一个简单的方法控制图像的损坏程度可以引入一个参数控制输入的“噪声量”。如下图绿色箭头方向给图像中加入噪声。 主要方法将噪声张量与输入图像相乘并将结果与1减去噪声的比例相加以实现损坏效果 代码实现 # 通过引入一个参数来控制输入的“噪声”来控制内容的损坏的程度 noise torch.rand_like(image)def corrupt(image,amount):根据p为输入image添加噪声,这就是退化过程noise torch.rand_like(image)amount amount.view(-1,1,1,1)print(amount.shape)return image*(1-amount)noise*amount# 对输出结果进行可视化 fig,axs plt.subplots(2,1,figsize(10,5)) axs[0].set_title(Input data) axs[0].imshow(torchvision.utils.make_grid(image)[0],cmapGreys)# 加入噪声:获得一个一维张量包含从0-1之间的均匀分布的数值 p torch.linspace(0,1,image.shape[0]) print(p.shape) noised_image corrupt(image,p) print(noised_image.shape) # 绘制加噪声的图像 axs[1].set_title(corrupt data) axs[1].imshow(torchvision.utils.make_grid(noised_image)[0],cmapGreys) 输出 torch.Size([8]) torch.Size([8, 1, 1, 1]) torch.Size([8, 1, 28, 28]) 5.3.1、其他噪声 图像中常见的噪声有以下四种高斯噪声泊松噪声乘性噪声椒盐噪声。 高斯噪声是指其概率密度函数服从高斯分布即正态分布的一类噪声。如果一个噪声它的幅度分布服从高斯分布而它的功率谱密度又是均匀分布的则称它为高斯白噪声。高斯白噪声的二阶矩不相关一阶矩为常数是指先后信号在时间上的相关性。产生原因1图像传感器在拍摄时视场不够明亮、亮度不够均匀2电路各元器件自身噪声和相互影响3图像传感器长期工作温度过高。 泊松噪声是指像素点出现的概率不是固定的而是在某个范围内随机波动的一种噪声。产生原因1图像传感器在拍摄时视场不够明亮、亮度不够均匀2电路各元器件自身噪声和相互影响3图像传感器长期工作温度过高。 乘性噪声是指将两个或多个低频信号相乘后得到高频信号再进行处理时产生的伪像。产生原因1图像传感器在拍摄时视场不够明亮、亮度不够均匀2电路各元器件自身噪声和相互影响3图像传感器长期工作温度过高。 椒盐噪声是指由于图像切割引起的黑白相间的亮暗点噪声与图像信号的关系是相乘。产生原因1图像传感器在拍摄时视场不够明亮、亮度不够均匀2电路各元器件自身噪声和相互影响3图像传感器长期工作温度过高。 1高斯噪声 高斯噪声是一种通过向输入数据添加均值为零和标准差 (σ)的正态分布随机值而产生的噪声。 正态分布也称为高斯分布是一种连续概率分布由其概率密度函数 (PDF) 定义 其中是随机变量 是均值 是标准差。高斯噪声在数字信号处理中被广泛应用例如在通信、图像处理、语音识别等领域。  # 读取一张图像并将图像和高斯噪声合并 import numpy as np import matplotlib.pyplot as plt import cv2# 读取图像 image cv2.imread(./image/2008_000536.jpg, cv2.IMREAD_GRAYSCALE)# 设置参数 mu 0 sigma 1 size image.shape# 生成高斯噪声 noise np.random.normal(mu, sigma, size)# 将高斯噪声添加到图像上 noisy_image image noise# 显示原始图像和带噪声的图像 plt.subplot(131), plt.imshow(image,cmapgray), plt.title(Original Image) plt.subplot(132), plt.imshow(noise), plt.title(Noise) plt.subplot(133), plt.imshow(noisy_image,cmapgray), plt.title(Noisy Image) plt.show()2椒盐噪声 椒盐噪声是一种图像噪声通常是由于图像切割引起的黑白相间的亮暗点噪声与图像信号的关系是相乘。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值饱和的感应器导致像素值为最大值 。 在数字图像中椒盐噪声是一种因为信号脉冲强度引起的噪声可以用中值滤波来消除。给一副数字图像加上椒盐噪声的步骤如下指定信噪比 SNR 其取值范围在 [0, 1]之间计算总像素数目 SP得到要加噪的像素数目 NP SP * (1-SNR)随机获得要加噪的像素位置。 计算步骤如下 1. 指定信噪比SNR其取值范围在[0, 1]之间。 2. 计算总像素数目SP。 3. 根据信噪比和总像素数目计算要加噪的像素数目NP SP * (1-SNR)。 4. 随机获得要加噪的像素位置即在图像中随机选择NP个像素点。 5. 对于每个被选中的像素点将其值设置为一个随机数这个随机数的范围在图像的最大值和最小值之间。 6. 将加噪后的图像保存或显示出来。 代码实现 # 添加椒盐噪声 import random # 在原图中增加椒盐噪声 def salt_and_pepper_noise(image, prob):output np.zeros(image.shape, np.uint8)thres 1 - prob for i in range(image.shape[0]):for j in range(image.shape[1]):rdn random.random()if rdn prob:output[i][j] 0elif rdn thres:output[i][j] 255else:output[i][j] image[i][j]return output# 生产指定大小的椒盐噪声 def generate_salt_pepper_noise(size, salt_ratio0.05, pepper_ratio0.05):# 创建一个大小为size的空数组noise np.zeros((size, size))# 遍历数组中的每个元素for i in range(size):for j in range(size):# 计算当前元素的盐和胡椒概率salt_prob salt_ratiopepper_prob pepper_ratio# 如果当前元素位于边缘则增加胡椒概率if i 0 or i size - 1 or j 0 or j size - 1:pepper_prob 0.05# 随机选择盐或胡椒if np.random.rand() salt_prob:noise[i, j] 1elif np.random.rand() pepper_prob:noise[i, j] 2return noise# 读取图像 image cv2.imread(./image/2008_000536.jpg,cv2.COLOR_BGR2GRAY) pepper_image generate_salt_pepper_noise(28,0.1) salt_pepper salt_and_pepper_noise(image,0.2) plt.subplot(131),plt.imshow(image),plt.title(Original Image) plt.subplot(132),plt.imshow(salt_pepper),plt.title(Salt Image) plt.subplot(133),plt.imshow(pepper_image),plt.title(Pepper Image) 5.4、扩散模型之网络模型 训练模型之前需要一个能够输入28×28像素的噪声图像然后输出相同大小图片的预测结果。本文采用经典的Unet网络由一条“压缩路径”和一条“扩展路径”组成。“压缩路径”主要是通过压缩数据的维度而“扩展路径”则将数据扩展回原始维度类似于自动编码器。 经典的UNet:本文采用的是类似的模型框架但不是这个网络 1、自动编码器 是一种无监督学习模型主要用于数据压缩和特征提取。它由两部分组成编码器和解码器。 编码器将输入数据压缩成一个低维表示解码器则将这个低维表示还原成原始数据。在这个过程中自动编码器学习如何有效地将原始数据转换为压缩表示以及如何从压缩表示中恢复原始数据。这种学习过程使得自动编码器能够捕捉到数据中的有用信息同时去除冗余和噪声。 自动编码器的基本思想是通过训练一个神经网络来最小化输入数据和解码器输出之间的差异即重构误差。在训练过程中网络的权重会不断地更新以便更好地捕捉数据的特征和结构。 自动编码器在许多领域都有广泛的应用如图像识别、语音识别、自然语言处理、推荐系统等。它们可以用于降维、特征提取、异常检测、生成模型等任务。 这段代码定义了一个名为BasicNet的类用于实现Unet网络。Unet网络是一种用于图像分割的卷积神经网络它包括一个编码器下采样和一个解码器上采样。这个简单的Unet网络包含三个卷积层和相应的激活函数、池化层和上采样层。 1. __init__方法定义了网络的结构。    - self.down_layers定义了下采样层包括三个卷积层每个卷积层后面跟着一个ReLU激活函数和一个最大池化层。    - self.up_layers定义了上采样层包括三个卷积层每个卷积层后面跟着一个ReLU激活函数。    - self.act定义了激活函数这里使用ReLU激活函数。    - self.downscale定义了最大池化层用于降低特征图的空间尺寸。    - self.upscale定义了上采样层用于增加特征图的空间尺寸。 2. forward方法实现了网络的前向传播过程。    - 对于下采样层首先将输入x通过第一个卷积层、激活函数和池化层然后将结果添加到h列表中并将x通过最大池化层降维。重复这个过程直到处理完所有的下采样层。    - 对于上采样层首先将输入x通过上采样层和激活函数然后将结果与h列表中的最后一个元素相加再通过第二个卷积层、激活函数和池化层。重复这个过程直到处理完所有的上采样层。    - 最后返回x作为网络的输出。 # Unet网络 class BasicNet(nn.Module):一个十分简单的Unet网络部署def __init__(self,in_channels1,out_channels1):super().__init__()self.down_layers torch.nn.ModuleList([nn.Conv2d(in_channels,32,kernel_size5,padding2),nn.Conv2d(32,64,kernel_size5,padding2),nn.Conv2d(64,64,kernel_size5,padding2),])self.up_layers torch.nn.ModuleList([nn.Conv2d(64,64,kernel_size5,padding2),nn.Conv2d(64,32,kernel_size5,padding2),nn.Conv2d(32,out_channels,kernel_size5,padding2),])self.act nn.ReLU()self.downscale nn.MaxPool2d(2)self.upscale nn.Upsample(scale_factor2)def forward(self,x):h []for i,l in enumerate(self.down_layers):x self.act(l(x))if i 2:h.append(x)x self.downscale(x)for i,l in enumerate(self.up_layers):if i 0:x self.upscale(x)x h.pop()x self.act(l(x))return xnet BasicNet() x torch.rand(8,1,28,28) print(net(x).shape) # 模型参数 sum([param.numel() for param in net.parameters()]) print(net) 输出 torch.Size([8, 1, 28, 28]) BasicNet((down_layers): ModuleList((0): Conv2d(1, 32, kernel_size(5, 5), stride(1, 1), padding(2, 2))(1): Conv2d(32, 64, kernel_size(5, 5), stride(1, 1), padding(2, 2))(2): Conv2d(64, 64, kernel_size(5, 5), stride(1, 1), padding(2, 2)))(up_layers): ModuleList((0): Conv2d(64, 64, kernel_size(5, 5), stride(1, 1), padding(2, 2))(1): Conv2d(64, 32, kernel_size(5, 5), stride(1, 1), padding(2, 2))(2): Conv2d(32, 1, kernel_size(5, 5), stride(1, 1), padding(2, 2)))(act): ReLU()(downscale): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(upscale): Upsample(scale_factor2.0, modenearest) ) 5.4.1、卷积神经网络 卷积神经网络Convolutional Neural Networks CNN是一类包含卷积计算且具有深度结构的前馈神经网络Feedforward Neural Networks是深度学习deep learning的代表算法之一。卷积神经网络具有表征学习representation learning能力能够按其阶层结构对输入信息进行平移不变分类shift-invariant classification因此也被称为“平移不变人工神经网络Shift-Invariant Artificial Neural Networks, SIANN”。 卷积神经网络Convolutional Neural Networks简称CNN是一种具有局部连接、权值共享等特点的深层前馈神经网络。它主要由输入层、卷积层ReLU层、池化层和全连接层构成。 局部连接是指卷积层的节点仅仅和其前一层的部分节点相连接只用来学习局部特征。权值共享是指卷积核中的权重在多个位置上共享这样可以减少参数数量使运算变得简洁、高效能够在超大规模数据集上运算  。 卷积层是CNN的核心部分它通过卷积核对输入数据进行卷积操作提取出数据的特征信息。 ReLU层是卷积层的激活函数它可以增加网络的非线性性提高网络的表达能力。 池化层是对卷积后的数据进行降采样处理减少数据量同时保留重要的特征信息。 全连接层是将卷积层和池化层输出的特征向量转换为最终的输出结果。 不同模块的可视化效果 简单看下各个网络基本结构的可视化效果 1卷积可视化 import numpy as np fig,axes plt.subplots(1,2) img image[6][0].to(cpu) axes[0].set_title(origin image) axes[0].imshow(img,cmapGreys)# 卷积 conv nn.Conv2d(in_channels1, out_channels1, kernel_size2) # 应用卷积层 output conv(img.unsqueeze(0)) out torch.tensor(output) axes[1].set_title(conv image) axes[1].imshow(out[0],cmapGreys) 2不同卷积核大小的可视化 # 不同卷积核大小下的效果 import numpy as np fig,axes plt.subplots(1,6,figsize(20,5)) img image[3][0].to(cpu) axes[0].set_title(origin image) axes[0].imshow(img,cmapGreys)# 不同卷积核大小可视化效果 for i in range(1,6):conv nn.Conv2d(in_channels1, out_channels1, kernel_sizei)# 应用卷积层output conv(img.unsqueeze(0))out torch.tensor(output)axes[i].set_title(fkernel_size:{i})axes[i].imshow(out[0],cmapGreys) 3池化层可视化 # 池化层操作 import numpy as np fig,axes plt.subplots(1,4,figsize(12,5)) img image[6][0].to(cpu) axes[0].set_title(origin image) # cmapGreys灰度显示 axes[0].imshow(img)# 卷积 conv nn.Conv2d(in_channels1, out_channels1, kernel_size2) # 采用平均池化尺寸缩小一半 pool nn.MaxPool2d(kernel_size2) avg_pool nn.AvgPool2d(kernel_size2) # 应用卷积层 output conv(img.unsqueeze(0)) out torch.tensor(output) # 最大池化操作尺寸缩小一半 pool_out pool(out) # 平均池化操作尺寸缩小一半 avg_pool_out avg_pool(out) axes[1].set_title(conv image) axes[1].imshow(out[0]) axes[2].set_title(maxpool image) axes[2].imshow(pool_out[0]) axes[3].set_title(avgpool image) axes[3].imshow(avg_pool_out[0]) 4激活函数可视化 import numpy as np fig,axes plt.subplots(1,2) img image[6][0].to(cpu) axes[0].set_title(origin image) axes[0].imshow(img)# 采用激活函数处理之后 conv nn.Conv2d(in_channels1, out_channels1, kernel_size5,padding2) act nn.ReLU(0.01) # 应用卷积层 output conv(img.unsqueeze(0)) out torch.tensor(output) act_out act(out) axes[1].set_title(LeakyRelu image) axes[1].imshow(act_out[0]) 5上采样可视化 # 上采样操作 import numpy as np fig,axes plt.subplots(1,2) img image[6][0].to(cpu) axes[0].set_title(origin image) axes[0].imshow(img) # 采用上采样处理可以看下图高度和宽度都增大2倍 conv nn.Conv2d(in_channels1, out_channels1, kernel_size3,padding2) act nn.ReLU(0.01) upsample nn.Upsample(scale_factor(2,2)) output conv(img.unsqueeze(0)) out torch.tensor(output) # Input and scale_factor must have the same number of spatial dimensions, but got input with spatial dimensions of [30] and scale_factor of shape # 这种情况是需要增加一个维度 upsample_out upsample(out.unsqueeze(0)) print(upsample_out.shape) axes[1].set_title(Upsample image) axes[1].imshow(upsample_out[0][0]) 5.5、训练模型 首先给定一个“带噪”即加入了噪声的输入noise扩散模型输出其对原始输入x的最佳预测我们需要通过均方误差对预测值与真实值进行比较。 均方误差损失MSE是回归问题下的损失函数用于预测对具体数值的预测。它的计算公式为其中 是真实值 是预测值。均方误差损失越小说明模型预测越准确。 这是一个PyTorch代码片段它定义了一个优化器对象。 optimizer torch.optim.Adam(net.parameters(),lr1e-3) 这行代码做了以下事情 1. torch.optim.Adam 是一个实现了Adam优化算法的类。Adam是一种用于深度学习模型的优化算法它结合了RMSProp和Momentum的优点可以自适应地调整学习率。 2. net.parameters() 是一个生成器它包含了神经网络中所有的可训练参数。 3. lr1e-3 是设置的学习率这个值决定了我们在更新模型参数时步长的大小。学习率越小模型收敛的速度越慢但可能得到更精确的结果学习率越大模型收敛的速度越快但可能会错过最优解。 所以这行代码的作用就是创建了一个Adam优化器用于优化神经网络的参数。 # 数据加载 train_dataloader DataLoader(dataset,batch_size128,shuffleTrue) # 训练批次 epochs 15 # 创建网络 net BasicNet() net.to(device)# 定义损失函数 loss_function nn.MSELoss()# 指定优化器 optimizer torch.optim.Adam(net.parameters(),lr1e-3)# 记录训练过程中的损失供后续查看 losses [] batch_labels [] batch_preds []# train for epoch in range(epochs):for image,label in train_dataloader:image image.to(device)# 创建噪声noise torch.rand(image.shape[0]).to(device)# 创建加入噪声的输入noise_image corrupt(image,noise)pred net(noise_image)# 计算损失loss loss_function(pred,image)# 反向传播optimizer.zero_grad()loss.backward()optimizer.step()# 存储损失供后期查看losses.append(loss.item())# 输出在每个周期训练得到的损失的均值avg_loss sum(losses[-len(train_dataloader):])/len(train_dataloader)print(fFinished epoch {epoch}. Average loss for this epoch:{avg_loss:05f})model_dir ./model import os if not os.path.exists(model_dir):os.makedirs(model_dir) # torch.save(./model/model.pth,net)# 查看损失曲线 plt.plot(losses) plt.ylim(0,0.1) 输出 Finished epoch 0. Average loss for this epoch:0.059535 Finished epoch 1. Average loss for this epoch:0.024476 Finished epoch 2. Average loss for this epoch:0.022848 Finished epoch 3. Average loss for this epoch:0.021662 Finished epoch 4. Average loss for this epoch:0.021025 Finished epoch 5. Average loss for this epoch:0.020682 Finished epoch 6. Average loss for this epoch:0.020176 Finished epoch 7. Average loss for this epoch:0.020124 Finished epoch 8. Average loss for this epoch:0.019379 Finished epoch 9. Average loss for this epoch:0.019473 Finished epoch 10. Average loss for this epoch:0.018823 Finished epoch 11. Average loss for this epoch:0.018897 Finished epoch 12. Average loss for this epoch:0.018471 Finished epoch 13. Average loss for this epoch:0.018010 Finished epoch 14. Average loss for this epoch:0.017308 5.6、模型推理 对于噪声量较低的输入模型的预测结果效果不错但对于噪声量很好的输入模型能够获得的信息逐渐减少当mount1时模型将输出一个模糊的预测预测接近数据集的平均值。 ### 测试 test_data torchvision.datasets.FashionMNIST(root./FashionMNIST,trainFalse,transformtorchvision.transforms.ToTensor(),downloadTrue) test_dataloader DataLoader(test_data,batch_size128,shuffleTrue)x_test,x_label next(iter(test_dataloader)) x_test x_test[:8]# 在0-1之间选择退化量 amount torch.linspace(0,1,x_test.shape[0]) noised_x_test corrupt(x_test,amount)# 得到模型的预测结果 with torch.no_grad():preds net(noised_x_test.to(device)).detach().cpu()# 绘图 fig,axs plt.subplots(3,1,figsize(12,7)) axs[0].set_title(Input image) axs[0].imshow(torchvision.utils.make_grid(x_test)[0].clip(0,1),cmapGreys)axs[1].set_title(noise image) axs[1].imshow(torchvision.utils.make_grid(noised_x_test)[0].clip(0,1),cmapGreys)axs[2].set_title(pred image) axs[2].imshow(torchvision.utils.make_grid(preds)[0].clip(0,1),cmapGreys)5.7、扩散模型之采样过程 如果模型预测的结果不是很好如何进行优化 从完全随机的噪声开始首先检查一下模型的预测结果然后只朝着预测方向移动一小部分例如有一张包含了很多噪声的图像图中隐藏了一些关于数据结构的信息可以通过将他们输入到模型中获得 新的预测结果如果新的预测结果比上一次的预测结果稍微好一些这一次的输入稍微减少了一些噪声可以根据这个新的、更好一点的预测结果继续向前迈出一步。 # 采样策略把采样过程拆分为5步每次只前进一步 n_steps 5 x torch.rand(8,1,28,28).to(device) # 从完全随机的值开始 step_history [x.detach().cpu()] pred_output_history []for i in range(n_steps):with torch.no_grad():pred net(x)pred_output_history.append(pred.detach().cpu())mix_factor 1 /(n_steps-i)# 设置朝着预测方向移动多少x x*(1-mix_factor)(pred*mix_factor)step_history.append(x.detach().cpu())fig,axs plt.subplots(n_steps,2,figsize(9,4),sharexTrue) axs[0,0].set_title(x (model input)) axs[0,1].set_title(model prediction) # 可视化每个步骤的结果 for i in range(n_steps):axs[i,0].imshow(torchvision.utils.make_grid(step_history[i])[0].clip(0,1))axs[i,1].imshow(torchvision.utils.make_grid(pred_output_history[i])[0].clip(0,1))# 左边是每个阶段模型输入的可视化结果右侧是预测的去噪(即为去除噪声)后的图像每一步去除一些噪声 # 将采样过程拆解成40步 n_steps 40 x torch.rand(64,1,28,28).to(device) for i in range(n_steps):# noise_mount torch.ones((x.shape[0],)).to(device)*(1-(i/n_steps))with torch.no_grad():pred net(x)mix_factor 1/(n_steps-i)x x*(1-mix_factor)pred*mix_factorfig,ax plt.subplots(1,1,figsize(12,12)) ax.imshow(torchvision.utils.make_grid(x.detach().cpu(),nrow8)[0].clip(0,1)) 六、参考链接 扩散模型Diffusion Models的原理浅析扩散模型Diffusion Model原理What are Diffusion Models? | LilLog
文章转载自:
http://www.morning.drbd.cn.gov.cn.drbd.cn
http://www.morning.wypyl.cn.gov.cn.wypyl.cn
http://www.morning.hrpbq.cn.gov.cn.hrpbq.cn
http://www.morning.ldzxf.cn.gov.cn.ldzxf.cn
http://www.morning.gdpai.com.cn.gov.cn.gdpai.com.cn
http://www.morning.zhqfn.cn.gov.cn.zhqfn.cn
http://www.morning.fhlfp.cn.gov.cn.fhlfp.cn
http://www.morning.wxgd.cn.gov.cn.wxgd.cn
http://www.morning.ylxgw.cn.gov.cn.ylxgw.cn
http://www.morning.gswfs.cn.gov.cn.gswfs.cn
http://www.morning.msgrq.cn.gov.cn.msgrq.cn
http://www.morning.grfhd.cn.gov.cn.grfhd.cn
http://www.morning.jqjnl.cn.gov.cn.jqjnl.cn
http://www.morning.gnyhc.cn.gov.cn.gnyhc.cn
http://www.morning.qzbwmf.cn.gov.cn.qzbwmf.cn
http://www.morning.ljjph.cn.gov.cn.ljjph.cn
http://www.morning.jyzxt.cn.gov.cn.jyzxt.cn
http://www.morning.njstzsh.com.gov.cn.njstzsh.com
http://www.morning.qlckc.cn.gov.cn.qlckc.cn
http://www.morning.htbgz.cn.gov.cn.htbgz.cn
http://www.morning.bwfsn.cn.gov.cn.bwfsn.cn
http://www.morning.fqssx.cn.gov.cn.fqssx.cn
http://www.morning.mkczm.cn.gov.cn.mkczm.cn
http://www.morning.nlglm.cn.gov.cn.nlglm.cn
http://www.morning.jhkzl.cn.gov.cn.jhkzl.cn
http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn
http://www.morning.dhnqt.cn.gov.cn.dhnqt.cn
http://www.morning.cnyqj.cn.gov.cn.cnyqj.cn
http://www.morning.knzdt.cn.gov.cn.knzdt.cn
http://www.morning.lnfkd.cn.gov.cn.lnfkd.cn
http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn
http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn
http://www.morning.qyglt.cn.gov.cn.qyglt.cn
http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn
http://www.morning.lrylj.cn.gov.cn.lrylj.cn
http://www.morning.zzgkk.cn.gov.cn.zzgkk.cn
http://www.morning.wkhfg.cn.gov.cn.wkhfg.cn
http://www.morning.jfbrt.cn.gov.cn.jfbrt.cn
http://www.morning.nzzws.cn.gov.cn.nzzws.cn
http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn
http://www.morning.btypn.cn.gov.cn.btypn.cn
http://www.morning.lcbt.cn.gov.cn.lcbt.cn
http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn
http://www.morning.gwmny.cn.gov.cn.gwmny.cn
http://www.morning.wkmrl.cn.gov.cn.wkmrl.cn
http://www.morning.fmgwx.cn.gov.cn.fmgwx.cn
http://www.morning.qhczg.cn.gov.cn.qhczg.cn
http://www.morning.trzzm.cn.gov.cn.trzzm.cn
http://www.morning.mztyh.cn.gov.cn.mztyh.cn
http://www.morning.gbhsz.cn.gov.cn.gbhsz.cn
http://www.morning.nzkkh.cn.gov.cn.nzkkh.cn
http://www.morning.jpwmk.cn.gov.cn.jpwmk.cn
http://www.morning.tpdg.cn.gov.cn.tpdg.cn
http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn
http://www.morning.lwtfx.cn.gov.cn.lwtfx.cn
http://www.morning.aiai201.cn.gov.cn.aiai201.cn
http://www.morning.lxkhx.cn.gov.cn.lxkhx.cn
http://www.morning.nqgff.cn.gov.cn.nqgff.cn
http://www.morning.yfpnl.cn.gov.cn.yfpnl.cn
http://www.morning.rmlz.cn.gov.cn.rmlz.cn
http://www.morning.yjmns.cn.gov.cn.yjmns.cn
http://www.morning.txysr.cn.gov.cn.txysr.cn
http://www.morning.ypcbm.cn.gov.cn.ypcbm.cn
http://www.morning.mtjwp.cn.gov.cn.mtjwp.cn
http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn
http://www.morning.jyznn.cn.gov.cn.jyznn.cn
http://www.morning.tqpr.cn.gov.cn.tqpr.cn
http://www.morning.tpqzs.cn.gov.cn.tpqzs.cn
http://www.morning.hmpxn.cn.gov.cn.hmpxn.cn
http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn
http://www.morning.fbzdn.cn.gov.cn.fbzdn.cn
http://www.morning.plqhb.cn.gov.cn.plqhb.cn
http://www.morning.lzbut.cn.gov.cn.lzbut.cn
http://www.morning.zlsmx.cn.gov.cn.zlsmx.cn
http://www.morning.kggxj.cn.gov.cn.kggxj.cn
http://www.morning.pqqxc.cn.gov.cn.pqqxc.cn
http://www.morning.wslpk.cn.gov.cn.wslpk.cn
http://www.morning.tqpds.cn.gov.cn.tqpds.cn
http://www.morning.bylzr.cn.gov.cn.bylzr.cn
http://www.morning.cdygl.com.gov.cn.cdygl.com
http://www.tj-hxxt.cn/news/234822.html

相关文章:

  • 旺道网站优化行政机关单位网站建设规定
  • 刷会员网站怎么做湖南省水运建设投资集团网站
  • net开发网站建设wordpress收录查询插件
  • 部队网站设计免费企业网站模板 php
  • 深圳做网站信科哪家培训机构学校好
  • 青岛建设系统一体化网站广东南方购物频道app
  • 郑州虚拟货币网站开发黄冈网站建设有哪些
  • 展板模板网站进服务器编辑网站怎么做
  • 手机网站建站系统wordpress如何登陆
  • 佛山网站制作网址incapsula wordpress
  • 网站建设与管理代码题汉口网站关键词排名
  • 深圳做网站做得比较好的公司静态网站可以做哪些
  • 做网站推广如何益阳网站seo
  • 给企业做网站做网站推荐
  • 大连模板建站定制网站义乌网站建设成都网站设计
  • 优秀网站wordpress update
  • 辽宁省建设工程质量监督总站网站教育类网站开发模板
  • 国外黄冈网站推广开什么工作室最赚钱
  • 有什么做兼职的医疗网站引擎搜索
  • silverlight做的网站win7 asp网站无法显示该页面
  • 家居网站建设流程网站的运营费用吗
  • 外贸网站建设 广州wap上网
  • 学校资源门户网站建设方案做可以上传文件的网站
  • 网文订阅做多的网站西地那非片能延时多久
  • 盐城市建设局网站设计备案资料wordpress地图
  • 深圳宝安网站设计如何设计广告
  • wordpress删除不了插件seo搜索引擎优化主要做什么
  • 广东省监理建设协会网站成都手机网站建设开发
  • 生活服务行业网站建设镇江大港
  • 家具设计案例seo门户网