[pytorch]pytorch使用中view和reshape的区别

pytorch中view和reshape的区别

一、基本解释

“从功能上来看,它们的作用是相同的,都是用来重塑 Tensor 的 shape 的。view 只适合对满足连续性条件 (contiguous) 的 Tensor进行操作,而reshape 同时还可以对不满足连续性条件的 Tensor 进行操作,具有更好的鲁棒性。view 能干的 reshape都能干,如果 view 不能干就可以用 reshape 来处理。 如果不想继续看下去,建议所有情况都无脑使用 reshape。”

tensor中会有两个区,分别是数据存储区和头部区

  • 存储区是按照数据顺序存储的,
  • 头部信息则存储相应的索引关系 上面的a和b共用同一数据区,而头部信息是不同的,代表不同索引方式(就是从数据区取数据的方式及步长发生变化)

二、连续性的定义

如果数据区的数据头部数据区的顺序相符,就是连续的如果将一个tensor转置后,它的索引就会发生变化,此时就是不连续的

三、总结

如果采用view和reshape,尽量都保证其相应的连续性,但在使用reshape的时候,如果tensor是非连续的时候:

  • reshape会创建一个新的副本返回 此副本不和原数据共享同一数据区
  • 那么view就会报错

建议在pytorch中调用时候直接使用contiguous()

 data = image.contiguous().reshape(145 * 145, 220)
 data = image.contiguous().view(145 * 145, 220)
 data = image.reshape(145 * 145, 220)
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值