【发布时间】:2018-06-01 18:04:00
【问题描述】:
这是来自fastai 库。 所以这个函数调用:
md = ColumnarModelData(PATH, ColumnarDataset.from_data_frame(trn_df, cat_flds=cat_vars, y=trn_y),
ColumnarDataset.from_data_frame(val_df, cat_flds=cat_vars, y=val_y), bs=128, test_ds=test_ds)
vars(md)
给出这个结果:
{'path': 'data/rossmann/',
'test_dl': <fastai.dataloader.DataLoader at 0x112c93d68>,
'trn_dl': <fastai.dataloader.DataLoader at 0x112c93e80>,
'val_dl': <fastai.dataloader.DataLoader at 0x112c93a20>}
但我可以通过以下方式构建相同的结果:
md = {'path':PATH,
'test_dl':DataLoader(test_ds, batch_size=128, shuffle=False, num_workers=1),
'trn_dl':DataLoader(trn_df, batch_size=128, shuffle=False, num_workers=1),
'val_dl':DataLoader(val_df, batch_size=128*2, shuffle=False, num_workers=1)}
md
这给出了:
{'path': 'data/rossmann/',
'test_dl': <fastai.dataloader.DataLoader at 0x1c20e9cc88>,
'trn_dl': <fastai.dataloader.DataLoader at 0x1c20d5f8d0>,
'val_dl': <fastai.dataloader.DataLoader at 0x1c20d5f320>}
但是,当尝试在其他功能中使用它们时,它们的行为非常不同。如:
m = StructuredLearner(md, StructuredModel(to_gpu(model)), opt_fn=optim.Adam)
当我使用md = ColumnarModelData() 的初始方法时运行良好,但当我自己构建它时不起作用,出现此错误:
AttributeError: 'dict' 对象没有属性 'path'
这里到底出了什么问题?
【问题讨论】:
-
你能添加你正在使用的库吗?
-
@Zev 将库添加到问题中:fastai
-
您知道您只能看到返回的对象的“部分” - 取决于您打印的时间/方式,您会得到它的
__str__()或它的__repr__()打印。它可能需要您提到的许多其他功能未打印但使用的其他功能不适用于您的“重构”结果字典。 -
md和vars(md)不是一回事。 -
它需要
path属性,md具有该属性。vars(md)生成一个字典,其中这些属性成为独立且不同的键/值。vars(md)['path']存在,而不是vars(md).path。
标签: python dictionary attributes