莫烦pytorch学习笔记(一)——torch or numpy

1. 用 Numpy 还是 Torch

Torch 自称为神经网络界的 Numpy, 因为他能将 torch 产生的 tensor 放在 GPU 中加速运算 (前提是你有合适的 GPU), 就像 Numpy 会把 array 放在 CPU 中加速运算.所以神经网络的话, 当然是用 Torch 的 tensor 形式数据最好咯. 就像 Tensorflow 当中的 tensor 一样.当然, 我们对 Numpy 还是爱不释手的, 因为我们太习惯 numpy 的形式了. 不过 torch 看出来我们的喜爱, 他把 torch 做的和 numpy 能很好的兼容。  

Numpy:NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高 效的多(该结构也可以用来表示矩阵(matrix))。专为进行严格的数字处理而产生。

比如这样就能自由地转换 numpy array 和 torch tensor 了:

import torch             #导入模块torch,arange()用于生成一维数组 ,reshape()将一维数组转      换为维数组

import numpy as np       #导入模块numpy并以np作为别名



np_data = np.arange(6).reshape((2, 3))       #定义np_data为一个两行三列的二维数组

torch_data = torch.from_numpy(np_data)       #将numpy数据转化为torch数据

tensor2array = torch_data.numpy()            #将torch数据转化为numpy数据

print(

    '\nnumpy array:', np_data,               # [[0 1 2], [3 4 5]]

    '\ntorch tensor:', torch_data,           #  0  1  2 \n 3  4  5    [torch.LongTensor of size 2x3]

    '\ntensor to array:', tensor2array,      # [[0 1 2], [3 4 5]]

)

2.torch中的数学运算

 2.1torch中的tensor运算和numpy的array运算很相似,具体参看下面的代码

# abs 绝对值计算

    data = [-1, -2, 1, 2]

    tensor = torch.FloatTensor(data)        # 转换成32位浮点 tensor

    print(

        '\nabs',

        '\nnumpy: ', np.abs(data),          # [1 2 1 2]

        '\ntorch: ', torch.abs(tensor)      # [1 2 1 2]

    )

   

# sin   三角函数 sin

    print(

        '\nsin',

        '\nnumpy: ', np.sin(data),      # [-0.84147098 -0.90929743  0.84147098  0.90929743]

        '\ntorch: ', torch.sin(tensor)  # [-0.8415 -0.9093  0.8415  0.9093]

    )



# mean  均值

    print(

        '\nmean',

        '\nnumpy: ', np.mean(data),         # 0.0

        '\ntorch: ', torch.mean(tensor)     # 0.0

    )

2.2 numpy和torch的矩阵乘法还是有点不同的,下面将对其区别进行展示:

# matrix multiplication 矩阵点乘

    data = [[1,2], [3,4]]

    tensor = torch.FloatTensor(data)            # 转换成32位浮点 tensor

# correct method

    print(

        '\nmatrix multiplication (matmul)',

        '\nnumpy: ', np.matmul(data, data),     # [[7, 10], [15, 22]]

        '\ntorch: ', torch.mm(tensor, tensor)   # [[7, 10], [15, 22]]

    )



# !!!!  下面是错误的方法 !!!!

# 注意这里要转换成array,因为data原来是list对象,其没有.dot操作

data = np.array(data)       

print(

    '\nmatrix multiplication (dot)',

    '\nnumpy: ', data.dot(data),                # [[7, 10], [15, 22]] 在numpy 中可行

    '\ntorch: ', tensor.dot(tensor)             # torch 会转换成 [1,2,3,4].dot([1,2,3,4]) = 30.0

)

#初学者,参考了https://blog.csdn.net/manong_wxd/article/details/78590754的笔记。在此表示感谢

猜你喜欢

转载自blog.csdn.net/liuhongkai111/article/details/81290596