python: AttributeError: Das Objekt 'str' hat kein Attribut 'keys'.

Sep 29 2020

Ich versuche das Klassifizierungsproblem zu lösen. Ich weiß nicht, warum ich diesen Fehler erhalte:

AttributeError: 'str' object has no attribute 'keys'

Dies ist der Hauptcode :

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])

wo generate_arrays_for_trainingFunktion zurück xund y. xist ein 2D-Array von Gleitkommazahlen und yist [0,1].

Fehler :

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'

Antworten

2 PoeDator Sep 29 2020 at 19:32

Ihr Problem wird durch class_weight="balanced"Parameter verursacht, an die Sie übergebenmodel.fit()

Gemäß der Referenz model.fit () sollte dieser Parameter ein Diktat sein: Optionales Wörterbuch, das Klassenindizes (Ganzzahlen) einem Gewichtswert (float) zuordnet, der zur Gewichtung der Verlustfunktion verwendet wird (nur während des Trainings). Dies kann nützlich sein, um das Modell anzuweisen, Stichproben aus einer unterrepräsentierten Klasse "mehr Aufmerksamkeit zu schenken".

Versuchen Sie es class_weight=Nonezum Testen, es sollte den ursprünglichen Fehler beseitigen. Geben Sie später das richtige Diktat class_weightan, um das Problem mit unausgeglichenen Datensätzen zu beheben.