GoogleのTensorFlowを使用してディープラーニングモデルに取り組んでいます。モデルはシーンのセグメント化とラベル付けに使用する必要があります。
質問:最終レイヤーに平均平均またはargmaxを適用して、その形状が[256,256,1]になるようにし、各ピクセルをループして、分類しているかのように分類する必要があります- 256x256インスタンス?答えが「はい」の場合、そうでない場合、他にどのようなオプションがありますか?
ソフトマックスを適用してクロスエントロピー損失を使用するには、をそのまま維持する必要がありますサイズbatch_size x 256 x 256 x 33のネットワークの最終出力。したがって、は、ネットワークの出力確率を破壊するため、平均化またはargmaxを意味するを使用できません。
すべてのbatch_size x 256 x 256ピクセルをループし、このピクセルの予測にクロスエントロピー損失を適用する必要があります。これは、組み込み関数tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels)
を使用すると簡単です。
いくつかの警告 ドキュメントから 以下のコードを適用する前に:
秘訣は、関数に必要なバッチサイズとしてbatch_size * 256 * 256
を使用することです。 logits
とlabels
をこの形式に変更します。私が使用するコードは次のとおりです。
inputs = tf.placeholder(tf.float32, [batch_size, 256, 256, 3]) # input images
logits = inference(inputs) # your outputs of shape [batch_size, 256, 256, 33] (no final softmax !!)
labels = tf.placeholder(tf.float32, [batch_size, 256, 256]) # your labels of shape [batch_size, 256, 256] and type int64
reshaped_logits = tf.reshape(logits, [-1, 33]) # shape [batch_size*256*256, 33]
reshaped_labels = tf.reshape(labels, [-1]) # shape [batch_size*256*256]
loss = sparse_softmax_cross_entropy_with_logits(reshaped_logits, reshaped_labels)
次に、その損失にオプティマイザを適用できます。
documentation of tf.sparse_softmax_cross_entropy_with_logits
は、logits
の任意の形状を受け入れるようになったことを示しているため、テンソルの形状を変更する必要はありません(@chillingerに感謝)。
inputs = tf.placeholder(tf.float32, [batch_size, 256, 256, 3]) # input images
logits = inference(inputs) # your outputs of shape [batch_size, 256, 256, 33] (no final softmax !!)
labels = tf.placeholder(tf.float32, [batch_size, 256, 256]) # your labels of shape [batch_size, 256, 256] and type int64
loss = sparse_softmax_cross_entropy_with_logits(logits, labels)