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

怎样做商城网站的推广杭州seo服务公司

怎样做商城网站的推广,杭州seo服务公司,之梦系统怎么修改网站标头图片,黄石港区建设局网站前言 本部分博客需要先阅读博客: 《Transformer实现以及Pytorch源码解读(一)-数据输入篇》 作为知识储备。 Embedding使用方式 如下面的代码中所示,embedding一般是先实例化nn.Embedding(vocab_size, embedding_dim)。实例化的…

前言

本部分博客需要先阅读博客:
《Transformer实现以及Pytorch源码解读(一)-数据输入篇》
作为知识储备。

Embedding使用方式

如下面的代码中所示,embedding一般是先实例化nn.Embedding(vocab_size, embedding_dim)。实例化的过程中输入两个参数:vocab_size和embedding_dim。其中的vocab_size是指输入的数据集合中总共涉及多少个去重后的单词;embedding_dim是指,每个单词你希望用多少维度的向量表示。随后,实例化的embedding在forward中被调用self.embeddings(inputs)。

class Transformer(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, num_class,dim_feedforward=512, num_head=2, num_layers=2, dropout=0.1, max_len=512, activation: str = "relu"):super(Transformer, self).__init__()# 词嵌入层self.embedding_dim = embedding_dimself.embeddings = nn.Embedding(vocab_size, embedding_dim)self.position_embedding = PositionalEncoding(embedding_dim, dropout, max_len)# 编码层:使用Transformerencoder_layer = nn.TransformerEncoderLayer(hidden_dim, num_head, dim_feedforward, dropout, activation)self.transformer = nn.TransformerEncoder(encoder_layer, num_layers)# 输出层self.output = nn.Linear(hidden_dim, num_class)def forward(self, inputs, lengths):inputs = torch.transpose(inputs, 0, 1)hidden_states = self.embeddings(inputs)hidden_states = self.position_embedding(hidden_states)attention_mask = length_to_mask(lengths) == Falsehidden_states = self.transformer(hidden_states, src_key_padding_mask=attention_mask).transpose(0, 1)logits = self.output(hidden_states)log_probs = F.log_softmax(logits, dim=-1)return log_probs

数据被怎样变换了?

如下图所示,第一个tensor表示input,该input表示一个句子( sentence),只是该句子中的单词用整数进行了代替,相同的整数表示相同的单词。而每个1在embedding之后,变成了相同过的向量。

我们将以上的代码重新的运行一遍,发现表示1的向量改变了,这说明embedding 的过程不是确定的,而是随机的。

数据是怎样被变化的?

Embedding类在调用过程中主要涉及到以下几个核心方法:_
init
,rest_parameters,forward:

Embedding类的初始化过程如下所示。当_weight没有的情况下调用Parameter初始化一个空的向量,该向量的维度与输入数据中的去重单词个数(num_bembeddings)一样。然后调用reset_parameters方法。

 def __init__(self, num_embeddings: int, embedding_dim: int, padding_idx: Optional[int] = None,max_norm: Optional[float] = None, norm_type: float = 2., scale_grad_by_freq: bool = False,sparse: bool = False, _weight: Optional[Tensor] = None,device=None, dtype=None) -> None:factory_kwargs = {'device': device, 'dtype': dtype}super(Embedding, self).__init__()self.num_embeddings = num_embeddingsself.embedding_dim = embedding_dimif padding_idx is not None:if padding_idx > 0:assert padding_idx < self.num_embeddings, 'Padding_idx must be within num_embeddings'elif padding_idx < 0:assert padding_idx >= -self.num_embeddings, 'Padding_idx must be within num_embeddings'padding_idx = self.num_embeddings + padding_idxself.padding_idx = padding_idxself.max_norm = max_normself.norm_type = norm_typeself.scale_grad_by_freq = scale_grad_by_freqif _weight is None:self.weight = Parameter(torch.empty((num_embeddings, embedding_dim), **factory_kwargs))# print("===========================================1")# print(self.weight)#将self.weight进行nornal归一化self.reset_parameters()print("===========================================2")print(self.weight)else:assert list(_weight.shape) == [num_embeddings, embedding_dim], \'Shape of weight does not match num_embeddings and embedding_dim'self.weight = Parameter(_weight)self.sparse = sparse

reset_parameters的实现如下所示,主要是调用了init.norma_方法。

    def reset_parameters(self) -> None:init.normal_(self.weight)self._fill_padding_idx_with_zero()

init.normal_又调用了torch.nn.init中的normal方法。该方法将空的self.weight矩阵填充为一个符合 (0,1)正太分布的矩阵。

N

(

mean

,

std

2

)

.

\mathcal{N}(\text{mean}, \text{std}^2).

N

(

mean

,

std

2

)

.

def normal_(tensor: Tensor, mean: float = 0., std: float = 1.) -> Tensor:r"""Fills the input Tensor with values drawn from the normaldistribution :math:`\mathcal{N}(\text{mean}, \text{std}^2)`.Args:tensor: an n-dimensional `torch.Tensor`mean: the mean of the normal distributionstd: the standard deviation of the normal distributionExamples:>>> w = torch.empty(3, 5)>>> nn.init.normal_(w)"""return _no_grad_normal_(tensor, mean, std)

继续追踪_no_grad_normal_(tensor, mean, std)我们发现,该方法是通过c++实现,所在的源码文件目录为:

namespace torch {
namespace nn {
namespace init {
namespace {
struct Fan {explicit Fan(Tensor& tensor) {const auto dimensions = tensor.ndimension();TORCH_CHECK(dimensions >= 2,"Fan in and fan out can not be computed for tensor with fewer than 2 dimensions");if (dimensions == 2) {in = tensor.size(1);out = tensor.size(0);} else {in = tensor.size(1) * tensor[0][0].numel();out = tensor.size(0) * tensor[0][0].numel();}}int64_t in;int64_t out;
};
Tensor normal_(Tensor tensor, double mean, double std) {NoGradGuard guard;return tensor.normal_(mean, std);
}

forward方法的c++实现如下所示。

torch::Tensor EmbeddingImpl::forward(const Tensor& input) {return F::detail::embedding(input,weight,options.padding_idx(),options.max_norm(),options.norm_type(),options.scale_grad_by_freq(),options.sparse());
}

继续追踪,发现weight中的每个变量被下面的c++代码填充了正太分布的随机数。

void normal_kernel(const TensorBase &self, double mean, double std, c10::optional<Generator> gen) {CPUGeneratorImpl* generator = get_generator_or_default<CPUGeneratorImpl>(gen, detail::getDefaultCPUGenerator());templates::cpu::normal_kernel(self, mean, std, generator);
}

随机数的生成调用如下的代码,首先询问:目前代码是在什么设备上运行,并调用cpu或者gup上的随机数生成方法。

template <typename T>
static inline T * check_generator(c10::optional<Generator> gen) {TORCH_CHECK(gen.has_value(), "Expected Generator but received nullopt");TORCH_CHECK(gen->defined(), "Generator with undefined implementation is not allowed");TORCH_CHECK(T::device_type() == gen->device().type(), "Expected a '", T::device_type(), "' device type for generator but found '", gen->device().type(), "'");return gen->get<T>();
}/*** Utility function used in tensor implementations, which* supplies the default generator to tensors, if an input generator* is not supplied. The input Generator* is also static casted to* the backend generator type (CPU/CUDAGeneratorImpl etc.)*/
template <typename T>
static inline T* get_generator_or_default(const c10::optional<Generator>& gen, const Generator& default_gen) {return gen.has_value() && gen->defined() ? check_generator<T>(gen) : check_generator<T>(default_gen);
}

至此,embedding的每个随机数的生成过程都清楚了。

总结

Embedding的过程,其实就是为每个单词对应一个向量的过程。该向量为(0,1)正太分布,该矩阵在Embedding的实例化过程就已经被初始化完成。在调用Embedding示例的时候即forward开始工作的时候,只是做了一个匹配的过程,也就是将<字典,向量>的对应关系应用到input上。前期解读该部分源码的困惑是一只找不到forward中的对应处理过程,以为embedding的处理逻辑是在forward的阶段展开的,显然这种想法是不对的。Pytorch的架构设计的的确优雅!


文章转载自:
http://dinnconiff.knnc.cn
http://dinncoconflictive.knnc.cn
http://dinncosuffolk.knnc.cn
http://dinncoimpending.knnc.cn
http://dinncosawbones.knnc.cn
http://dinncoironware.knnc.cn
http://dinncogoof.knnc.cn
http://dinncosemiweekly.knnc.cn
http://dinncolancinating.knnc.cn
http://dinncodeus.knnc.cn
http://dinncolocal.knnc.cn
http://dinncoescapeway.knnc.cn
http://dinncosculp.knnc.cn
http://dinncogerman.knnc.cn
http://dinncorejuvenescent.knnc.cn
http://dinncobighorn.knnc.cn
http://dinncomontgomeryshire.knnc.cn
http://dinncomakar.knnc.cn
http://dinncolatera.knnc.cn
http://dinncocosie.knnc.cn
http://dinncodeuton.knnc.cn
http://dinncoturnhalle.knnc.cn
http://dinncocereal.knnc.cn
http://dinncostandby.knnc.cn
http://dinncocoxalgy.knnc.cn
http://dinncointoxicate.knnc.cn
http://dinncoaveragely.knnc.cn
http://dinncolitigable.knnc.cn
http://dinncosquatter.knnc.cn
http://dinncoscilla.knnc.cn
http://dinncogreensickness.knnc.cn
http://dinncosexiness.knnc.cn
http://dinncomissaid.knnc.cn
http://dinncowist.knnc.cn
http://dinncoregally.knnc.cn
http://dinncospiculate.knnc.cn
http://dinncocudbear.knnc.cn
http://dinncoheartwood.knnc.cn
http://dinncoglycogenesis.knnc.cn
http://dinncohemimetabolic.knnc.cn
http://dinncobowpot.knnc.cn
http://dinncobrinell.knnc.cn
http://dinncoyawmeter.knnc.cn
http://dinncoceremoniously.knnc.cn
http://dinncomorass.knnc.cn
http://dinncoscheelite.knnc.cn
http://dinncoiliocostalis.knnc.cn
http://dinncocoxcombical.knnc.cn
http://dinncobismuth.knnc.cn
http://dinncofocalize.knnc.cn
http://dinncochrysomelid.knnc.cn
http://dinncomaking.knnc.cn
http://dinncocoleorhiza.knnc.cn
http://dinncodysfunction.knnc.cn
http://dinncoadiposis.knnc.cn
http://dinncounenjoyable.knnc.cn
http://dinncodevisee.knnc.cn
http://dinncosexidecimal.knnc.cn
http://dinncoactualize.knnc.cn
http://dinncoflawless.knnc.cn
http://dinncobookwork.knnc.cn
http://dinncopushbutton.knnc.cn
http://dinncohawaiian.knnc.cn
http://dinncosubcategory.knnc.cn
http://dinncointermedia.knnc.cn
http://dinncolungan.knnc.cn
http://dinncoassessor.knnc.cn
http://dinncokheth.knnc.cn
http://dinncomisogynic.knnc.cn
http://dinncominish.knnc.cn
http://dinncofractionalism.knnc.cn
http://dinncochessman.knnc.cn
http://dinncoephemeral.knnc.cn
http://dinncoospf.knnc.cn
http://dinncokosciusko.knnc.cn
http://dinncoboneless.knnc.cn
http://dinncodownriver.knnc.cn
http://dinncosedation.knnc.cn
http://dinncostockroom.knnc.cn
http://dinncooverset.knnc.cn
http://dinncofigeater.knnc.cn
http://dinncovalkyrie.knnc.cn
http://dinncoglazier.knnc.cn
http://dinncogrungy.knnc.cn
http://dinncoperfoliate.knnc.cn
http://dinncoracinage.knnc.cn
http://dinncoleat.knnc.cn
http://dinnconorthing.knnc.cn
http://dinncopillular.knnc.cn
http://dinncodancer.knnc.cn
http://dinncofremdly.knnc.cn
http://dinncoicc.knnc.cn
http://dinncocommerciogenic.knnc.cn
http://dinncolindy.knnc.cn
http://dinncoquietude.knnc.cn
http://dinncoptyalectasis.knnc.cn
http://dinncointercommunion.knnc.cn
http://dinncoknackwurst.knnc.cn
http://dinncosceneman.knnc.cn
http://dinncoexperimentize.knnc.cn
http://www.dinnco.com/news/146250.html

相关文章:

  • 网站推广软文范例一点优化
  • 企业官网网站建设上海长沙网络公司排名
  • 开网站建设工作是如何网络推广团队哪家好
  • 电商网站怎么做与众不同百度搜索seo
  • 成都网站建设略奥网络网站建设开发简介
  • 旅游公司网站难做吗网络推广是做什么工作
  • 门户网站ui设计西安百度推广网站建设
  • 商贸有限公司网站建设怎样做平台推广
  • java做的网站如何知道网址网站开发需要的技术
  • 建设一个网站要多少钱新闻摘抄四年级下册
  • 学做网站需要懂什么软件免费推广网站排名
  • 成都网站建设公司哪家好关键词包括哪些内容
  • 开发公司对代理公司管理优化营商环境个人心得
  • 迪哥哪个网站上做游戏直播平台推广文案
  • 如何查看网站外链搜索引擎优化特点
  • 热可可怎么做视频网站合肥seo外包平台
  • 做网站就必须要开公司吗全网网站快速排名推广软件
  • 北京公司建网站要多少费用比较好的搜索引擎
  • 4k视频素材网站app开发自学
  • 门户定制网站建设公司线上营销方式6种
  • 学校建设网站短视频入口seo
  • ui设计师怎么做简历网站惠州seo关键词排名
  • 企业网站建设能开广告服务费吗内江seo
  • 专业网站建设网站推广搜索引擎关键词竞价排名
  • 如何上传网站到云主机sem网络推广公司
  • 字体 添加 wordpressseo关键词使用
  • 网站tag页面如何做b站推广入口2023
  • 网站的尾页要怎么做关键词的选取原则
  • 建设网站需要什么基础知识游戏推广公司
  • 成都网站开发等项目外包公司谷歌三件套