我们都知道,神经网络下围棋能赢柯洁、读X光照片好过医生、就连文本翻译上也快超过人类了……其实在写代码方面,神经网络也丝毫不落下风……用Linux源代码训练2小时,一个递归神经网络就能重写好它自己的代码,这是不是比程序员学得还快?
为了帮大家一窥究竟,AI100(rgznai100)编译了开发者Thibault Neveu的这篇文章,手把手教你做一个这样的神经网络。
作者 | Thibault Neveu
我认这很疯狂。开发者让神经网络学会了自己编程来重写它自己代码!好吧,咱们也试。
预备条件
Tensorflow + 基本的深度学习技能
该项目的github代码库 - https://github.com/thibo73800/deep_generation/tree/master/c_code
我会在本文中快速回顾一下递归神经网络。但是,如果你对这个课题不甚了解,我相信以下两个资源能让你弄懂递归神经网络:
文章 - http://colah.github.io/posts/2015-08-Understanding-LSTMs/
我不会在本文中详解本项目的所有环节。但我会仔细阐述其中的基本要点来让你理解整个项目。花点时间,亲手运行下文中给出的每一段代码,理解其中的逻辑。这很重要,毕竟,实践出真知。
接下来是正题,让我们开始吧!
数据库
跟其他监督训练一样,我们需要为神经网络提供一个数据集。这里我们使用C语言(如果用太简单的语言,就不好玩了)。我们直接用Linux github代码库中的c语言脚本作为训练数据。我已经把我们会用到的.c代码提取到本项目中。
代码地址-https://github.com/thibo73800/deep_generation/tree/master/c_code/dataset
首要问题:如何表示数据?
神经网络只能用于处理数字。对于其他形式的数据,它就无能为力了。因此,数据集中的每个字符都需要被翻译成这种形式(每个数字对应一个字符)。
示例:把字符转换为整数(int)
举例来说,这里用数字7表示字符“=”。为了在反向传播期间获得更好的收敛性,我们稍后会在独热编码(One-Hot Encoding)编码中表示每个数字。
# List all file in the dataset directory
all_file = os.listdir("dataset")
# Filter : Select