python: AttributeError: l'objet 'str' n'a pas d'attribut 'keys'
J'essaye de résoudre le problème de classification. Je ne sais pas pourquoi j'obtiens cette erreur:
AttributeError: 'str' object has no attribute 'keys'
Voici le code principal :
def generate_arrays_for_training(indexPat, paths, start=0, end=100):
while True:
from_=int(len(paths)/100*start)
to_=int(len(paths)/100*end)
for i in range(from_, int(to_)):
f=paths[i]
x = np.load(PathSpectogramFolder+f)
if('P' in f):
y = np.repeat([[0,1]],x.shape[0], axis=0)
else:
y =np.repeat([[1,0]],x.shape[0], axis=0)
yield(x,y)
history=model.fit_generator(generate_arrays_for_training(indexPat, filesPath, end=75) ## problem here
steps_per_epoch=int((len(filesPath)-int(len(filesPath)/100*25))),
validation_steps=int((len(filesPath)-int(len(filesPath)/100*75))),
verbose=2,class_weight="balanced",
epochs=15, max_queue_size=2, shuffle=True, callbacks=[callback])
où la generate_arrays_for_trainingfonction retourne xet y. xest un tableau 2D de nombres flottants et yvaut [0,1].
Erreur :
Traceback (most recent call last):
File "/home/user1/thesis2/CNN_dwt2.py", line 437, in <module>
main()
File "/home/user1/thesis2/CNN_dwt2.py", line 316, in main
history=model.fit_generator(generate_arrays_for_training(indexPat, filesPath, end=75),
File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/util/deprecation.py", line 324, in new_func
return func(*args, **kwargs)
File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1815, in fit_generator
return self.fit(
File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 108, in _method_wrapper
return method(self, *args, **kwargs)
File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1049, in fit
data_handler = data_adapter.DataHandler(
File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1122, in __init__
dataset = dataset.map(_make_class_weight_map_fn(class_weight))
File "/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1295, in _make_class_weight_map_fn
class_ids = list(sorted(class_weight.keys()))
AttributeError: 'str' object has no attribute 'keys'
Réponses
votre problème est causé par le class_weight="balanced"paramètre que vous passez àmodel.fit()
selon la référence model.fit () , ce paramètre doit être un dict: dictionnaire facultatif mappant les indices de classe (entiers) à une valeur de poids (flottant), utilisé pour pondérer la fonction de perte (pendant l'entraînement uniquement). Cela peut être utile pour indiquer au modèle de "prêter plus d'attention" aux échantillons d'une classe sous-représentée.
essayez class_weight=Nonede tester, cela devrait éliminer l'erreur d'origine. Plus tard, fournissez un avis approprié class_weightpour résoudre le problème de jeu de données déséquilibré.