1. 程式人生 > 其它 >Pytorch 0.3.0 釋出:新增張量函式,支援模型移植

Pytorch 0.3.0 釋出:新增張量函式,支援模型移植

根據官方文件的介紹,此次增加了多個函式和功能,多方面的效能均實現提升。

重大變更

0.3 版本中刪掉了 Variable.reinforce() 等隨機函式,因為它們的功能有限,並且會影響到效能。設定隨機函式的初衷是為了避免取樣值的 book-keeping,在實際中,由於各種各樣的原因,使用者的程式碼中仍然會包括 book-keeping。他們引入了 torch.distributions 包來代替隨機函式。

之前的程式碼如下:

probs = policy_network(state)
action = probs.multinomial()
next_state, reward = env.step(action)
action.reinforce(reward)
action.backward()

現在的程式碼如下:

probs = policy_network(state)
# NOTE: categorical is equivalent to what used to be called multinomial
m = torch.distributions.Categorical(probs)
action = m.sample()
next_state, reward = env.step(action)
loss = -m.log_prob(action) * reward
loss.backward()

新的功能

1、目前,有些損失函式能直接計算 mini-batch 中每個 sample 的損失值。

2、構建了一個 in-built Profiler,能對模型進行瓶頸分析,這個 Profiler 同時支援 CPU 和 CUDA 模型。

更多資訊可以參見 http://pytorch.org/docs/0.3.0/autograd.html#profiler

3、增加 Higher order gradients 模組,支援如下層:

  • ConvTranspose, AvgPool1d, AvgPool2d, LPPool2d, AvgPool3d, MaxPool1d, MaxPool2d, AdaptiveMaxPool, AdaptiveAvgPool, FractionalMaxPool2d, MaxUnpool1d, MaxUnpool2d, nn.Upsample, ReplicationPad2d, ReplicationPad3d, ReflectionPad2d
  • PReLU, HardTanh, L1Loss, SoftSign, ELU, RReLU, Hardshrink, Softplus, SoftShrink, LogSigmoid, Softmin, GLU
  • MSELoss, SmoothL1Loss, KLDivLoss, HingeEmbeddingLoss, SoftMarginLoss, MarginRankingLoss, CrossEntropyLoss
  • DataParallel

4、優化器

  • optim.SparseAdam:能實現適用於稀疏張量的簡單亞當演算法
  • 優化器中增加了 add_param_group 函式,能在構建好的優化器中增加新的引數組。

除此之外,還增加了新的張量函式和功能,在新版本中,能通過 ONNX 將模型遷移到其他框架上。另外,在加速方面,重寫 gpu kernel 之後,softmax 和 log_softmax 的速度能實現 4-256 倍的提升;在分散式 AllReduce 中,能實現 2.5-3 倍的效能提升;torch.norm 函式的 backward 能實現 1.5 倍的加速;pack_padded_sequence 的效能也有提升。