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

品牌网络营销推广seo策略主要包括

品牌网络营销推广,seo策略主要包括,南昌易动力网站建设公司,wordpress搜索增强2.1Tensor和Numpy Tensor和Numpy数组之间具有很高的相似性,彼此之间的互操作也非常简单高效。需要注意的是,Numpy和Tensor共享内存。由于Numpy历史悠久,支持丰富的操作,所以当遇到Tensor不支持的操作时,可先转成Numpy…

2.1Tensor和Numpy

Tensor和Numpy数组之间具有很高的相似性,彼此之间的互操作也非常简单高效。需要注意的是,Numpy和Tensor共享内存。由于Numpy历史悠久,支持丰富的操作,所以当遇到Tensor不支持的操作时,可先转成Numpy数组,处理后再转回tensor,其转换开销很小。

import numpy as np
a = np.ones([2, 3],dtype=np.float32)
a
array([[1., 1., 1.],[1., 1., 1.]], dtype=float32)
b = t.from_numpy(a)
b
tensor([[1., 1., 1.],[1., 1., 1.]])
b = t.Tensor(a) # 也可以直接将numpy对象传入Tensor
b
tensor([[1., 1., 1.],[1., 1., 1.]])
a[0, 1]=100
b
tensor([[  1., 100.,   1.],[  1.,   1.,   1.]])
c = b.numpy() # a, b, c三个对象共享内存
c
array([[  1., 100.,   1.],[  1.,   1.,   1.]], dtype=float32)

注意: 当numpy的数据类型和Tensor的类型不一样的时候,数据会被复制,不会共享内存。

a = np.ones([2, 3])
# 注意和上面的a的区别(dtype不是float32)
a.dtype
dtype('float64')
b = t.Tensor(a) # 此处进行拷贝,不共享内存
b.dtype
torch.float32
c = t.from_numpy(a) # 注意c的类型(DoubleTensor)
c
tensor([[1., 1., 1.],[1., 1., 1.]], dtype=torch.float64)
a[0, 1] = 100
b # b与a不共享内存,所以即使a改变了,b也不变
tensor([[1., 1., 1.],[1., 1., 1.]])
c # c与a共享内存
tensor([[  1., 100.,   1.],[  1.,   1.,   1.]], dtype=torch.float64)

注意: 不论输入的类型是什么,t.tensor都会进行数据拷贝,不会共享内存

tensor = t.tensor(a) 
tensor[0,0]=0
a
array([[  1., 100.,   1.],[  1.,   1.,   1.]])

广播法则(broadcast)是科学运算中经常使用的一个技巧,它在快速执行向量化的同时不会占用额外的内存/显存。
Numpy的广播法则定义如下:

  • 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分通过在前面加1补齐
  • 两个数组要么在某一个维度的长度一致,要么其中一个为1,否则不能计算
  • 当输入数组的某个维度的长度为1时,计算时沿此维度复制扩充成一样的形状

PyTorch当前已经支持了自动广播法则,但是笔者还是建议读者通过以下两个函数的组合手动实现广播法则,这样更直观,更不易出错:

  • unsqueeze或者view,或者tensor[None],:为数据某一维的形状补1,实现法则1
  • expand或者expand_as,重复数组,实现法则3;该操作不会复制数组,所以不会占用额外的空间。

注意,repeat实现与expand相类似的功能,但是repeat会把相同数据复制多份,因此会占用额外的空间。

a = t.ones(3, 2)
b = t.zeros(2, 3,1)
# 自动广播法则
# 第一步:a是2维,b是3维,所以先在较小的a前面补1 ,
#               即:a.unsqueeze(0),a的形状变成(1,3,2),b的形状是(2,3,1),
# 第二步:   a和b在第一维和第三维形状不一样,其中一个为1 ,
#               可以利用广播法则扩展,两个形状都变成了(2,3,2)
a+b
tensor([[[1., 1.],[1., 1.],[1., 1.]],[[1., 1.],[1., 1.],[1., 1.]]])
# 手动广播法则
# 或者 a.view(1,3,2).expand(2,3,2)+b.expand(2,3,2)
a[None].expand(2, 3, 2) + b.expand(2,3,2)
tensor([[[1., 1.],[1., 1.],[1., 1.]],[[1., 1.],[1., 1.],[1., 1.]]])
# expand不会占用额外空间,只会在需要的时候才扩充,可极大节省内存
e = a.unsqueeze(0).expand(10000000000000, 3,2)

2.2 内部结构

tensor的数据结构如图1-1所示。tensor分为头信息区(Tensor)和存储区(Storage),信息区主要保存着tensor的形状(size)、步长(stride)、数据类型(type)等信息,而真正的数据则保存成连续数组。由于数据动辄成千上万,因此信息区元素占用内存较少,主要内存占用则取决于tensor中元素的数目,也即存储区的大小。

一般来说一个tensor有着与之相对应的storage, storage是在data之上封装的接口,便于使用,而不同tensor的头信息一般不同,但却可能使用相同的数据。下面看两个例子。

在这里插入图片描述

a = t.arange(0, 6)
a.storage()
 012345
[torch.storage.TypedStorage(dtype=torch.int64, device=cpu) of size 6]
b = a.view(2, 3)
b.storage()
 012345
[torch.storage.TypedStorage(dtype=torch.int64, device=cpu) of size 6]
# 一个对象的id值可以看作它在内存中的地址
# storage的内存地址一样,即是同一个storage
id(b.storage()) == id(a.storage())
True
# a改变,b也随之改变,因为他们共享storage
a[1] = 100
b
tensor([[  0, 100,   2],[  3,   4,   5]])
c = a[2:] 
c.storage()
 01002345
[torch.storage.TypedStorage(dtype=torch.int64, device=cpu) of size 6]
c.data_ptr(), a.data_ptr() # data_ptr返回tensor首元素的内存地址
# 可以看出相差8,这是因为2*4=8--相差两个元素,每个元素占4个字节(float)
(4478820552016, 4478820552000)
c[0] = -100 # c[0]的内存地址对应a[2]的内存地址
a
tensor([   0,  100, -100,    3,    4,    5])
d = t.LongTensor(c.storage())
d[0] = 6666
b
tensor([[6666,  100, -100],[   3,    4,    5]])
# 下面4个tensor共享storage
id(a.storage()) == id(b.storage()) == id(c.storage()) == id(d.storage())
True
a.storage_offset(), c.storage_offset(), d.storage_offset()
(0, 2, 0)
e = b[::2, ::2] # 隔2行/列取一个元素
id(e.storage()) == id(a.storage())
True
b.stride(), e.stride()
((3, 1), (6, 2))
e.is_contiguous()
False

可见绝大多数操作并不修改tensor的数据,而只是修改了tensor的头信息。这种做法更节省内存,同时提升了处理速度。在使用中需要注意。
此外有些操作会导致tensor不连续,这时需调用tensor.contiguous方法将它们变成连续的数据,该方法会使数据复制一份,不再与原来的数据共享storage。
另外读者可以思考一下,之前说过的高级索引一般不共享stroage,而普通索引共享storage,这是为什么?(提示:普通索引可以通过只修改tensor的offset,stride和size,而不修改storage来实现)。

http://www.hotlads.com/news/2559.html

相关文章:

  • 中国建设投资集团有限公司江门seo推广公司
  • 请人做阿里巴巴网站需要注意seo站长
  • asp图片网站源码种子搜索在线 引擎
  • 太原软件开发定制免费seo视频教程
  • 微网站预约网站开发管理培训机构
  • 怎么用腾讯云做网站网站推广seo是什么
  • 建设通网站怎么投诉搜索引擎优化怎么做的
  • 湘西泸溪网站建设网络营销软件网站
  • 东风地区网站建设价格百度官方客户端
  • 网站怎么做分时手机百度安装下载
  • wordpress怎么做商城网站免费企业网站建设
  • 大型网站建设哪家好seo研究中心官网
  • 常见的网站建设技术中国体育新闻
  • 如何用html制作网站网络营销产品策略分析
  • 如何建设网站app2021时事政治热点50条
  • 企业建设网站的比例河北软文搜索引擎推广公司
  • 全球军事网站竞价专员是做什么的
  • 做网站的销售直播:韩国vs加纳直播
  • 做网站别人点击能得钱吗成都网络优化公司有哪些
  • 南庄网站建设做电商一个月能挣多少钱
  • 项目开发的主要流程步骤西安官网seo
  • seo优化杭州惠州seo外包费用
  • 企石东莞网站建设竞价托管开户
  • 平台运营是做什么的英文谷歌seo
  • 聊城网站建设费用线下引流推广方法
  • 广西南宁房产网站建设网络营销的用户创造价值
  • 权威的合肥网站推广网站排名提高
  • 高性能网站建设指南 pdf化工网站关键词优化
  • 软件工程师工作内容网络推广优化
  • 叫别人做网站安全吗关键词检测