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 aucune pondération de classe ni aucune pondération d'échantillon. J'utilise un générateur qui renvoie un tuple comme celui-ci :
return inputs, targets
Et maintenant, je viens de le remplacer par ce qui suit pour faire disparaître l'avertissement :
return inputs, targets, [None]
Je ne sais pas si c'est pertinent, mais mon modèle utilise 3 entrées, donc mon inputs
variable est en fait une liste de 3 tableaux numpy. targets
est juste un seul tableau numpy.
Dans tous les cas, ce n'est qu'un avertissement. La formation fonctionne bien dans les deux cas.
Modifier pour TensorFlow 2.2 :
Ce bogue semble avoir été corrigé dans TensorFlow 2.2, ce qui est formidable. Cependant, le correctif ci-dessus échouera dans TF 2.2, car il essaiera d'obtenir la forme des poids d'échantillon, ce qui échouera évidemment avec AttributeError: 'NoneType' object has no attribute 'shape'
. Annulez donc le correctif ci-dessus lors de la mise à niveau vers la version 2.2.
Je crois que c'est un bogue avec tensorflow qui se produira lorsque vous appelez model.compile()
avec le paramètre par défaut sample_weight_mode=None
puis appelez model.fit()
avec sample_weight
spécifié ou class_weight
.
À partir des dépôts tensorflow :
fit()
appelle finalement_process_training_inputs()
_process_training_inputs()
définitsample_weight_modes = [None]
basé surmodel.sample_weight_mode = None
puis crée unDataAdapter
avecsample_weight_modes = [None]
- le
DataAdapter
appelle lebroadcast_sample_weight_modes()
avecsample_weight_modes = [None]
lors de l'initialisation broadcast_sample_weight_modes()
semble attendresample_weight_modes = None
mais reçoit[None]
- il affirme que
[None]
est une structure différente desample_weight
/class_weight
, le remplace parNone
en s'adaptant à la structure desample_weight
/class_weight
et affiche un avertissement
Attention mis à part cela n'a aucun effet sur fit()
comme sample_weight_modes
dans le DataAdapter
est remis à None
.
Notez que la documentation de tensorflow indique que sample_weight
doit être un tableau numérique. Si vous appelez le fit()
avec sample_weight.tolist()
à la place, vous ne recevrez pas d'avertissement mais sample_weight
est silencieusement remplacé par None
quand _process_numpy_inputs()
est appelée en prétraitement et reçoit une entrée de longueur supérieure à un.
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 illustré ci-dessous :
!pip install tensorflow==2.0
La capture d'écran de l'exécution réussie est illustrée ci-dessous :
Mise à jour : Ce bogue est corrigé dans Tensorflow Version 2.2.