Formation d'un classificateur d'images en utilisant .fit_generator()
ou .fit()
et en passant un dictionnaire à class_weight=
comme argument.
Je n'ai jamais eu d'erreurs dans TF1.x mais en 2.1 j'obtiens la sortie suivante lors du démarrage de la formation:
WARNING:tensorflow:sample_weight modes were coerced from
...
to
['...']
Que signifie contraindre quelque chose de ...
à ['...']
?
La source de cet avertissement sur tensorflow
le dépôt est ici , les commentaires placés sont:
Essayez de contraindre sample_weight_modes à la structure cible. Cela dépend implicitement du fait que le modèle aplatit les sorties pour sa représentation interne.
python
tensorflow
keras
tensorflow2.0
tf.keras
jorijnsmit
la source
la source
%tensorflow_version 2.x
suffit pour faire apparaître cet avertissement: colab.research.google.com/gist/jorijnsmit/…pip install tensorflow
(dans l'environnement pyenv / virtualenv)2.1.0rc0
.Réponses:
Cela ressemble à un faux message. Je reçois le même message d'avertissement après la mise à niveau vers TensorFlow 2.1, mais je n'utilise aucun poids de classe ou exemple de poids. J'utilise un générateur qui renvoie un tuple comme celui-ci:
Et maintenant, je viens de le changer comme suit pour faire disparaître l'avertissement:
Je ne sais pas si cela est pertinent, mais mon modèle utilise 3 entrées, donc ma
inputs
variable est en fait une liste de 3 tableaux numpy.targets
est juste un tableau numpy unique.En tout cas, ce n'est qu'un avertissement. La formation fonctionne bien dans les deux cas.
Modifier pour TensorFlow 2.2:
Ce bug semble avoir été corrigé dans TensorFlow 2.2, ce qui est génial. Cependant, le correctif ci-dessus échouera dans TF 2.2, car il essaiera d'obtenir la forme des poids d'échantillonnage, qui échouera évidemment avec
AttributeError: 'NoneType' object has no attribute 'shape'
. Annulez donc le correctif ci-dessus lors de la mise à niveau vers 2.2.la source
Je crois que c'est un bug avec tensorflow qui se produira lorsque vous appelez
model.compile()
avec le paramètre par défautsample_weight_mode=None
, puis appelezmodel.fit()
avecsample_weight
ou spécifiéclass_weight
.Depuis les dépôts tensorflow:
fit()
appelle finalement_process_training_inputs()
_process_training_inputs()
ensemblessample_weight_modes = [None]
basés surmodel.sample_weight_mode = None
puis crée unDataAdapter
avecsample_weight_modes = [None]
DataAdapter
appelsbroadcast_sample_weight_modes()
avecsample_weight_modes = [None]
lors de l' initialisationbroadcast_sample_weight_modes()
semble attendresample_weight_modes = None
mais reçoit[None]
[None]
s'agit d'une structure différente desample_weight
/class_weight
, l'écraseNone
en s'adaptant à la structure desample_weight
/class_weight
et émet un avertissementAttention à part cela n'a aucun effet
fit()
commesample_weight_modes
dans leDataAdapter
est remis àNone
.Notez que la documentation tensorflow indique qu'il
sample_weight
doit s'agir d'un tableau numpy. Si vous appelezfit()
avec à lasample_weight.tolist()
place, vous n'obtiendrez pas d'avertissement mais vous serezsample_weight
écrasé en silenceNone
quand il_process_numpy_inputs()
est appelé en prétraitement et reçoit une entrée de longueur supérieure à un.la source
...
être contraint[...]
, alors que dans votre cas, il[None]
est contraint deNone
...J'ai pris votre Gist et installé Tensorflow 2.0, au lieu de TFA et cela a fonctionné sans un tel avertissement.
Voici l' essentiel du code complet. Le code d'installation de Tensorflow est indiqué ci-dessous:
Une capture d'écran de l'exécution réussie est présentée ci-dessous:
Mise à jour: ce bug est corrigé dans
Tensorflow Version 2.2.
la source
2.1.0rc0
. Cependant, je crains que ma question demeure: "Que signifie contraindre quelque chose de...
à['...']
?"sample_weight_mode=None
ettarget_structure
sont de typedict
,sample_weight_modes
est alors[None]
et l'exceptionbroadcast_sample_weight_modes
est interceptée en raison de ladict
. Cela peut-il être considéré comme un bug?au lieu de fournir un dictionnaire
j'ai essayé une liste
et l'avertissement a disparu.
la source