tips:python:pytorch:start
差分
このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
| tips:python:pytorch:start [2020/04/23 08:12] – 作成 yuuho | tips:python:pytorch:start [2022/01/27 03:24] (現在) – [未整理メモ] yuuho | ||
|---|---|---|---|
| 行 83: | 行 83: | ||
| TODO | TODO | ||
| + | |||
| + | ==== grid について ==== | ||
| + | ダサい? | ||
| + | <code python> | ||
| + | y_map = torch.zeros((1, | ||
| + | + torch.arange(start=0, | ||
| + | x_map = torch.zeros((H, | ||
| + | + torch.arange(start=0, | ||
| + | coord_map = torch.cat([x_map, | ||
| + | </ | ||
| + | |||
| + | <code python> | ||
| + | torch.stack( torch.meshgrid( | ||
| + | torch.arange(W, | ||
| + | torch.arange(H, | ||
| + | | ||
| + | </ | ||
| + | |||
| + | 今度、速度比較したい。 | ||
| ==== nn.Module ==== | ==== nn.Module ==== | ||
| 行 88: | 行 107: | ||
| '' | '' | ||
| '' | '' | ||
| + | |||
| + | ==== print関数の調整 ==== | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | * precision : 桁数 | ||
| + | * threshold : 省略する個数の閾値 | ||
| + | * edgeitems : 真ん中省略するときの最初と最後の個数 | ||
| + | * linewidth : 一行の最大文字数 | ||
| + | * profile | ||
| + | * sci_mode | ||
| + | |||
| + | |||
| + | |||
| + | ===== torchvision ===== | ||
| + | |||
| + | vgg, inception, resnet などの入力は 3チャンネル、range 0-1 | ||
| + | ===== backward を自前で定義 ===== | ||
| + | |||
| + | ==== 既製のものの動作を確認する ==== | ||
| + | |||
| + | あるモジュールがあり、'' | ||
| + | 準備として、全ての始点変数('' | ||
| + | また、途中計算のすべての変数を '' | ||
| + | こうすると、 | ||
| + | 逆伝播を '' | ||
| + | すべての変数に対して '' | ||
| + | |||
| + | |||
| + | === conv の逆伝播を自前で作る === | ||
| + | |||
| + | <code python> | ||
| + | # x (N,iC,H,W) | ||
| + | # w (oC, | ||
| + | # b (oC,) | ||
| + | y = F.conv2d(x, | ||
| + | |||
| + | dLdy | ||
| + | dLdb = dLdy.sum(dim=(0, | ||
| + | dLdx = F.conv_transpose2d( dLdy, w, padding=padding) | ||
| + | dLdw = torch.flip( F.conv2d( dLdy.permute(1, | ||
| + | x.permute(1, | ||
| + | # (oC,N,H,W) conv (iC,N,H,W) -> (oC, | ||
| + | # flip is [:,:,:: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== 自作関数 ==== | ||
| + | |||
| + | '' | ||
| + | 中に staticmethod として '' | ||
| + | 持っておくと動く。 | ||
| + | |||
| + | '' | ||
| + | この '' | ||
| + | |||
| + | '' | ||
| + | '' | ||
| + | |||
| + | このクラスの '' | ||
| + | ===== カスタム ===== | ||
| + | |||
| + | |||
| ==== pytorchコードリーディング ==== | ==== pytorchコードリーディング ==== | ||
| 行 100: | 行 182: | ||
| + | ==== ビルド ==== | ||
| + | PyTorch1.5からビルドシステムにちょっと変更が入った? | ||
| + | マルチスレッドな Ninja に対応したことで '' | ||
| + | '' | ||
| + | |||
| + | |||
| + | |||
| + | ===== 未整理メモ ===== | ||
| + | |||
| + | === nn.Module やそれに所属するメソッドをprintしようとしたときの挙動 === | ||
| + | |||
| + | クラス内のメソッド (クラスメソッド、インスタンスメソッド両方) を print() すると | ||
| + | 以下のように描画される。 | ||
| + | |||
| + | < | ||
| + | |||
| + | インスタンスのクラスなどに '' | ||
| + | |||
| + | |||
| + | nn.Module は '' | ||
| + | nn.Module またはそれから継承したクラスのメソッドを print() すると | ||
| + | |||
| + | < | ||
| + | <bound method メソッド名 of クラス名( | ||
| + | クラスに存在している Module を print() したもの | ||
| + | )> | ||
| + | </ | ||
| + | |||
| + | ちなみにクラスに対してあとからメソッドを追加するときは | ||
| + | '' | ||
| + | 前者は function となり後者は method となる。 | ||
tips/python/pytorch/start.1587629570.txt.gz · 最終更新: 2020/04/23 08:12 by yuuho
