【发布时间】:2012-07-21 06:57:20
【问题描述】:
所以,我正在做一个 Pybrain 类型的项目,但我被困在其中的一部分上。
到目前为止,该程序接收一个元组并使用“其中一个花哨的vars()['string'] 语句”为其分配一个变量。具体来说,它接收一个数字元组并将其分配给一个 'layerx' 值,其中x 是层的编号(按顺序,第 1、2、3 层等),因此这些数字是该层的尺寸。
我绝望而谦卑地向您寻求帮助的程序部分是该程序的下一步应该是什么;它接受一个元组的元组(元组的数量必须=层的数量),并且元组包含1/0。
它应该确定在哪个层中使用哪种类型的 Pybrain 层,然后插入该层的维度值,并从本质上创建该层变量。我已经......玩了一段时间,我得到了一个非常......扭曲......令人困惑的代码块。
请原谅那些令人费解的变量名,我认为我将它们具体化是很聪明的:
moduleconbuff = 0
modulebuffer = 'module'
correspondinglayerbuff = 0
moduleconfigcopy = tuple(moduleconfig)
try: #Always triggers except, but it's pretty screwed up
while correspondinglayerbuff <= len(self.layers): #keeps track of how many layer/module pairs have been assigned
for elm in moduleconfigcopy:
for x in elm:
if x == 1:
moduledimmension = [layerbuff+'%s'%(correspondinglayerbuff)]
modulesdict = {1: pybrain.GaussianLayer(moduledimmension), 2: pybrain.LinearLayer(moduledimmension),\
3: pybrain.LSTMLayer(moduledimmension),4: pybrain.SigmoidLayer(moduledimmension),5: pybrain.TanhLayer(moduledimmension)} #this dict pairs integers with pybrain modules
vars()[modulebuffer +'%s'%(correspondinglayerbuff)]=modulesdict(moduleconbuff) #should return something like 'Module1 = pybrain.GaussianLayer(5) when complete
print vars()[modulebuffer+'%s'%(correspondinglayerbuff)]
moduleconbuff=0
correspondinglayerbuff+=1
print 'Valid: ', moduleconfigcopy, elm
continue
else:
elm = elm[1:]
print 'Invalid: ', moduleconfigcopy, elm
moduleconbuff+=1
except:
print 'Invalid!!!'
老实说,我完全不知道里面发生了什么。开头的元组“moduleconfig”
应该是带有二元运算符的元组(嵌套元组)的元组,它应该在其中一个元组有 1 时停止,将该运算符与 Pybrain 中的正确模块匹配,然后将其插入相应层 =该模块的尺寸已列出。
很明显,出了什么大问题,而且已经太远了,以至于我的大脑无法理解它……它失去了所有的理由,每次我看到它我都会害怕……请帮助我或告诉我我想我创造了一个可憎之类的东西......
【问题讨论】:
-
快速提示:使用
except捕获特定异常(例如NameError或TypeError。尽量减少try 块中的代码量,使其仅位于您期望的代码处)错误。并且只捕获您可以处理的错误。似乎您的try..except块没有做这些事情。做这样的事情将有助于您的代码中“我忘记了正在发生的事情”部分。跨度> -
我只是使用 try...except 块作为临时调试点,直到我可以弄清楚代码并继续具体细节....注意点,虽然
-
赤裸裸的 except 不会帮助你调试,因为它给你的信息更少,而不是更多。例如,而不是
IndexError(以及错误的特定行),现在您只会得到一个模棱两可的“无效!!”打印到标准输出。 -
那
moduleconfigcopy的内容是什么? -
它 (moduleconfigcopy) 将接受提供给类的参数,它是元组元组的副本: ((0, 1), (0, 0, 1), (0, 1)),本质上。我只是复制了这个论点,所以我可以操纵它..