学習時はDropoutし、推論時はDropoutしないようにする実装について書きます。
目次
モデル記述
boolean値のplaceholderを使って学習・推論時にDropout率を分岐して調整します。
.....
is_train = tf.placeholder(dtype=tf.bool)
# 1つ目のlambdaはDropoutで残すニューロンの割合、
# 2つ目は推論時にDropoutさせなくするため100%にしている
keep_prob = tf.cond(is_train, lambda: 0.6, lambda: 1.0)
dense = tf.layers.dense(x, units=output_num, activation=tf.nn.relu)
dropout = tf.nn.dropout(dense, keep_prob)
.....
推論・学習
boolean値のplaceholderであるis_trainに実際のboolean値を渡します。
.....
predict_result = self._session.run(train_step,
feed_dict={is_train: False, x: data})
.....