本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:【让调参全部自动化】自动机器学习,神经网络(3)

时间:2017-07-09 07:25来源:118论坛 作者:www.wzatv.cc 点击:
create_cell() 用于创建一个 LSTM 单元,这个 LSTM 单元由 4 个隐藏神经元组成。这个函数会在将结果返回给我们前,在输出上添加一个 dropout。 tf.contrib.rnn.Mul

create_cell()用于创建一个 LSTM 单元,这个 LSTM 单元由 4 个隐藏神经元组成。这个函数会在将结果返回给我们前,在输出上添加一个 dropout。

tf.contrib.rnn.MultiRNNCell负责将 RNN 实例化。我们给 create_cell() 一个参数,因为我们想要 RNN 由多个层组成,在这里是 3。

initial_state:知道了 RNN 的每个单元都取决于先前的状态,我们就必须将要作为我们批次第一批 entry 输入的那些为 0 的初始状态实例化。

x_one_hot将批次转换成一个热编码

cell_outputs给出了 RNN 每个单元格的输出。这里,每个输出将由 4 个值(隐藏神经元的个数)组成。

final_state返回最后一个单元的状态,这个状态可以在训练期间作为下一批次的新初始状态使用(假设下一批次在逻辑上紧连着上一批次)。

3)Graph 输出

报码:【让调参全部自动化】自动机器学习,神经网络

单元的输出值存储在一个三维的表格中 [序列数,序列大小,神经元数],或者说是 [2,10,4]。我们不再需要按序列将输出间隔开来。我们之后会调整输出的大小,直播,得到维数 [20,4] 的数组,存储在变量 seq_out_reshape 当中。

最后,用一个简单的线性运算:tf.matmul(..) + b。在最后整个再跟一个 softmax,把输出表示为概率的形式。

4)Loss

为了做误差运算,批处理的目标必须用与模型输出相同的方式和相同的维度来表示。我们使用tf.one_hot 表示输出与输入有相同的编码。然后,将数组 (tf.reshape ()) 调整到与线性输出tf.matmul(..) + b 相同的维度。现在,就可以使用这个函数来计算模型的误差了。

报码:【让调参全部自动化】自动机器学习,神经网络

5)训练

报码:【让调参全部自动化】自动机器学习,神经网络

用 AdamOptimize 将误差最小化即可。

训练结果!

好,终于走到结果了。这是最有成就感的一部分。我使用的参数是:

序列大小:100

批量大小:200

每个细胞的神经元数量:512

RNN 深度(层数):2

学习率:0.0005

Dropout:0.5

下面是在我的 GPU (GeForce GTX 1060)训练大约 2 个小时后获得的结果。

我们从误差演变开始:

报码:【让调参全部自动化】自动机器学习,神经网络

最后,我们来看模型能够生成的代码:

报码:【让调参全部自动化】自动机器学习,神经网络

看到模型能够清楚地了解一个程序的一般结构,感觉真是太酷了。

注意,在数据集中没有什么名为“super_fold”的函数。所以,我花了很长时间理解这个函数的功能。

不得不说,这个模型可能比我更聪明……

编译来源

https://becominghuman.ai/how-to-train-a-neural-network-to-code-by-itself-a432e8a120df

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容