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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

1929閲覧

tensorflowのDNNに正則化を導入するコードの書き方を教えてください。

tak__tak

総合スコア78

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2018/11/22 07:22

以下のような全結合ネットワークに正則化を導入する場合、どのように書く事が正しいのでしょうか?

regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)
init = tf.constant_initializer(value= 1 )
nn1 = tf.layers.dense(inputs=x, units=unit_size, activation=tf.nn.relu , kernel_initializer=init,kernel_regularizer=regularizer )

などや、lossに tf.losses.get_regularization_loss()を加えるなどしても、学習が全く進まなくなります。(stepを進めてもネットワークの出力が全く変わらなくなりました)

このコードのままだと一応学習は進みます。

python3

1 x = tf.placeholder(shape=[None, 10], dtype=tf.float32, name='x') 2 unit_size = 100 3 classes= 5 4 5 nn1 = tf.layers.dense(inputs=x, units=unit_size , activation=tf.nn.relu) 6 nn2 = tf.layers.dense(inputs=nn1, units=unit_size , activation=tf.nn.relu) 7 nn3 = tf.layers.dense(inputs=nn2, units=classes, activation=tf.nn.relu) 8 9 y = tf.nn.softmax(nn3 ) 10 11 y_ = tf.placeholder(tf.float32, [None, classes ], name='y_') 12 cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)) 13 train_step = tf.train.AdamOptimizer(learning_rate= 0.001 ).minimize(cross_entropy) 14 15 with tf.Session() as sess: 16 epoch = 1000 17 sess.run(tf.initialize_all_variables()) 18 for c in range(epoch): 19 sess.run( train_step , feed_dict={x: np.array( training.data ) , y_: np.array( training.label ).astype( np.int ) }) 20 21

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

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

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

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

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

guest

回答1

0

ベストアンサー

現在のタスクとネットワークに対して正則化の強度が高い可能性があるのではないでしょうか。コードは問題なさそうな気がするので、scaleを1e-5や1e-4などで試してみてはいかがでしょうか。

投稿2018/11/25 12:06

Hiroki013

総合スコア99

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

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

tak__tak

2018/11/26 01:38

現在のコードで既に正則化はされていると言う意味でしょうか?
Hiroki013

2018/11/26 01:52

現在のコードがどれを指すかがちょっとわからないのですが,regularizer =tf.contrib.layers.l2_regularizer(scale=0.1)を追加する形であれば,正則化をかけられているとおもいます.ただ,init = tf.constant_initializer(value= 1 )は,Dense層の初期化を1にする処理だと思うのでこれは不要です.nn1 = tf.layers.dense(inputs=x, units=unit_size, activation=tf.nn.relu ,kernel_regularizer=regularizer )で良いと思います.
tak__tak

2018/11/26 02:29

現在のコードは [このコードのままだと一応学習は進みます。] の下に書いているコードです。 現在のコードでは上部のregularizer などは一切入れていません。 その理由は、入れると、学習が一切進まなくなるからです。
Hiroki013

2018/11/27 01:07

regularizerが入っていなければ正則化は行われていません.入れると学習が進まなくなるのは,正則化の強度を与える,scaleが大きすぎるのではないかと思っております.scale=0.1をscale=1e-5などに変更して追加してみては如何でしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問