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

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

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

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

Q&A

解決済

1回答

3539閲覧

tensorflowでのdropout使用方法について

mizuwater

総合スコア11

Python

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

0グッド

2クリップ

投稿2018/07/02 14:44

編集2018/07/02 14:55

tensorflowで以下のようなニューラルネット(Domain adversarial neuralnetwork)を組んで学習させていたのですが,feature extractorと書いてある部分のLSTM層のところにdropout(tf.nn.dropout)を挟んだところ,学習が進まなくなってしまいました。(labelの二値分類が0.5の精度からほとんど動かない。dropout挟む前は普通に学習できていた)

dropout層の後の出力を可視化してみてみたのですが,dropoutに入力する前の値と変化がありませんでした。。

tf.nn.dropoutの使い方が間違っているのでしょうか?ご存知の方教えていただけると助かります。

python

1 import tensorflow as tf 2 3 X = tf.placeholder(tf.float32, [None,time_steps,input_row], name='X') # Input data 4 Y_ind = tf.placeholder(tf.int32, [None], name='Y_ind') # Class index 5 D_ind = tf.placeholder(tf.int32, [None], name='D_ind') # Domain index 6 l = tf.placeholder(tf.float32, [], name='l') # Gradient reversal scaler 7 8 Y = tf.one_hot(Y_ind, 2) 9 D = tf.one_hot(D_ind, 3) 10 11 # Feature extractor 12 lstm_1 = tf.nn.rnn_cell.BasicLSTMCell(15, name='blstmc1') 13 lstm_2 = tf.nn.rnn_cell.BasicLSTMCell(15, name='blstmc2') 14 lstm_3 = tf.nn.rnn_cell.BasicLSTMCell(15, name='blstmc3') 15 16 lstm_out_1,states_op = tf.nn.dynamic_rnn(lstm_1,X,dtype=tf.float32,time_major=False) 17 lstm_out_1_drop = tf.nn.dropout(lstm_out_1, 0.5)##ここ 18 lstm_out_2,states_op = tf.nn.dynamic_rnn(lstm_2,lstm_out_1_drop,dtype=tf.float32,time_major=False) 19 lstm_out_2_drop = tf.nn.dropout(lstm_out_2, 0.5)##ここ 20 lstm_out_3,states_op = tf.nn.dynamic_rnn(lstm_3,lstm_out_2_drop,dtype=tf.float32,time_major=False) 21 22 lstm_out_last = lstm_out_3[:,-1,:] 23 24 W11 = weight_variable([15, 15]) 25 b11 = bias_variable([15]) 26 f_logit = tf.matmul(lstm_out_last, W11) + b11 27 feature_vector = tf.nn.softmax(f_logit) 28 29 # Label predictor 30 31 W1 = weight_variable([15, 2]) 32 b1 = bias_variable([2]) 33 p_logit = tf.matmul(feature_vector, W1) + b1 34 p = tf.nn.softmax(p_logit) 35 p_loss = tf.nn.softmax_cross_entropy_with_logits(logits=p_logit, labels=Y) 36 37 # Domain predictor 38 f_ = flip_gradient(feature_vector, l) 39 40 W2 = weight_variable([15, 8]) 41 b2 = bias_variable([8]) 42 h2 = tf.nn.relu(tf.matmul(f_, W2) + b2) 43 44 W3 = weight_variable([8, 3]) 45 b3 = bias_variable([3]) 46 d_logit = tf.matmul(h2, W3) + b3 47 d = tf.nn.softmax(d_logit) 48 d_loss = tf.nn.softmax_cross_entropy_with_logits(logits=d_logit, labels=D) 49 50 # Optimization 51 pred_loss = tf.reduce_sum(p_loss, name='pred_loss') 52 domain_loss = tf.reduce_sum(d_loss, name='domain_loss') 53 total_loss = tf.add(pred_loss, domain_loss, name='total_loss') 54 55 #for dann_train_op 56 dann_train_op = tf.train.AdamOptimizer().minimize(total_loss, name='dann_train_op') 57

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

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

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

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

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

guest

回答1

0

自己解決

tf.nn.dropoutではなく、
tf.nn.rnn_cell.DropoutWrapperを使うことで解決。

投稿2018/11/24 07:32

mizuwater

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問