python: AttributeError: el objeto 'str' no tiene ningún atributo 'claves'

Sep 29 2020

Estoy tratando de resolver un problema de clasificación. No sé por qué recibo este error:

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

Este es el código 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])

donde la generate_arrays_for_trainingfunción return xy y. xes una matriz 2D de números flotantes y yes [0,1].

Error :

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'

Respuestas

2 PoeDator Sep 29 2020 at 19:32

su problema es causado por el class_weight="balanced"parámetro que pasa amodel.fit()

de acuerdo con la referencia model.fit () , este parámetro debe ser un dict: índices de clase de mapeo de diccionario (enteros) opcionales a un valor de peso (flotante), utilizado para ponderar la función de pérdida (solo durante el entrenamiento). Esto puede ser útil para decirle al modelo que "preste más atención" a las muestras de una clase subrepresentada.

intente class_weight=Noneprobar, debería deshacerse del error original. Más adelante, proporcione un dictamen adecuado class_weightpara abordar el problema del conjunto de datos desequilibrado.