python:AttributeError:';str';对象没有属性';钥匙';

python:AttributeError:';str';对象没有属性';钥匙';,python,numpy,tensorflow,keras,deep-learning,Python,Numpy,Tensorflow,Keras,Deep Learning,我正在努力解决分类问题。我不知道为什么会出现这样的错误: AttributeError:“str”对象没有属性“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

我正在努力解决分类问题。我不知道为什么会出现这样的错误:

AttributeError:“str”对象没有属性“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])
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'

其中
generate\u array\u用于\u培训
函数返回
x
y
x
是一个二维浮点数数组,
y
是[0,1]

错误

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

回溯(最近一次呼叫最后一次):
文件“/home/user1/thesis2/CNN_dwt2.py”,第437行,在
main()
文件“/home/user1/thesis2/CNN_dwt2.py”,第316行,主
历史=model.fit\u生成器(生成用于培训的数组(indexPat,filepath,end=75),
文件“/home/user1/.local/lib/python3.8/site packages/tensorflow/python/util/deprecation.py”,第324行,在new_func中
返回函数(*args,**kwargs)
fit_generator中的文件“/home/user1/.local/lib/python3.8/site packages/tensorflow/python/keras/engine/training.py”,第1815行
回归自我(
文件“/home/user1/.local/lib/python3.8/site packages/tensorflow/python/keras/engine/training.py”,第108行,在方法包装中
返回方法(self、*args、**kwargs)
文件“/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py”,第1049行,在fit中
data\u handler=data\u adapter.DataHandler(
文件“/home/user1/.local/lib/python3.8/site packages/tensorflow/python/keras/engine/data_adapter.py”,第1122行,在初始化中__
dataset=dataset.map(_make_class_weight_map_fn(class_weight))
文件“/home/user1/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/data\u adapter.py”,第1295行,位于“制造、分类、重量、地图”fn中
class\u id=list(已排序(class\u weight.keys())
AttributeError:“str”对象没有属性“keys”

您的问题是由传递给
model.fit()的
class\u weight=“balanced”
参数引起的。

根据,此参数应为dict: 可选字典将类索引(整数)映射到权重(浮点)值,用于对损失函数进行加权(仅在训练期间)。这有助于告诉模型“更加注意”表示不足的类的样本


尝试使用
class\u weight=None
进行测试,它应该会消除原始错误。稍后提供适当的dict作为
class\u weight
以解决数据集不平衡的问题。

您的问题是由传递给
model.fit()的
class\u weight=“balanced”
参数引起的

根据,此参数应为dict: 可选字典将类索引(整数)映射到权重(浮点)值,用于对损失函数进行加权(仅在训练期间)。这有助于告诉模型“更加注意”表示不足的类的样本


尝试使用
class\u-weight=None
进行测试,它应该消除原始错误。稍后提供适当的dict as
class\u-weight
以解决数据集不平衡的问题。

直接原因是
class\u-weight
是字符串,而它应该是
dict
。但是通过
kere>备份该变量由于
model.fit\u generator
函数调用的代码可能需要一些挖掘。请确保
model.fit\u generator
的输入与类型中的文档匹配。您的
model.fit\u generator
参数之一是字符串。您需要更正此问题。很遗憾,您使用的数据我们无法访问,我们将很难找到问题为您。@hpaulj我已经跟踪了代码,找到了从
generate\u arrays\u for\u training
返回的值,而不是字符串,
x
是浮点2D矩阵,
y
是[[0,1]]1.我不知道绳子是什么value@wwii不幸的是,我正在处理非常大的数据集,我无法提供示例。但我跟踪了
model.fit_generator
的输入,发现它进入了“为_training生成_数组”函数,它返回了
x
y
,因此返回的values@wwii我不知道我为什么会出现这个错误的直接原因是
class\u weight
是一个字符串,而它应该是
dict
。但是通过
keras
代码将该变量追溯到函数调用可能需要一些挖掘。请确保
model.fit\u generator
的输入与类型中的文档匹配。
model.fit\u generator
的一个参数是字符串。您需要更正它。不幸的是,您使用了我们无法访问的数据,我们很难为您找到问题所在。@hpaulj我跟踪了代码,找到了从
generate\u arrays\u返回的值,用于\u培训
而不是字符串,
x
是flo在2D矩阵和
y
为[[0,1]]1.我不知道绳子是什么value@wwii不幸的是,我正在处理非常大的数据集,我无法提供示例。但我跟踪了
model.fit_generator
的输入,发现它进入了“为_training生成_数组”函数,它返回了
x
y
,因此返回的values@wwii我不知道我为什么会得到这个吗error@Rusian但我的数据不平衡。如何使我的数据集平衡?并解决错误???@Rusian S。我在尝试
class\u weight=None
时出现此错误。错误:
ValueError:layer sequential\u 19的输入0与layer::expected min\u ndim=4,found ndim=3不兼容。收到完整形状:[无,无,无]
对于
class\u weight=None
您应该消除原始错误。稍后提供适当的dict as
class\u weight
以解决数据集不平衡的问题。
层顺序\u 19
问题可能与此无关。查看前一层的输出。可能需要进行一些重塑。如果卡住-发布您的模型这里的结构(和总结),最好是作为一个新问题。@Rusian