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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

901閲覧

tf.nn.batch_normalizationとtf.layers.batch_normalizationの違いは何でしょうか?

an6

総合スコア20

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

3クリップ

投稿2017/09/03 01:04

編集2017/09/03 09:11

畳み込み層のあとにbatch normalizationを挟みたいのですが、tensorflowでどのように実装したら良いかわからず困っています。
公式ドキュメントにはtf.nn.batch_normalizationとtf.layers.batch_normalizationがあり前者を使えば良さそうな気がしているのですが、違いは何でしょうか?

また、tf.nn.batch_normalizationの公式ドキュメントには各引数が以下で定義されていますが、具体的にどのような値を渡せばよいのでしょうか?
batch normalizationが平均0,分散1にする処理なのであれば
mean=0, variance=1として渡せばよいのでしょうか?

batch_normalization(
x,
mean,
variance,
offset,
scale,
variance_epsilon,
name=None
)

初歩的な質問で恐縮ですがよろしくお願いします。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

tf.layers.batch_normalizationに関してはわからないので
tf.nn.batch_normalizationの引数についてだけ...

仰るように、平均0, 分散1にするのがbatch norm の一つの処理なので、引数には0と1と渡せばいいです。
次のoffsetはニューラルネットで言う所のバイアスに当たる部分です。
次のscaleもニューラルネットで言う重みに当たる部分になります
要は純粋に正規化をするだけではなく、一つの学習パラメーターとして見るわけです。

最初は純粋な正規化から始め、適切なパラメーターに調節していくといった意味で、引数にはoffset = 0,
scale = 1 を与えるのが一般的です。

最後のvariance_epasilonは0で除算するのを避ける為のオプションになります。
1e-8などの小さな値を渡してやればいいです。

python

1tf.nn.batch_normalization(x, 0, 1, 0, 1, 1e-8)

まとめるとこんな感じになります。

パラメーターを保存したい場合

python

1 2w = tf.Variable(tf.ones(shape)) 3b = tf.Variable(tf.zeros(shape)) 4 5batch = tf.nn.batch_normalization(x, 0, 1, b, w, 1e-8)

投稿2017/09/03 10:09

編集2017/10/15 07:09
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

an6

2017/10/15 06:50

返事が遅くなってしまい申し訳ありません。 教えていただいた通りにやったらうまくいきました、ありがとうございます。
guest

0

随分前の質問ですが、回答した内容に不備があり、間違った情報を流さない為にも、追記しておきます。
※退会済みユーザーは、私です。

詳細は参考urlを貼っておくとして、要点だけ追記しておきます。

batch_normalizationは、訓練時/推論時でパラメーターの扱い方が異なるが、tf.nn.batch_normalizationは、推論時のアルゴリズムを自力で実装する必要がある。(訓練時のみアルゴリズムが実装されている低レベルapi)

tf.layers.batch_normalizationは、廃止予定であり、大文字の方のtf.layers.BatchNormalizationを使う方がいいようなので、次にその説明(普通に使う分には小文字も大文字も機能は変わらないぽい?)。

tf.layers.BatchNormalizationは、引数を変化させる事で、訓練時と推論時を分ける事が出来る高レベルapi。

bool値を格納するtf.placeholderを使って訓練時にはtraining=True,推論時にはtraining=Falseを引数として設定する。

訓練時のoptimizerに以下のコードを追加しておかないと、テスト時に使う移動平均、移動分散が正しく更新されない。

python

1 update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS) 2 with tf.control_dependencies(update_ops): 3 minimize = tf.train.AdamOptimizer().minimize(loss)

参考url
TensorFlowの高レベルAPIを使ったBatch Normalizationの実装
Deep LearningにおけるBatch Normalizationの理解メモと、実際にその効果を見てみる

投稿2019/07/03 19:17

puroko3

総合スコア185

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問