이 여기 내 첫 번째 게시물에 사용자 정의 손실을 추가, 그래서는 지침을 준수하며 자신을 제외한 다른 사람에 대한 흥미 롭다 바랍니다.autoencoder 재건 손실
내가 그들의 낮은 차원 표현을지고의 목표로 고정 된 크기의 입력 행렬로 소요 CNN의 autoencoder 건물입니다 (나는 그들이 여기 해시 전화). 행렬이 비슷한 경우 이러한 해시를 비슷하게 만들고 싶습니다. 내 데이터 중 일부는 레이블이 붙어 있기 때문에 손실 기능을 두 개의 개별 기능을 조합하여 사용하고자합니다. 한 부분은 자동 인코딩 기의 재구성 오류입니다 (이 부분은 올바르게 작동합니다). 다른 부분은 레이블이 붙은 데이터를 원합니다. 세 가지 다른 클래스가 있으므로, 각 일괄 처리에서 동일한 클래스에 속한 해시 값 사이의 거리를 계산하기를 원합니다 (구현하는 데 문제가 있습니다). 지금까지
내 노력 :
calclulate_within_class_loss은 내가 만든 별도의 기능입니다X = tf.placeholder(shape=[None, 512, 128, 1], dtype=tf.float32)
class1_indices = tf.placeholder(shape=[None], dtype=tf.int32)
class2_indices = tf.placeholder(shape=[None], dtype=tf.int32)
hashes, reconstructed_output = self.conv_net(X, weights, biases_enc, biases_dec, keep_prob)
class1_hashes = tf.gather(hashes, class1_indices)
class1_cost = self.calculate_within_class_loss(class1_hashes)
class2_hashes = tf.gather(hashes, class2_indices)
class2_cost = self.calculate_within_class_loss(class2_hashes)
loss_all = tf.reduce_sum(tf.square(reconstructed_output - X))
loss_labeled = class1_cost + class2_cost
loss_op = loss_all + loss_labeled
optimizer = tf.train.AdagradOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(loss_op)
. 나는 현재는 같은 배치에서 그 클래스의 다른 해시와 클래스의 첫 번째 해시의 차이를 구현 한, 그러나 나는 나의 현재 구현되지 행복하고 그것이 작동하지 않는 보인다. 텐서의 다른 모든 RAWS와 모든 원시의 거리를 계산 할 수있는 쉬운 방법
- 있습니까 :
def calculate_within_class_loss(self, hash_values): first_hash = tf.slice(hash_values, [0, 0], [1, 256]) total_loss = tf.foldl(lambda d, e: d + tf.sqrt(tf.reduce_sum(tf.square(tf.subtract(e, first_hash)))), hash_values, initializer=0.0) return total_loss
그래서, 두 가지 질문/문제가? 그냥 다른 요소와의 첫 번째 요소에 대한 경우에도
- 클래스로 이동할 수있는 거리 계산의 나의 현재 구현, 나에게 줄 것이다 '유모'내가 그것을 최적화하려고 할 때.
시간 내 주셔서 감사하고 샘플 코드에서 :
'class? _hashes'의 모양은 무엇입니까? –
죄송합니다. 나는이 질문과 관련이 있다고 생각하는 코드의 일부만 게시했다. 해시의 모양은 [없음, 256]이므로 클래스 _hash도 현재 배치에서 해당 클래스의 색인 수에 따라 모양이 [?, 256]입니다. –