• 0404-Tensor的持久化和向量化


    0404-Tensor的持久化和向量化作

    pytorch完整教程目录:https://www.cnblogs.com/nickchen121/p/14662511.html

    一、持久化

    和sklearn中的持久化一样,保存一个模型或者特有的数据为pkl数据。但是tensor在加载数据的时候还可以把gpu tensor映射到cpu上或者其他gpu上。

    1.1 保存模型

    if t.cuda.is_available():
        a = a.cuda(1)  # 把a转为gpu1上的tensor
        t.save(a, 'a.pkl')
    

    1.2 加载模型

    # 加载为b,存储于gpu1上(因为保存时tensor就在gpu1上)
    b = t.load('a.pkl')
    # 加载为c,存储于cpu
    c = t.load('a.pkl', map_location=lambda storage, loc: storage)
    # 加载为d,存储于gpu0上
    d = t.load('a.pkl', map_location={'cuda:1': 'cuda:0'})
    

    二、向量化

    向量化计算是一种特殊的并行计算方法,通常是对不同的数据执行同样的一个或一批指令。由于Python原生的for循环效率低下,因此可以尽可能的使用向量化的数值计算。

    def for_loop_add(x, y):
        result = []
        for i, j in zip(x, y):
            result.append(i + j)
        return t.Tensor(result)
    
    
    x = t.zeros(100)
    y = t.ones(100)
    
    %timeit -n 100 for_loop_add(x,y)
    %timeit -n 100 x+y
    
    566 µs ± 100 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    3.25 µs ± 1.63 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    

    从上面可以看见,如果自己写一个方法实现内建函数,运行时间相差200倍,因为内建函数底层大多由c/c++实现,能通过执行底层优化实现高效计算。所以平时在写代码时,应该养成向量化的思维习惯。

    三、注意事项

    除了上述讲的大多数内容,最后还有以下三点需要注意:

    1. 大多数t.function都有一个参数out,可以将其产生的结果保存在out指定的tensor之中
    2. t.set_num_threads可以设置torch进行cpu多线程并行计算时所占用的线程数,用来限制torch所占用的cpu数目
    3. t.set_printoptions可以用来设置打印tensor时的数值精度和格式
    b = t.FloatTensor()
    t.randn(2, 3, out=b)
    b
    
    tensor([[ 1.4754, -0.7392, -0.1900],
            [-0.8091,  0.2227,  0.8951]])
    
    t.set_printoptions(precision=10)
    b
    
    tensor([[ 1.4753551483, -0.7392477989, -0.1899909824],
            [-0.8091416359,  0.2227495164,  0.8951155543]])
    

    四、第四章总结

    这一章幅度较大,对于熟悉numpy的同学可能得心应手很多,如果对numpy不是特别熟悉的同学,建议先按照上述所给的教程学一遍numpy,再过来学习tensor这个数据类型,从一二维过渡到高维,也将更容易上手。

    这篇文章内容虽多,但从实用的角度来说,相对而言也比较全面,其中内容不需要全部熟稔于心,但至少得对每个方法都大概有个印象,知道有这个东西,这个东西能干啥!

  • 相关阅读:
    【转载】分布式环境Raft一致性共识算法解读
    从码农到工程师:只要做到这6点
    产品思维的修炼–技术的必修课
    工具篇
    安全测试
    测试体会
    测试题目
    软件测试工具
    常见的性能测试方法
    性能测试在软件测试的周期位置
  • 原文地址:https://www.cnblogs.com/nickchen121/p/14697546.html
Copyright © 2020-2023  润新知