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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

Q&A

解決済

1回答

5108閲覧

kerasの中間層の設計(DropOut・BatchNormalizationなど)

yamato_user

総合スコア2321

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/01/04 02:53

質問1:kernel_initializerとbias_initializerの違いは何でしょうか?自分の認識としては、kerner_initializerは入力ベクトルに対する重みの初期値で、bias_initializerはバイアス項に対する初期値だと思っていますが、別々に指定する意味が分かりません。一般的に、活性化関数がreluの場合、重みの初期値はHeの初期値がいいと言われていると思いますので、いつもプログラムを書くときは、テンプレ的に、どちらも’he_normal’を指定しています。

質問2:kernel_regularizerとbias_regularizerもなぜ、別々に指定する必要があるのかわかりません。また、l1を使用するのか、l2を使用するのか、l1_l2を使用するのかは、通常、試行錯誤によって決定するものでしょうか?

質問3公式のドキュメントに、Denseのパラメータで、activity_regularizerというものがありましたが、これはBatchNormalizationとはまた違う話でしょうか?

質問4:いつもテンプレ的に下記のような中間層の設計にしていますが、大きな問題はありませんでしょうか?また、活性化関数にreluやtanhやsigmoidやeluなどのうちどれを使用するかは、ニューラルネットに相当詳しい方でないと考える必要はないでしょうか?initializerについても、'he_normal'を使用するのか、その他の初期値を使用するのかもそこまで検討する必要はないでしょうか?
*質問4の意図としては、限られた工数で、データ分析をする場合に、ニューラルネットの構造まで詳しく精査できない場合、下記のようなテンプレを使いまわしても、大きな問題はないかということをご教示いただきたいです。

python

1model.add( 2 Dense( 3 128, 4 activation='relu', 5 kernel_initializer='he_normal', # 勾配(重み)の初期値 6 bias_initializer='he_normal', # バイアス項の初期値 7 kernel_regularizer=regularizers.l1_l2(0.001), # 勾配(重み)の正則化項 8 bias_regularizer=regularizers.l1_l2(0.001) # バイアス項の正則化項 9 ) 10) 11model.add(Dropout(0.1))# ドロップアウト層 12model.add(normalization.BatchNormalization())# バッチ正規化

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問1

意味はその認識であっています。
バイアスとカーネルで異なる初期化方法が指定できるようになっています。
どの手法がいいかは試行錯誤によって決定するものなので、一概にどれがいいとは言えません。

質問2

正則化を入れるということは、パラメータが0に近い値をとるような制限をかけるということになります。
なので、基本的には kernel_regularizer だけ指定すればよいでしょう。
bias_initializer はバイアスが0に近いと予めわかっている場合は入れてもいいですが、そうでない場合は正則化なしでいいと思います。

質問3

活性化関数の出力に対して、適用する正則化です。
Batch Normalization は関係ありません。

質問4

いつもテンプレ的に下記のような中間層の設計にしていますが、大きな問題はありませんでしょうか?

bias_initializer は指定なしでもいいと思います。

また、活性化関数にreluやtanhやsigmoidやeluなどのうちどれを使用するかは、ニューラルネットに相当詳しい方でないと考える必要はないでしょうか?

基本的に ReLU を使っておけば、いいのではないでしょうか。

initializerについても、'he_normal'を使用するのか、その他の初期値を使用するのかもそこまで検討する必要はないでしょうか?

初期化方法の違いで精度が大きくかわるということはないと思います。

質問4の意図としては、限られた工数で、データ分析をする場合に、ニューラルネットの構造まで詳しく精査できない場合、下記のようなテンプレを使いまわしても、大きな問題はないかということをご教示いただきたいです。

問題ないと思います。
迷ったらよく使われてるものを使っておきましょう。

  • 活性化関数: ReLU
  • kernel_initializer: he_normal か glorot_uniform
  • bias_initializer: zeros
  • kernel_regularizer: なんでもいい
  • bias_regularizer: 指定なし

CNN の場合は、自分で設計するのではなく、ResNet とか広く使われているものをそのまま使うのがよいです。

投稿2020/01/04 12:53

編集2020/01/04 12:53
tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問