2016-12-14 24 views
5

sequence_Loss modülünün source_code modülünde, bunların çıktılar, hedefler ve ağırlıklar olarak listelenmesi gereken üç parametre vardır.tensorflow sequence_loss parametrelerini anlama

Çıkışlar ve hedefler kendiliğinden açıklayıcıdır, ancak daha iyi anlamak istediğim weight parametresi nedir?

Kafa karıştırıcı bulduğum diğer bir şey, targets'un çıkışlar olarak aynı length olması gerektiğini belirttiği, bir tensörün uzunluğuyla tam olarak ne demek istediğidir? Özellikle 3 boyutlu bir tensörü ise.

cevap

0

Bunu bir sınıfta kullandık ve profesörümüz, doğru şekli olanları geçebildiğimizi söyledi (yorum, "1D yığın boyutlu yüzer-Tensörler listesi ile aynı uzunluktaki") diyor. Bu, ne anlama geldiği konusunda yardımcı olmaz, ama belki de kodunuzu çalıştırmanıza yardımcı olur. Benim için çalıştı.

Bu kod aşağıdakileri yapmalıdır: [tf.ones(batch_size, tf.float32) for _ in logits].

Düzenleme: TF kodundan:

for logit, target, weight in zip(logits, targets, weights): 
     if softmax_loss_function is None: 
     # TODO(irving,ebrevdo): This reshape is needed because 
     # sequence_loss_by_example is called with scalars sometimes, which 
     # violates our general scalar strictness policy. 
     target = array_ops.reshape(target, [-1]) 
     crossent = nn_ops.sparse_softmax_cross_entropy_with_logits(
      logit, target) 
     else: 
     crossent = softmax_loss_function(logit, target) 
     log_perp_list.append(crossent * weight) 

o logit için kaybı ile çarpılır geçirilir ağırlıkları. Öyleyse, sanırım fazladan bir tahminde bulunmak istiyorsanız, ağırlığı 1'in üzerinde artırabilirsiniz.

+0

Biraz yardımcı oluyor, ancak ağırlık parametresinin amacının ne olduğunu daha fazla anlamaya çalışıyorum, bir RNN'nin kayıp fonksiyonunda ağırlıklar hakkında pek fazla tartışma bulamıyorum, çünkü çıkıştan bahsediyoruz katmanı. Uzunluğun ne anlama geldiğine dair uygun şekil sorusunun cevabını biliyor musunuz? – TheM00s3

+0

Sanırım koddaki yorumdan bahsediyorsunuz? 'ağırlıklar: 1D parti büyüklüğünde float-Tensors listesi ile aynı uzunlukta. 'Bu yorum ile ilgili sorunuz mu var? –

+0

bu olurdu. – TheM00s3

1

Ağırlıkları, tensöre uygulanan bir maske olarak düşünün. Bazı NLP uygulamalarında, her bir cümle için genellikle farklı cümle uzunlukları vardır. Bir nötr ağa beslemek için bir minibatch içine çoklu örnek cümleler paralel/toplu olarak, insanlar giriş tensöründe hangi elemanın aslında geçerli bir giriş olduğunu belirtmek için bir maske matrisi kullanırlar. Örneğin, ağırlık, tüm giriş öğelerinin okunaklı olduğu anlamına gelen np.ones([batch, max_length]) olabilir.

Ayrıca gibi np.asarray([[1,1,1,0],[1,1,0,0],[1,1,1,1]]) (etiketlerini şekil 3x4 olduğu varsayılmaktadır) etiket olarak aynı şekle sahip olan bir matris kullanabilir, ilk satırın daha sonra crossEntropy son sütun 0

olarak maskelenir Çapraz entropinin ağırlıklı birikimini hesaplamak için ağırlığı da kullanabilirsiniz.