Melatih classifier gambar menggunakan .fit_generator()
atau .fit()
dan meneruskan kamus class_weight=
sebagai argumen.
Saya tidak pernah mendapatkan kesalahan di TF1.x tetapi di 2.1 saya mendapatkan output berikut saat memulai pelatihan:
WARNING:tensorflow:sample_weight modes were coerced from
...
to
['...']
Apa artinya untuk memaksa sesuatu dari ...
ke ['...']
?
Sumber untuk peringatan tentang tensorflow
repo ini ada di sini , komentar yang diberikan adalah:
Mencoba untuk memaksa sample_weight_modes ke struktur target. Ini secara implisit tergantung pada kenyataan bahwa Model meratakan output untuk representasi internal.
python
tensorflow
keras
tensorflow2.0
tf.keras
jorijnsmit
sumber
sumber
%tensorflow_version 2.x
cukup untuk membuat peringatan ini muncul: colab.research.google.com/gist/jorijnsmit/…pip install tensorflow
(dalam lingkungan pyenv / virtualenv)2.1.0rc0
.Jawaban:
Ini sepertinya pesan palsu. Saya mendapatkan pesan peringatan yang sama setelah meningkatkan ke TensorFlow 2.1, tapi saya tidak menggunakan bobot kelas atau bobot sampel sama sekali. Saya menggunakan generator yang mengembalikan tuple seperti ini:
Dan sekarang saya baru saja mengubahnya menjadi yang berikut untuk membuat peringatan hilang:
Saya tidak tahu apakah ini relevan, tetapi model saya menggunakan 3 input, jadi
inputs
variabel saya sebenarnya adalah daftar 3 numpy array.targets
hanya array numpy tunggal.Bagaimanapun, itu hanya peringatan. Pelatihannya bekerja dengan baik.
Edit untuk TensorFlow 2.2:
Bug ini tampaknya telah diperbaiki di TensorFlow 2.2, yang sangat bagus. Namun perbaikan di atas akan gagal dalam TF 2.2, karena akan mencoba untuk mendapatkan bentuk bobot sampel, yang jelas akan gagal
AttributeError: 'NoneType' object has no attribute 'shape'
. Jadi batalkan perbaikan di atas saat memutakhirkan ke 2.2.sumber
Saya percaya ini adalah bug dengan tensorflow yang akan terjadi ketika Anda memanggil
model.compile()
dengan parameter defaultsample_weight_mode=None
dan kemudian memanggilmodel.fit()
dengan ditentukansample_weight
atauclass_weight
.Dari repo tensorflow:
fit()
akhirnya menelepon_process_training_inputs()
_process_training_inputs()
setsample_weight_modes = [None]
berdasarkanmodel.sample_weight_mode = None
dan kemudian membuatDataAdapter
dengansample_weight_modes = [None]
DataAdapter
panggilanbroadcast_sample_weight_modes()
dengansample_weight_modes = [None]
selama inisialisasibroadcast_sample_weight_modes()
tampaknya mengharapkansample_weight_modes = None
tetapi menerima[None]
[None]
adalah struktur yang berbeda darisample_weight
/class_weight
, menimpa kembaliNone
dengan pas dengan struktursample_weight
/class_weight
dan mengeluarkan peringatanPeringatan samping ini tidak berpengaruh pada
fit()
sepertisample_weight_modes
diDataAdapter
adalah set kembali keNone
.Perhatikan bahwa dokumentasi tensorflow menyatakan bahwa
sample_weight
harus numpy-array. Jika Anda meneleponfit()
dengansample_weight.tolist()
gantinya, Anda tidak akan mendapatkan peringatan tetapisample_weight
ditimpa secara diam-diamNone
ketika_process_numpy_inputs()
dipanggil dalam praproses dan menerima input yang panjangnya lebih dari satu.sumber
...
dipaksa[...]
, sedangkan dalam kasus Anda[None]
dipaksa untukNone
...Saya telah mengambil Gist Anda dan menginstal Tensorflow 2.0, bukan TFA dan berhasil tanpa Peringatan semacam itu.
Berikut adalah Inti dari kode lengkap. Kode untuk menginstal Tensorflow ditunjukkan di bawah ini:
Cuplikan layar dari eksekusi yang berhasil ditunjukkan di bawah ini:
Pembaruan: Bug ini diperbaiki di
Tensorflow Version 2.2.
sumber
2.1.0rc0
. Namun, aku takut sisa-sisa pertanyaan saya: "Apa artinya untuk memaksa sesuatu dari...
ke['...']
?"sample_weight_mode=None
dantarget_structure
bertipedict
,sample_weight_modes
saat itu[None]
dan pengecualian dalambroadcast_sample_weight_modes
ditangkap karenadict
. Bisakah ini dianggap sebagai bug?alih-alih menyediakan kamus
saya mencoba daftar
dan peringatan itu hilang.
sumber