質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

13391閲覧

pytorchのNormalizationで平均と標準偏差を0.5にする理由がわかりません

aqufiz

総合スコア70

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/07/28 05:46

編集2020/07/28 05:49

pytorchの正規化と標準化について3つ質問があります.

1.pytorchでCNNなどを行う時,ToTensorでテンソル化して,[0,1]の範囲にした後に,

python

1transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))

で標準化しているのを見かけますが,何故計算を行わずに,平均と標準偏差を0.5と決めてしまっているのでしょうか.

2.[0,1]の範囲に正規化した後に標準化を行う必要はあるのでしょうか?(正規化は外れ値に弱く,標準化は外れ値に強いことと関係がありますか.)

3.正確に標準化を行いたい場合は,使用するデータセットの全ての画像のRGBで平均と標準偏差を計算すれば
いいのでしょうか.

お手数おかけしますが,よろしくお願いいたします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

標準化しているのを見かけますが,何故計算を行わずに,平均と標準偏差を0.5と決めてしまっているのでしょうか.
2.[0,1]の範囲に正規化した後に標準化を行う必要はあるのでしょうか?(正規化は外れ値に弱く,標準化は外れ値に強いことと関係がありますか.)

transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) は標準化はしていません。
標準化するのに使う Normalize() を、値の範囲を [-1, 1] にする計算に使っているだけです。

Normalize() は x_new = (x - mean) / stdを計算する関数なので、mean=0.5, std=0.5 とすると、x_new = 2x - 1 となり、[0, 1] の範囲の値を [-1, 1] の範囲の値に変換する処理になります。

3.正確に標準化を行いたい場合は,使用するデータセットの全ての画像のRGBで平均と標準偏差を計算すれば

いいのでしょうか.

それで問題ないです。

投稿2020/07/28 06:18

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aqufiz

2020/07/28 06:44

画像であれば,[0,255]と範囲が決まっているので255で割って,[0,1]に正規化すればそれで十分な気がしてしまうのですが,"[0, 1] の範囲の値を [-1, 1] の範囲の値に変換する処理"にはどのような意図があるのでしょうか.
tiitoi

2020/07/28 07:00 編集

基本的に [0, 1] でいいと思いますよ。ディープラーニングは学習が上手くいけばいいので、[-1, 1] でもうまくいくなら間違いではないです。 自分は [-1, 1] での正規化は GAN で Generator の出力層の活性化関数に値域が [-1, 1] の tanh が使われるので、それに合わせて、入力画像も [-1, 1] にするというケースでしか見たことがありません。 https://pystyle.info/pytorch-gan/#outline__5_3
aqufiz

2020/07/28 07:42

回答ありがとうございます. [-1,1]での正規化はオートエンコーダのプログラムで出てきました. そちらでも,出力層でtanhが使用されていたため,それに合わせていたみたいです.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問