python: AttributeError: объект 'str' не имеет атрибута 'keys'

Sep 29 2020

Я пытаюсь решить проблему классификации. Я не знаю, почему я получаю эту ошибку:

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

Это основной код :

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

где generate_arrays_for_trainingфункция return xи y. xпредставляет собой двумерный массив чисел с плавающей запятой и yравен [0,1].

Ошибка :

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'

Ответы

2 PoeDator Sep 29 2020 at 19:32

ваша проблема вызвана class_weight="balanced"параметром, который вы передаетеmodel.fit()

согласно справочнику model.fit () , этот параметр должен быть dict: Необязательные индексы классов сопоставления словаря (целые числа) со значением веса (с плавающей запятой), используемым для взвешивания функции потерь (только во время обучения). Это может быть полезно для указания модели «уделять больше внимания» образцам из недостаточно представленного класса.

попробуйте class_weight=Noneдля тестирования, он должен избавиться от исходной ошибки. Позже предоставьте правильный совет class_weightдля решения проблемы несбалансированного набора данных.