回答編集履歴
6
修正
answer
CHANGED
@@ -39,4 +39,4 @@
|
|
39
39
|
|
40
40
|
Pytorch の CPU 実装は以下です。
|
41
41
|
|
42
|
-
[pytorch/Normalization.cpp at master · pytorch/pytorch](https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/Normalization.cpp
|
42
|
+
[pytorch/Normalization.cpp at master · pytorch/pytorch](https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/Normalization.cpp)
|
5
修正
answer
CHANGED
@@ -35,4 +35,8 @@
|
|
35
35
|
params = dict(bn.named_parameters())
|
36
36
|
print("w", params["weight"].shape)
|
37
37
|
print("b", params["bias"].shape)
|
38
|
-
```
|
38
|
+
```
|
39
|
+
|
40
|
+
Pytorch の CPU 実装は以下です。
|
41
|
+
|
42
|
+
[pytorch/Normalization.cpp at master · pytorch/pytorch](https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/Normalization.cpp#L62)
|
4
修正
answer
CHANGED
@@ -11,14 +11,14 @@
|
|
11
11
|
入力が (バッチサイズ, N) としたとき、各次元ごとに平均μ_iと標準偏差σ_iを計算し、
|
12
12
|
x'_i = (x_i - μ_i) / σ_i で平均0、分散1に正規化します。
|
13
13
|
|
14
|
-
そして、推論時用に平均と
|
14
|
+
そして、推論時用に平均と標準偏差を[移動平均](https://ja.wikipedia.org/wiki/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87)で更新しながら記録します。
|
15
15
|
|
16
|
-
running_mean_i = (1 - λ) running_mean_i + λ mean_i
|
17
|
-
|
16
|
+
μ'_i = (1 - λ) μ'_{i - 1} + λ μ_i
|
17
|
+
σ'_i = (1 - λ) σ'_{i - 1} + λ σ_i
|
18
18
|
|
19
19
|
> 平均と標準偏差を用いて各バッチの入力を正規化するのに対して、推論時はどういったパラメータを用いて中間入出力の値を正規化するのか知りたい。
|
20
20
|
|
21
|
-
学習時に記録しておいたμ、σを使用して、入力データに対して x'_i = (x_i - μ_i) / σ_i を同様に適用します。
|
21
|
+
学習時に記録しておいたμ'、σ'を使用して、入力データに対して x'_i = (x_i - μ'_i) / σ'_i を同様に適用します。
|
22
22
|
|
23
23
|
以上がシンプルな Batch Noramlization ですが、一般的にはこれに加えて標準化後の出力に対して、アフィン変換を行います。(Pytorch の場合は affine=True を指定した場合)
|
24
24
|
|
3
修正
answer
CHANGED
@@ -33,6 +33,6 @@
|
|
33
33
|
|
34
34
|
# アフィン変換 wX + b のパラメータ (affine=True の場合)
|
35
35
|
params = dict(bn.named_parameters())
|
36
|
-
print("
|
36
|
+
print("w", params["weight"].shape)
|
37
37
|
print("b", params["bias"].shape)
|
38
38
|
```
|
2
修正
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
入力が (バッチサイズ, N) としたとき、各次元ごとに平均μ_iと標準偏差σ_iを計算し、
|
12
12
|
x'_i = (x_i - μ_i) / σ_i で平均0、分散1に正規化します。
|
13
13
|
|
14
|
-
そして、推論時用に平均と分散を[移動平均](https://ja.wikipedia.org/wiki/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87)で更新します。
|
14
|
+
そして、推論時用に平均と分散を[移動平均](https://ja.wikipedia.org/wiki/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87)で更新しながら記録します。
|
15
15
|
|
16
16
|
running_mean_i = (1 - λ) running_mean_i + λ mean_i
|
17
17
|
running_std_i = (1 - λ) running_std_i + λ std_i
|
1
修正
answer
CHANGED
@@ -18,9 +18,9 @@
|
|
18
18
|
|
19
19
|
> 平均と標準偏差を用いて各バッチの入力を正規化するのに対して、推論時はどういったパラメータを用いて中間入出力の値を正規化するのか知りたい。
|
20
20
|
|
21
|
-
学習時に記録しておいたμ、σを使用して、入力データに対して
|
21
|
+
学習時に記録しておいたμ、σを使用して、入力データに対して x'_i = (x_i - μ_i) / σ_i を同様に適用します。
|
22
22
|
|
23
|
-
以上がシンプルな Batch Noramlization ですが、一般的にはこれに加えて標準化後の出力に対して、アフィン変換を行います。(
|
23
|
+
以上がシンプルな Batch Noramlization ですが、一般的にはこれに加えて標準化後の出力に対して、アフィン変換を行います。(Pytorch の場合は affine=True を指定した場合)
|
24
24
|
|
25
25
|
```python
|
26
26
|
import torch
|