我认这很疯狂。开发者让神经网络学会了自己编程来重写它自己代码!好吧,咱们也试。
预备条件
我不会在本文中详解本项目的所有环节。但我会仔细阐述其中的基本要点来让你理解整个项目。花点时间,亲手运行下文中给出的每一段代码,理解其中的逻辑。这很重要,毕竟,实践出真知。
接下来是正题,让我们开始吧!
数据库
跟其他监督训练一样,我们需要为神经网络提供一个数据集。这里我们使用C语言(如果用太简单的语言,就不好玩了)。我们直接用Linux github代码库中的c语言脚本作为训练数据。我已经把我们会用到的.c代码提取到本项目中。
首要问题:如何表示数据?
神经网络只能用于处理数字。对于其他形式的数据,它就无能为力了。因此,数据集中的每个字符都需要被翻译成这种形式(每个数字对应一个字符)。
示例:把字符转换为整数(int)
举例来说,这里用数字7表示字符“=”。为了在反向传播期间获得更好的收敛性,我们稍后会在独热编码(One-Hot Encoding)编码中表示每个数字。
# List all file in the dataset directory
all_file = os.listdir(“dataset”)
# Filter : Select only c file
all_file_name = np.array([f for f in all_file if f.find(“.c”) != -1])
content = “”
for name in all_file_name:
with open(os.path.join(“dataset”, name), “r”) as f:
content += f.read() + “\n”
# Convert the string into a list of interger
vocab = set(content)
vocab_to_int = {c: i for i, c in enumerate(vocab)}
int_to_vocab = dict(enumerate(vocab))
encoded = np.array([vocab_to_int[c] for c in content]
原文链接:https://blog.csdn.net/qq_45365914/article/details/94865018