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

网站外围网站怎么做培训教育网站开发

网站外围网站怎么做,培训教育网站开发,银川市做网站的公司,南京市建设工程交易中心李宏毅教学视频#xff1a; Link1 B站DDPM公式推导以及代码实现#xff1a; Link2 这个视频里面有论文里面的公式推导#xff0c;并且1小时10分开始讲解实例代码。 文章目录 扩散模型概念#xff1a;Diffusion Model工作原理#xff1a;影像生成模型本质上的共同目标B站…李宏毅教学视频 Link1 B站DDPM公式推导以及代码实现 Link2 这个视频里面有论文里面的公式推导并且1小时10分开始讲解实例代码。 文章目录 扩散模型概念Diffusion Model工作原理影像生成模型本质上的共同目标B站简单示例代码讲解 扩散模型概念 就像石头里面已经有了雕塑只需要看我们怎么把其他多余的部分去掉。 注意观察我们每一个Denoise阶段都不一样因为每一个阶段传入的图片以及需要处理的noise都不一样并且直接产生图片比直接产生噪音更难所以我们通过预测noise来解决问题。 比如下图所示step2是我们加的噪声那么传入input和2的时候就希望预测出gt了然后进行相减得到step1的图片。 Diffusion Model工作原理 VAE和Diffusion的区别 先看整个训练过程: 实际结果和我们想的是不一样的。训练时通过X0和噪声得到一个图逆向的时候输入t和生成的图来得到噪音。想象的是一点一点加入噪音实际上是直接加进去的。 推断时刻theat是带有参数的网络。 影像生成模型本质上的共同目标 通过采样一个高深distribution生成一个图片。希望生成的图片和真实的图片的distribution很接近。 那么怎么衡量这两个分布的接近程度呢多数采用的都是Maximum liklihood Estimation. 我们希望我们采样的数据能够通过theta网络计算出来的概率越大越好。 通过数学变换将概率最大变为Pdata和Ptheat这两个distribution的KL散度最小。 VAE的下界 Ptheat(x)表示通过theta产生x的概率。 DDPM计算Ptheta(x)的方法 下图表示产生X0的概率。 两者对比 接下来需要计算q(x1|x0)此类公式。 计算方法X1到X2的计算方法在论文中有提及。 两个高斯分布都是服从N(0,1),相加的话还是一个高斯分布并且还是服从N01,只是前面系数会发生变化。系数的话是根号下面数字相加。所以相加之后均值还是为0方差a方加b方即可这个在另外一个视频里面有讲解。 经过一番推导之后得到 之后计算最下面三项 通过以下推导 之后通过X0,Xt可以得到Xt-1的分布。 可以看到前面一项的mean 和 variance是固定的第二项的variance也是固定的因此我们需要把第二项的mean变得和第一项的接近。 那么怎么minimiaze这个mean呢希望用Xt去预测出来那个mean。 经过推导 最终得到下图 里面beta可以学习但是效果不好所以使用线性固定。最后加上一个噪声猜测是为了增强鲁棒性并且本身就是从噪声开始不加噪声的话可能不会生成图片。 B站简单示例代码讲解 # 加载数据集 %matplotlib inline import matplotlib.pyplot as plt import numpy as np from sklearn.datasets import make_s_curve import torchs_curve,_ make_s_curve(10**4,noise0.1) print(np.shape(s_curve)) s_curve s_curve[:,[0,2]]/10.0print(shape of s:,np.shape(s_curve))data s_curve.Tfig,ax plt.subplots() ax.scatter(*data,colorblue,edgecolorwhite);ax.axis(off)dataset torch.Tensor(s_curve).float()# 2确定超参数的值 num_steps 100 #制定每一步的beta betas torch.linspace(-6,6,num_steps) betas torch.sigmoid(betas)*(0.5e-2 - 1e-5)1e-5 ​ #计算alpha、alpha_prod、alpha_prod_previous、alpha_bar_sqrt等变量的值 alphas 1-betas alphas_prod torch.cumprod(alphas,0) # print(alphas_prod) alphas_prod_p torch.cat([torch.tensor([1]).float(),alphas_prod[:-1]],0) # print(alphas_prod_p) alphas_bar_sqrt torch.sqrt(alphas_prod) one_minus_alphas_bar_log torch.log(1 - alphas_prod) one_minus_alphas_bar_sqrt torch.sqrt(1 - alphas_prod) ​ assert alphas.shapealphas_prod.shapealphas_prod_p.shape\ alphas_bar_sqrt.shapeone_minus_alphas_bar_log.shape\ one_minus_alphas_bar_sqrt.shape print(all the same shape,betas.shape)、确定扩散过程任意时刻的采样值#3 计算任意时刻的x采样值基于x_0和重参数化 def q_x(x_0,t):可以基于x[0]得到任意时刻t的x[t]noise torch.randn_like(x_0)alphas_t alphas_bar_sqrt[t]alphas_1_m_t one_minus_alphas_bar_sqrt[t]return (alphas_t * x_0 alphas_1_m_t * noise)#在x[0]的基础上添加噪声 j # 4 演示原始数据分布加噪100步后的结果num_shows 20 fig,axs plt.subplots(2,10,figsize(28,3)) plt.rc(text,colorblack) ​ #共有10000个点每个点包含两个坐标 #生成100步以内每隔5步加噪声后的图像 for i in range(num_shows):j i//10k i%10q_i q_x(dataset,torch.tensor([i*num_steps//num_shows]))#生成t时刻的采样数据axs[j,k].scatter(q_i[:,0],q_i[:,1],colorred,edgecolorwhite)axs[j,k].set_axis_off()axs[j,k].set_title($q(\mathbf{x}_{str(i*num_steps//num_shows)})$)# 5 编写拟合逆扩散过程高斯分布的模型import torch import torch.nn as nn ​ class MLPDiffusion(nn.Module):def __init__(self,n_steps,num_units128):super(MLPDiffusion,self).__init__()self.linears nn.ModuleList([nn.Linear(2,num_units),nn.ReLU(),nn.Linear(num_units,num_units),nn.ReLU(),nn.Linear(num_units,num_units),nn.ReLU(),nn.Linear(num_units,2),])self.step_embeddings nn.ModuleList([nn.Embedding(n_steps,num_units),nn.Embedding(n_steps,num_units),nn.Embedding(n_steps,num_units),])def forward(self,x,t): # x x_0for idx,embedding_layer in enumerate(self.step_embeddings):t_embedding embedding_layer(t)x self.linears[2*idx](x)x t_embeddingx self.linears[2*idx1](x)x self.linears[-1](x)return xloss_fn 就是Lsimple得表达式。通过传入参数生成一个随机噪声并且送入model里面那么上面也讲了model的作用是根据X0,和t预测出我们应该减去的噪声所以损失函数就是用生成的噪声减去预测的噪声。 # 6 编写训练的误差函数 def diffusion_loss_fn(model,x_0,alphas_bar_sqrt,one_minus_alphas_bar_sqrt,n_steps):对任意时刻t进行采样计算lossbatch_size x_0.shape[0]#对一个batchsize样本生成随机的时刻tt torch.randint(0,n_steps,size(batch_size//2,))t torch.cat([t,n_steps-1-t],dim0)t t.unsqueeze(-1)#x0的系数a alphas_bar_sqrt[t]#eps的系数aml one_minus_alphas_bar_sqrt[t]#生成随机噪音epse torch.randn_like(x_0)#构造模型的输入x x_0*ae*aml#送入模型得到t时刻的随机噪声预测值output model(x,t.squeeze(-1))#与真实噪声一起计算误差求平均值return torch.pow((e - output),2).mean() # 7、编写逆扩散采样函数inferencedef p_sample_loop(model,shape,n_steps,betas,one_minus_alphas_bar_sqrt):从x[T]恢复x[T-1]、x[T-2]|...x[0]cur_x torch.randn(shape)x_seq [cur_x]for i in reversed(range(n_steps)):cur_x p_sample(model,cur_x,i,betas,one_minus_alphas_bar_sqrt)x_seq.append(cur_x)return x_seq ​ def p_sample(model,x,t,betas,one_minus_alphas_bar_sqrt):从x[T]采样t时刻的重构值t torch.tensor([t])coeff betas[t] / one_minus_alphas_bar_sqrt[t]eps_theta model(x,t)mean (1/(1-betas[t]).sqrt())*(x-(coeff*eps_theta))z torch.randn_like(x)sigma_t betas[t].sqrt()sample mean sigma_t * zreturn (sample) # 8、开始训练模型打印loss及中间重构效果seed 1234 ​ class EMA():构建一个参数平滑器def __init__(self,mu0.01):self.mu muself.shadow {}def register(self,name,val):self.shadow[name] val.clone()def __call__(self,name,x):assert name in self.shadownew_average self.mu * x (1.0-self.mu)*self.shadow[name]self.shadow[name] new_average.clone()return new_averageprint(Training model...) batch_size 128 dataloader torch.utils.data.DataLoader(dataset,batch_sizebatch_size,shuffleTrue) num_epoch 4000 plt.rc(text,colorblue) ​ model MLPDiffusion(num_steps)#输出维度是2输入是x和step optimizer torch.optim.Adam(model.parameters(),lr1e-3) ​ for t in range(num_epoch):for idx,batch_x in enumerate(dataloader):loss diffusion_loss_fn(model,batch_x,alphas_bar_sqrt,one_minus_alphas_bar_sqrt,num_steps)optimizer.zero_grad()loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),1.)optimizer.step()if(t%1000):print(loss)x_seq p_sample_loop(model,dataset.shape,num_steps,betas,one_minus_alphas_bar_sqrt)fig,axs plt.subplots(1,10,figsize(28,3))for i in range(1,11):cur_x x_seq[i*10].detach()axs[i-1].scatter(cur_x[:,0],cur_x[:,1],colorred,edgecolorwhite);axs[i-1].set_axis_off();axs[i-1].set_title($q(\mathbf{x}_{str(i*10)})$)最后的演示 动画演示扩散过程和逆扩散过程import io from PIL import Image ​ imgs [] for i in range(100):plt.clf()q_i q_x(dataset,torch.tensor([i]))plt.scatter(q_i[:,0],q_i[:,1],colorred,edgecolorwhite,s5);plt.axis(off);img_buf io.BytesIO()plt.savefig(img_buf,formatpng)img Image.open(img_buf)imgs.append(img) mg Image.open(img_buf)reverse.append(img) reverse [] for i in range(100):plt.clf()cur_x x_seq[i].detach()plt.scatter(cur_x[:,0],cur_x[:,1],colorred,edgecolorwhite,s5);plt.axis(off)img_buf io.BytesIO()plt.savefig(img_buf,formatpng)img Image.open(img_buf)reverse.append(img) ​ imgs imgs reverse imgs[0].save(diffusion.gif,formatGIF,append_imagesimgs,save_allTrue,duration100,loop0)
http://www.zqtcl.cn/news/790128/

相关文章:

  • 仿制网站建设oa办公系统官网
  • 深圳网站托管企业建站源码系统
  • 个人空间网站建设报告建站是什么东西
  • 好看的模板网站建设西安网站模板建站
  • 建设网站二级子页打不开广告设计平面设计培训班
  • 网站公司做网站要多少钱新乡
  • 天津谁做网站莱芜人才网招聘网
  • 学做网站的书籍自己做网站 最好的软件
  • 手机网站专题电商入门视频教程免费
  • aspx网站模板制作网页常用的软件有哪些
  • 网站主关键词湖南网站定制
  • 长沙seo网站排名优化公司进入秦皇岛最新规定
  • 企业网站优化平台宝山北京网站建设
  • 给人做代工的网站加盟代理网
  • 网站建设用dw电脑谷歌浏览器打开是2345网址导航
  • 做外贸一般总浏览的网站太原的网站建设公司哪家好
  • 台州建网站公司wordpress 用微信登陆
  • 广州白云网站建设家在深圳业主
  • 呼和浩特网站建设哪家最便宜?携程旅行网网站策划书
  • 网站建设及相关流程北京网站备案域名
  • 汉字叔叔花了多少钱做网站微商城科技
  • 网站代理被抓html网站开发实战
  • 如何建立免费的网站网站copyright写法
  • 官方网站下载12306合肥有没有做网站的单位
  • 甘露园网站建设网站框架图片
  • 做网站怎样赚卖流量石家庄网站建设联系电话
  • wordpress 图片网站本地免费发布信息网站
  • 建设网站和别人公司重名新乡建设招标投标网站
  • 四川省建设厅网站证想开个网站怎样开公司
  • 做机械一般做那个外贸网站电商软件开发费用