UYARI: tensorflow: sample_weight modları ... 'dan ['… ']' e zorlandı


47

Bir görüntü sınıflandırıcısını .fit_generator()veya kullanarak .fit()ve bir sözlüğü class_weight=argüman olarak ileterek eğitmek.

TF1.x'te hiç hata yapmadım ama 2.1'de eğitime başlarken aşağıdaki çıktıyı alıyorum:

WARNING:tensorflow:sample_weight modes were coerced from
  ...
    to  
  ['...']

Ondan zorlamak için bir şey için ne anlama geliyor ...için ['...']?

tensorflow'S repo ile ilgili bu uyarının kaynağı burada , verilen yorumlar:

Sample_weight_modes öğesini hedef yapıya zorlamaya çalışın. Bu, dolaylı olarak Model'in iç temsili için çıktıları düzleştirmesine bağlıdır.


7
Bu kadar yeni bir soruyu kendi uyarılarım için tek arama sonucu olarak görmek de komik.
— jmkjaer

1
@jorijnsmit sorunu / uyarıyı kopyalamak için kod sağlayabilir misiniz?
— thushv89

2
Aslında TF2'ye geçmek%tensorflow_version 2.x bu uyarıyı göstermek için yeterlidir: colab.research.google.com/gist/jorijnsmit/…
— jorijnsmit

1
@jorijnsmit, Hayır, aynı uyarıyı alıyorum ama TF2.1'i pip install tensorflow(pyenv / virtualenv ortamında) olarak
— yükledim

1
Evet gerçekten @ lurix66, bu hatayı oluşturan kod tanıtıldı 2.1.0rc0.
— jorijnsmit

Yanıtlar:


11

Bu sahte bir mesaj gibi görünüyor. TensorFlow 2.1'e yükselttikten sonra aynı uyarı mesajını alıyorum, ancak herhangi bir sınıf ağırlığı veya örnek ağırlık kullanmıyorum. Ben böyle bir demet döndüren bir jeneratör kullanın:

return inputs, targets

Ve şimdi uyarıyı ortadan kaldırmak için bunu aşağıdaki şekilde değiştirdim:

return inputs, targets, [None]

Bunun alakalı olup olmadığını bilmiyorum, ancak modelim 3 giriş kullanıyor, bu yüzden inputsdeğişkenim aslında 3 numpy dizisinin bir listesi. targetssadece tek bir numpy dizisidir.

Her durumda, bu sadece bir uyarı. Eğitim her iki şekilde de iyi çalışıyor.

TensorFlow 2.2 için düzenleme:

Bu hata TensorFlow 2.2'de düzeltilmiş gibi görünüyor. Ancak yukarıdaki düzeltme TF 2.2'de başarısız olacaktır, çünkü açık bir şekilde başarısız olacak olan örnek ağırlıklarının şeklini almaya çalışacaktır AttributeError: 'NoneType' object has no attribute 'shape'. Bu nedenle, 2.2'ye yükseltirken yukarıdaki düzeltmeyi geri alın.


Bu benim için de geçerli.
— Robert Lugg

14

Bu model.compile()varsayılan parametre sample_weight_mode=Noneile çağırıp sonra model.fit()belirtilen sample_weightveya ile aradığınızda gerçekleşecek olan tensorflow ile ilgili bir hata olduğuna inanıyorum class_weight.

Tensorflow depolarından:

  • fit() sonunda arar _process_training_inputs()
  • _process_training_inputs() setleri sample_weight_modes = [None] dayanan model.sample_weight_mode = Noneve daha sonra bir oluşturur DataAdapterilesample_weight_modes = [None]
  • DataAdapteraramalar broadcast_sample_weight_modes()ile sample_weight_modes = [None]sırasında başlatma
  • broadcast_sample_weight_modes() bekliyoruz sample_weight_modes = None ama alır[None]
  • Bu iddia [None]farklı bir yapı sample_weight/ class_weightgeri üzerine yazar, Noneyapısına uydurularak sample_weight/ class_weightve bir uyarı gönderir

Kenara Uyarı Bu üzerinde hiçbir etkisi yoktur fit()olarak sample_weight_modesiçinde DataAdapterset geri döndü None.

Tensorflow belgelerininsample_weight bir numpy dizisi olması gerektiğini belirttiğini unutmayın . Eğer ararsanız fit()ile sample_weight.tolist()yerine, bir uyarı almazsınız ama sample_weightsessizce için yazılır Nonezaman _process_numpy_inputs()içinde denir önişleme ve birden uzunluğa bir giriş alır.


1
Çok kapsamlı bir açıklama, teşekkürler. Anlamadığım tek şey, uyarının ...zorlandığını açıklarken [...], durumunuzda [None]zorlanıyor None...
— jorijnsmit

4

Gist'inizi aldım ve TFA yerine Tensorflow 2.0'ı yükledim ve böyle bir Uyarı olmadan çalıştı.

İşte Gist komple kod. Tensorflow'u kurmak için kod aşağıda gösterilmiştir:

!pip install tensorflow==2.0

Başarılı uygulamanın ekran görüntüsü aşağıda gösterilmiştir:

resim açıklamasını buraya girin

Güncelleme: Bu hata düzeltildiTensorflow Version 2.2.


5
Cevabınız için teşekkürler. Haklısın, uyarı mesajı sürüme kadar verilmez 2.1.0rc0. Ancak, benim soru kalıntıları korkuyorum: "ondan zorlamak için bir şey ne demek ...için ['...']?"
— jorijnsmit

3
Bazı muhtemelen istenmeyen şeyler türü sample_weight_mode=Noneve target_structuretürü dictolduğunda sample_weight_modes, o zaman [None]ve istisna broadcast_sample_weight_modesnedeniyle yakalandı fark ettim dict. Bu bir hata olarak kabul edilebilir mi?
— Franz Knülle

2
Hayır! Soru, görüş ve upvotes toplamaya devam ediyor ama cevap yok.
— Ocak'ta

1
@gkennos: Bunun bir hata olduğunu düşünüyorsanız, Github Tensorflow Deposunda bir Hata kaydedebilirsiniz.
— Tensorflow Support

1
Kesinlikle bir hata, ama şimdi TensorFlow içinde 2.2 düzeltilenekadar
— JLH

2

sözlük sağlamak yerine

weights = {'0': 42.0, '1': 1.0}

bir liste denedim

weights = [42.0, 1.0]

ve uyarı kayboldu.


Teşekkürler dostum! Sözlüklerle (başarısız) çalışıyordum. Listeyi kullanarak hata düzeltildi!
— Victor Mondejar-Guerra

Bu hatadan kurtulurken, benim için bu her sınıf için ağırlıklandırma daha kötü sonuçlar verir. Bir listeye geçmeden önce tutarlılığı kontrol ederdim.
— CanofDrink
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.