そのため、私は Pybrain タイプのプロジェクトに取り組んでおり、その一部で立ち往生しています。vars()['string']
これまでのところ、プログラムはタプルを受け取り、'one of them fancy statement ' を使用して変数をそれに割り当てています。具体的には、数字のタプルを受け取り、それを ' 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 つに 1 が含まれている場合に停止し、その演算子を Pybrain の適切なモジュールと一致させてからプラグインする必要がありました。これは、対応するレイヤー = 寸法が既にリストされているモジュールです。
明らかに何かがひどく間違っていて、私の脳がそれを理解することができないほど遠いです...理由がすべて失われ、それを見るたびに怖くなります...助けてください、または私が作成したことを教えてください嫌悪感か何か、私は推測します...