reshape, resize_, view 区别是什么?怎么选择?
假设数据 weights包含5个数据, 想把它变成 5行1列的形状。
1. reshape
输入.reshape(5, 1);reshape的作用是返回一个新的张量 其中的数据和 weights的一样,即在内存地址中存储的相同数据。
它将创建一个新的张量,形状是你要求的形状,但内存中的实际数据没有改变,这种情况有时候会发生,有时候 它会返回克隆版本,也就是说 它将数据复制到内存的另一个部分,然后返回在此内存部分存储的张量。也就是说,复制数据比直接更改张量形状(不克隆数据),效率要低。
2. resize_
resize_ 末尾有个下划线,下划线表示这个方法是原地操作
resize_的问题在于
如果请求的形状比原始张量的元素多或少,你可能会丢失数据
或者使用未初始化的内存,创建虚假的数据
通常这时候,如果可以在你把原始数量的元素更改为不同数量的元素的时 进行报错,这个方法 就是 .view
3. view
.view是我常用的,它会返回一个新张量,包含的数据和weights在内存中的一样,它只是返回一个新的张量,不会更改内存中的任何数据
如果你想获取新的尺寸,使张量具有新的形状和不同数量的元素,就会报错
使用.view可以确保:在更改weights的形状时,始终获得相同数量的元素,这就是我在变形张量时 会用到这个方法的原因
总结:如果你要将weights变形为5行和1列,可以输入weights.view(5, 1)
ref:
1. Udacity课程