teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

修正

2020/08/28 17:37

投稿

tiitoi
tiitoi

スコア21960

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#L62)
42
+ [pytorch/Normalization.cpp at master · pytorch/pytorch](https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/Normalization.cpp)

5

修正

2020/08/28 17:37

投稿

tiitoi
tiitoi

スコア21960

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

修正

2020/08/28 17:37

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -11,14 +11,14 @@
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
- running_mean_i = (1 - λ) running_mean_i + λ mean_i
17
- running_std_i = (1 - λ) running_std_i + λ std_i
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

修正

2020/08/28 17:31

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -33,6 +33,6 @@
33
33
 
34
34
  # アフィン変換 wX + b のパラメータ (affine=True の場合)
35
35
  params = dict(bn.named_parameters())
36
- print("v", params["weight"].shape)
36
+ print("w", params["weight"].shape)
37
37
  print("b", params["bias"].shape)
38
38
  ```

2

修正

2020/08/28 17:28

投稿

tiitoi
tiitoi

スコア21960

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

修正

2020/08/28 17:27

投稿

tiitoi
tiitoi

スコア21960

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 ですが、一般的にはこれに加えて標準化後の出力に対して、アフィン変換を行います。(Pytroch の場合は affine=True を指定した場合)
23
+ 以上がシンプルな Batch Noramlization ですが、一般的にはこれに加えて標準化後の出力に対して、アフィン変換を行います。(Pytorch の場合は affine=True を指定した場合)
24
24
 
25
25
  ```python
26
26
  import torch