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กลับมาฟังก์ชั่นและx คืออาร์เรย์ 2 มิติของตัวเลขทศนิยมและคือ [0,1]yxy

ข้อผิดพลาด :

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เพื่อแก้ไขปัญหาชุดข้อมูลที่ไม่สมดุล