python: AttributeError: objek 'str' tidak memiliki atribut 'kunci'
Saya mencoba untuk memecahkan masalah klasifikasi. Saya tidak tahu mengapa saya mendapatkan kesalahan ini:
AttributeError: 'str' object has no attribute 'keys'
Ini adalah kode utamanya :
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])
dimana generate_arrays_for_trainingfungsi kembali xdan y. xadalah array 2D dari bilangan float dan y[0,1].
Kesalahan :
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'
Jawaban
masalah Anda disebabkan oleh class_weight="balanced"parameter yang Anda teruskanmodel.fit()
menurut referensi model.fit () , parameter ini harus berupa dict: kamus opsional yang memetakan indeks kelas (bilangan bulat) ke nilai bobot (float), digunakan untuk memberi bobot pada fungsi kerugian (hanya selama pelatihan). Ini dapat berguna untuk memberi tahu model agar "lebih memperhatikan" sampel dari kelas yang kurang terwakili.
coba class_weight=Noneuntuk pengujian, itu harus menghilangkan kesalahan asli. Kemudian berikan perintah yang tepat class_weightuntuk mengatasi masalah set data yang tidak seimbang.