python DNN反向链推理
文章目录介绍示例全部代码介绍通过学习代码的输入输出根据输入匹配输出将代码块自动拼接起来代码中引用的DNN库是我手搓的----DNN库。同时需要将字符转换为0-1之间的数字方便用于DNN训练。示例知识库如下格式固定为[代码];fd:[输入];~[输出]其中代码加输入限长30字符输出限长30字符mdss[lsr:rsi];fd:s lsr rsi;~mds,middle string lsrlsilsl;fd:lsi lsl;~lsr,left string right position lsllen(ls);fd:ls;~lsl,left string length rsis.find(rs);fd:rs s;~rsi,right string position lsis.find(ls);fd:ls s;~lsi,left string position输出示例模型加载成功结构: [60, 120, 60] lsllen(ls) lsis.find(ls) rsis.find(rs) lsrlsilsl mdss[lsr:rsi]全部代码importDNN1asdnnimportnumpyasnp s lsis.find(ls) rsis.find(rs) lsllen(ls) lsrlfilsl mdss[lsr:rfi] mdss[lsr:rsi];fd:s lsr rsi;~mds,middle string lsrlsilsl;fd:lsi lsl;~lsr,left string right position lsllen(ls);fd:ls;~lsl,left string length rsis.find(rs);fd:rs s;~rsi,right string position lsis.find(ls);fd:ls s;~lsi,left string position token60deftrans(s):txtn[]fornins:ifn\n:k97kord(n)-30#限英文和键盘字符2-96txtn.append(int(k/10)/10.0)txtn.append((k%10)/10.0)whilelen(txtn)token:txtn.append(0.01)txtn.append(0.01)returntxtndefots(ln):si-1forninln:i1ifi%21:kround(n*10)ifint(k)0:continuecchr(k30)sc kround(n*10)*10returnsdeftrainIO():i[]o[]fornins.split(\n):if~inn:kn.find(~)ontrans(n[:k])isnn[k1:].split(,)forminisn:i.append(trans(m))o.append(on)returni,odefrun(i,o):ifo[0].__len__()token:# dnn.X i# print(i)# dnn.Y odnn.begin(60,120,60)# 有神经网络文件前先创建神经网络dnn.randomWB()## dnn.load(k1.npz) #用于加载神经网络数据文件dnn.set(i,o)dnn.train(epochs20000)otdnn.test()forminot:siots(m[0].tolist()[0])soots(m[1].tolist()[0])print(so,,si)dnn.save(k1.npz)# 这里用来训练# i,otrainIO()# run(i,o)#用来使用可以更改__main__为__main__1用于注释。if__name____main__:needmiddle stringhavs,ls,rsfd[need]linkotdnn.load(k1.npz)deflink(find,sc1000):globalfd,linkot dnn.set(Xtrans(find))#改为用set设置神经网络输入otdnn.test()sots(ot[0][1].tolist()[0])# 用于展示神经网络输出# for m in ot:# si ots(m[0].tolist()[0])# so ots(m[1].tolist()[0])# print(si, , so)iffd:ins:fd.remove(find)ms.find(;fd:)res[:m]linkotre\nlinkot nfds[m4:-1].split( )# print(re,nfd,s)# print(hav,find)forninnfd:ifnnotinhav:fd.append(n)iflen(fd)0:link(fd[0],sc-1)link(need)print(linkot)