テンソルフローCIFAR10チュートリアルのサンプルコードにドロップアウトを追加しようとしていますが、難しかったです。TensorflowにDROPOUTを追加するCIFAR10ディープCNNの例
ディープMNISTテンソルフローチュートリアルにはドロップアウトの例が含まれていますが、CIFAR10チュートリアルのアプローチとは異なるインタラクティブグラフが使用されています。また、CIFAR10チュートリアルでは、プレースホルダを使用せず、feed_dictを使用してオプティマイザに変数を渡すこともありません。これは、MNISTモデルでトレーニングのドロップアウト確率を渡すために使用されます。
私は何をしようとしています:cifar10_train.train以内
は()私は、デフォルトのグラフの下で、ドロップアウトの確率プレースホルダを定義します。それは、次のとおりです。
def train():
"""Train CIFAR-10 for a number of steps."""
with tf.Graph().as_default():
global_step = tf.Variable(0, trainable=False)
keep_drop_prob = = tf.placeholder(tf.float32)
下には、まだ電車()モジュール内で、私はcifar10.inferenceを呼び出すことにより、計算、グラフを作成するときに()私もそうのように、keep_drop_probプレースホルダを渡す:
"""Build a Graph that computes the logits predictions from the
inference model."""
logits = cifar10.inference(images, keep_drop_prob)
cifar10.inference()モジュールの中で、私は今渡されたkeep_drop_probプレースホルダを取り、それを使用するので、同じように、私のドロップアウト層を定義するには:
drop1 = tf.nn.dropout(norm1, keep_drop_prob)
を今、私は定義し、KEの値を渡しますep_drop_probそのような、まだ電車内の()モジュールを損失の計算:そうのように、私のクロスエントロピーを計算するとき次に
"""Calculate loss."""
loss = cifar10.loss(logits, labels, keep_drop_prob = 0.5)
cifar10.loss()モジュール内で、私は、渡されたkeep_drop_prob値を使用します。
"""Calculate the average cross entropy loss across the batch."""
labels = tf.cast(labels, tf.int64)
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
logits, labels, keep_drop_prob, name='cross_entropy_per_example')
これまでのところ、私がこれまで行ってきたことが正しいか、次に何をする必要があるかは分かりません。
ご協力いただければ幸いです!