2017-08-31 176 views
-2

我想实现一个类似于NEAT的算法,它涉及动态地改变神经网络结构,如添加或删除节点和连接。我一直在使用Tensorflow进行监督式学习。但是一旦在Tensorflow中定义了一个网络,它就不能改变。有没有其他可用的框架提供此功能? 谢谢。动态改变神经网络结构

回答

1

除非它是专门为NEAT设计的框架,否则不是。符号执行的本质必然意味着有一个“创建网络”步骤,接着是“运行/训练网络”步骤。然而,根据您改变网络拓扑结构的频率,Tensorflow肯定仍然可行:这意味着每隔一段时间就会保存所有参数,并创建一个新的模型 - 但这可能并不可怕,取决于你的参数。

如果您不喜欢这样,您可以使用遮罩更手动地将某些东西拼凑在一起。也就是说,让一些神经元“被掩盖”出去,或者将某些连接“掩盖”掉。您可以通过为所有参数设置一个0-1值的掩码来实现这一点,您可以在应用之前将这些参数预乘到参数中。保持“允许的”连接稀疏,但尽可能密集地连接其他所有部分。由于有一些额外的计算,它在某种程度上会让你放慢速度,但通过有条件地执行,一个tf.cond调用可能可以节省大部分时间。这不能让你完全自由的拓扑演变,但可能非常灵活。

+0

感谢您的信息。 – Yogesh