文章目录


介绍

通过学习代码的输入输出,根据输入匹配输出,将代码块自动拼接起来代码中引用的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)
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐