zoukankan      html  css  js  c++  java
  • PyTorch学习笔记之计算图

    1. **args, **kwargs的区别

     1     def build_vocab(self, *args, **kwargs):
     2         counter = Counter()
     3         sources = []
     4         for arg in args:
     5             if isinstance(arg, Dataset):
     6                 sources += [getattr(arg, name) for name, field in
     7                             arg.fields.items() if field is self]
     8             else:
     9                 sources.append(arg)
    10         for data in sources:
    11             for x in data:
    12                 if not self.sequential:
    13                     x = [x]
    14                 counter.update(x)
    15         specials = list(OrderedDict.fromkeys(
    16             tok for tok in [self.pad_token, self.init_token, self.eos_token]
    17             if tok is not None))
    18         self.vocab = Vocab(counter, specials=specials, **kwargs)

    2. np.sum

     1 import numpy as np
     2 np.random.seed(0)
     3 
     4 N, D = 3, 4
     5 x = np.random.randn(N, D)
     6 y = np.random.randn(N, D)
     7 z = np.random.randn(N, D)
     8 
     9 a = x * y
    10 b = a + z
    11 print(b)
    12 c = np.sum(b)
    13 print(c)                # 6.7170085378
    14 
    15 # search the function of np.sum
    16 total = 0
    17 for i in range(len(b)):
    18     for j in range(4):
    19         total += b[i][j]
    20 print(total)            # 6.7170085378

    3. use numpy to solve grad

     1 import numpy as np
     2 N, D = 3, 4
     3 x = np.random.randn(N, D)
     4 y = np.random.randn(N, D)
     5 z = np.random.randn(N, D)
     6 
     7 a = x * y
     8 b = a + z
     9 # print(b)
    10 c = np.sum(b)
    11 # print(c)                # 6.7170085378
    12 
    13 grad_c = 1.0
    14 grad_b = grad_c * np.ones((N, D))
    15 grad_a = grad_b.copy()
    16 grad_z = grad_b.copy()
    17 grad_x = grad_a * y
    18 grad_y = grad_a * x
    19 
    20 print(grad_x)
    21 print(grad_y)
    22 print(grad_z)
    23 '''
    24 [[ 0.04998285  0.32809396 -0.49822878  1.36419309]
    25  [-0.52303972 -0.5881509  -0.37058995 -1.42112189]
    26  [-0.58705758 -0.26012336  1.31326911 -0.20088737]]
    27 [[ 0.14893265 -0.45509058  0.21410015  0.27659   ]
    28  [ 0.29617438  0.98971103  2.07310583 -0.0195055 ]
    29  [-1.49222601 -0.64073344 -0.18269488  0.26193553]]
    30 [[ 1.  1.  1.  1.]
    31  [ 1.  1.  1.  1.]
    32  [ 1.  1.  1.  1.]]
    33 '''

    PyTorch自动计算梯度

     1 import torch
     2 from torch.autograd import Variable
     3 
     4 N, D = 3, 4
     5 # define variables to start building a computational graph
     6 x = Variable(torch.randn(N, D), requires_grad=True)
     7 y = Variable(torch.randn(N, D), requires_grad=True)
     8 z = Variable(torch.randn(N, D), requires_grad=True)
     9 
    10 # forward pass looks just like numpy
    11 a = x * y
    12 b = a + z
    13 c = torch.sum(b)
    14 
    15 # calling c,backward() computes all gradients
    16 c.backward()
    17 print(x.grad.data)
    18 print(y.grad.data)
    19 print(z.grad.data)
    20 '''
    21 -0.9775 -0.0913  0.3710  1.5789
    22  0.0896 -0.6563  0.8976 -0.3508
    23 -0.9378  0.7028  1.4533  0.9255
    24 [torch.FloatTensor of size 3x4]
    25 
    26 
    27  0.6365  0.2388 -0.4755 -0.9860
    28 -0.2403 -0.0468 -0.0470 -1.0132
    29 -0.5019  0.5005 -1.9270  1.0030
    30 [torch.FloatTensor of size 3x4]
    31 
    32 
    33  1  1  1  1
    34  1  1  1  1
    35  1  1  1  1
    36 [torch.FloatTensor of size 3x4]
    37 '''

    x is a variable, requires_grad=True.

    x.data is a tensor.

    x.grad is a variable of gradients(same shape as x.data).

    x.grad.data is a tensor of gradients.

    4. 随机数

    (1)random.seed(int)

    • 给随机数对象一个种子值,用于产生随机序列。
    • 对于同一个种子值的输入,之后产生的随机数序列也一样。
    • 通常是把时间秒数等变化值作为种子值,达到每次运行产生的随机系列都不一样
    • seed() 省略参数,意味着使用当前系统时间生成随机数

    (2)random.random()

      生成随机浮点数

     1 import numpy as np
     2 np.random.seed(0)
     3 
     4 print(np.random.random())       # 0.5488135039273248 不随时间改变
     5 print(np.random.random())       # 0.7151893663724195 不随时间改变
     6 
     7 np.random.seed(0)
     8 print(np.random.random())       # 0.5488135039273248 不随时间改变
     9 
    10 np.random.seed()
    11 print(np.random.random())       # 0.9623797942471012 随时间改变
    12 np.random.seed()
    13 print(np.random.random())       # 0.12734792669918393 随时间改变

    (3)random.shuffle

    • 对list列表随机打乱顺序,也就是洗牌
    • shuffle只作用于list,对Str会报错比如‘abcdfed’,而['1','2','3','5','6','7']可以
     1 import numpy as np
     2 
     3 item = [1,2,3,4,5,6,7]
     4 print(item)                     # [1, 2, 3, 4, 5, 6, 7]
     5 np.random.shuffle(item)
     6 print(item)                     # [7, 1, 2, 5, 4, 6, 3]
     7 
     8 item2 = ['1','2','3']
     9 np.random.shuffle(item2)
    10 print(item2)                    # ['1', '3', '2']

    参考博客:python随机数用法

  • 相关阅读:
    正则表达式
    git指令
    前端测试 Jest/(Mocha) Typescript/Javascript Vueunitstest
    mpvue使用wxcharts.js显示各类图表
    css margintop 失效
    reduce 黑科技
    vue cli 项目创建
    css实现垂直水平居中
    MySQL基础教程之存储过程
    4组Alpha冲刺2/6
  • 原文地址:https://www.cnblogs.com/Joyce-song94/p/7218312.html
Copyright © 2011-2022 走看看