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 asclass\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 asclass\u weight
以解决数据集不平衡的问题。层顺序\u 19
问题可能与此无关。查看前一层的输出。可能需要进行一些重塑。如果卡住-发布您的模型这里的结构(和总结),最好是作为一个新问题。@Rusian