pytorch深度学习入门-1

文章目录

  • 动手学深度学习
    • 搭建自己的pytorch环境
    • 初识torch
    • 收获
    • 参考文献

动手学深度学习

发现了一个不错的教程,《动手学深度学习》,在此记录这个过程中出现的一些问题。

搭建自己的pytorch环境

这个网上的教程很多,首先配置python环境,如果就是做数据处理工作的同学,感觉就直接搭建anaconda作为自己的python环境,然后可以下载一个Pycharm作为IDE,可以理解为python代码编辑器,后面在下一下torch包(也就是所说的pytorch环境,因为我们用的是python语言,所以称之为pytorch),后面就可以开始编程了。

初识torch

接触一个新的数据处理环境,首先就是熟悉一下他的数据类型以及数据操作,torch独特的数据类型是Tensor,

"tensor"这个单词一般可译作“张量”,张量可以看作是一个多维数组。标量可以看作是0维张量,向量可以看作1维张量,矩阵可以看作是二维张量。

  • 索引

我们还可以使用类似NumPy的索引操作来访问Tensor的一部分,需要注意的是:索引出来的结果与原数据共享内存,也即修改一个,另一个会跟着修改。

感觉很像c语言的指针,有优势,但是也有劣势,目前感觉不是很方便。因为可能会我们只是希望选取一部分,后面对其进行修改,但是这样会修改原数据。
在后面,我们找到了这个问题的答案。

y = x[0, :]
y += 1
print(y)
print(x[0, :]) # 源tensor也被改了

这样的话,得到的两个输出是相同的,
但是如果上面的代码变成 y=y+1
输出的两个结果就是不一样了,

是因为 y=y+1和y+=1是不一样的

在可变元素类型中(列表、字典)“x +=1"与"x=x+1"的区别说明:
(3.1)不可变元素的类型,“x +=1"与"x=x+1"作用一样,没有区别
(3.2)可变元素的类型中,“x +=1"与"x=x+1"作用不同,区别如下:
x +=1,表示:修改x自身的值(前提是:x必须是可变对象)
x = x + 1,表示:创建一个新的"同名”对象x,并将x + 1,赋值给新创建的同名变量x(它的含义和y = x + 1相同,只不过这里将y取名为x了),x + 1赋值给新x后,旧x的指向就会被释放

所以我们上面的不方便,只要在使用的时候是y=y+1的形式变可以解决,当然在教材中也出现了clone函数,也可以以此方式实现。
:这里之所以出现这样的问题,是因为个人对于索引的理解不是很充分。+=一个是指向,另一个是需要新建对象,新开内存。
还可以使用[:] 这个符号,来指定写入到对象中去,eg:y[:]=y+x,这样就会保持y对象是不变的。

  • numpy和tensor的转换

我们很容易用numpy()和from_numpy()将Tensor和NumPy中的数组相互转换。但是需要注意的一点是: 这两个函数所产生的的Tensor和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另一个也会改变!!!

还有一个常用的将NumPy中的array转换成Tensor的方法就是torch.tensor(), 需要注意的是,此方法总是会进行数据拷贝(就会消耗更多的时间和空间),所以返回的Tensor和原来的数据不再共享内存。
实践得知:Tensor转array时,使用numpy.array(),这样也是不会共享内存的。

收获

感觉对于内存的开销理解有所加深。在面对大数据处理时,我们应该注意内存的开销,选择合适的创建变量(对象)的方式。

如有问题,欢迎指正。
侵权必删

参考文献

[1] url:https://tangshusen.me/Dive-into-DL-PyTorch/
[2] url:https://blog.csdn.net/chenhyc/article/details/102668635

你可能感兴趣的:(深度学习pytorch,pytorch,深度学习,python)