私はtrain_dataとtrain_labelsのトレーニングデータセットを持っています。これはtrain_data_nodeとtrain_labels_nodeがテンソルフローのグラフにあります。ご存知のように 、私はベローズとしてtensorflowの損失関数を使用することができます。TensorFlowで加重損失関数を定義する方法は?
logits = model(train_data_node)
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
logits,train_labels_node))
しかし、この損失関数は均等にすべてのトレーニングデータを処理します。 私たちの状況では、データを差別的に処理したいと考えています。 たとえば、トレーニングデータに対応するcsvファイルがあり、列車データが元のデータまたは増強されたデータであることが示されます。私は怒鳴るように損失関数を定義した
loss_no_aug = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(noAugLogits, noAugLabels))
loss_aug = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(augLogits, augLabels))
loss = loss_no_aug * PENALTY_COEFFICIENT + loss_aug
: はその後、我々は、元のデータの損失がより重要な役割とのような、拡張データ演じるそれほど重要な役割の喪失を果たしますカスタム損失関数を定義したいですが、それはうまくいきませんでした:
def calLoss(logits, labels, augs):
noAugLogits = []
noAugLabels = []
augLogits = []
augLabels = []
tf.get_collection()
for i in range(augs.shape[0]):
if augs[i] == 1:
noAugLogits.append(logits[i])
noAugLabels.append(labels[i])
else:
augLogits.append(logits[i])
augLabels.append(labels[i])
noAugLogits = tf.convert_to_tensor(noAugLogits)
noAugLabels = tf.convert_to_tensor(noAugLabels)
augLogits = tf.convert_to_tensor(augLogits)
augLabels = tf.convert_to_tensor(augLabels)
return tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
noAugLogits, noAugLabels)) * PENALTY_COEFFICIENT + \
tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(augLogits, augLabels))
私たちはしかし、私は彼らに慣れていない午前、テンソル演算を使用して損失関数を記述するべきだと思います。だから誰も私にどのように損失機能を定義するためのいくつかのアドバイスを与えることができます。
ご回答ありがとうございます。
私は、tf.cond()、tf.boolen_mask、tf.gather()などのテンソルを処理するテンソルフローの関数をいくつか見つけました。しかし、私はそれらを使う方法を知らない。そして、私たちの状況では、重要な問題は、データをスライスしてテンソルをどのように拡大し、オーグメンテーションと非オーギュメントに対応するテンソルを0または1で構成するかということです。誰も私に提案をすることができますか?どうもありがとうございました。 – Kongsea