python DNN反向链推理
·
介绍
通过学习代码的输入输出,根据输入匹配输出,将代码块自动拼接起来代码中引用的DNN库是我手搓的,---->DNN库。同时需要将字符转换为0-1之间的数字,方便用于DNN训练。
示例
知识库如下,格式固定为[代码];fd:[输入];~[输出]
其中代码加输入限长30字符,输出限长30字符
mds=s[lsr:rsi];fd:s lsr rsi;~mds,middle string
lsr=lsi+lsl;fd:lsi lsl;~lsr,left string right position
lsl=len(ls);fd:ls;~lsl,left string length
rsi=s.find(rs);fd:rs s;~rsi,right string position
lsi=s.find(ls);fd:ls s;~lsi,left string position
输出示例
模型加载成功,结构: [60, 120, 60]
lsl=len(ls)
lsi=s.find(ls)
rsi=s.find(rs)
lsr=lsi+lsl
mds=s[lsr:rsi]
全部代码
import DNN1 as dnn
import numpy as np
s = """
lsi=s.find(ls)
rsi=s.find(rs)
lsl=len(ls)
lsr=lfi+lsl
mds=s[lsr:rfi]
mds=s[lsr:rsi];fd:s lsr rsi;~mds,middle string
lsr=lsi+lsl;fd:lsi lsl;~lsr,left string right position
lsl=len(ls);fd:ls;~lsl,left string length
rsi=s.find(rs);fd:rs s;~rsi,right string position
lsi=s.find(ls);fd:ls s;~lsi,left string position
"""
token=60
def trans(s):
txtn=[]
for n in s:
if n == "\n":
k = 97
k = ord(n) - 30 #限英文和键盘字符2-96
txtn.append(int(k/10)/10.0)
txtn.append((k%10)/10.0)
while len(txtn) < token:
txtn.append(0.01)
txtn.append(0.01)
return txtn
def ots(ln):
s=""
i=-1
for n in ln:
i+=1
if i % 2 == 1:
k+=round(n*10)
if int(k)==0:
continue
c = chr(k + 30)
s+=c
k = round(n*10)*10
return s
def trainIO():
i = []
o = []
for n in s.split("\n"):
if "~" in n:
k = n.find("~")
on = trans(n[:k])
isn = n[k + 1:].split(",")
for m in isn:
i.append(trans(m))
o.append(on)
return i,o
def run(i,o):
if o[0].__len__() == token:
# dnn.X = i
# print(i)
# dnn.Y = o
dnn.begin(60,120,60)# 有神经网络文件前先创建神经网络
dnn.randomWB()
#
# dnn.load("k1.npz") #用于加载神经网络数据文件
dnn.set(i,o)
dnn.train(epochs=20000)
ot = dnn.test()
for m in ot:
si = ots(m[0].tolist()[0])
so = ots(m[1].tolist()[0])
print(so,"===",si)
dnn.save("k1.npz")
# 这里用来训练
# i,o=trainIO()
# run(i,o)
#用来使用,可以更改"__main__"为"__main__1"用于注释。
if __name__ == "__main__":
need="middle string"
hav="s,ls,rs"
fd=[need]
linkot=""
dnn.load("k1.npz")
def link(find,sc=1000):
global fd,linkot
dnn.set(X = trans(find))#改为用set设置神经网络输入
ot = dnn.test()
s=ots(ot[0][1].tolist()[0])
# 用于展示神经网络输出
# for m in ot:
# si = ots(m[0].tolist()[0])
# so = ots(m[1].tolist()[0])
# print(si, "===", so)
if "fd:" in s:
fd.remove(find)
m=s.find(";fd:")
re=s[:m]
linkot = re+"\n"+linkot
nfd=s[m+4:-1].split(" ")
# print(re,nfd,s)
# print(hav,find)
for n in nfd:
if n not in hav:
fd.append(n)
if len(fd)>0:
link(fd[0],sc-1)
link(need)
print(linkot)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)