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.