Freewire:一种自由有线神经网络的实验

2021-03-20 09:19:29

Freewire是一种类似KERAS的API,用于创建优化的可自由有线的神经网络,到史隆CUDA。自由有线的神经网络在各个节点(或神经元)的水平上定义,而不是在均匀层的水平。Freewire的目标是使其成为人工神经元的任何任意DAG定义为首先定义可以在CUDA上运行RunTimeand编译优化的操作集。

该存储库是探索如何设计和优化神经网络的起点,可以以非常新颖的方式连接在各个人造神经元的水平,而是传统神经网络的速度和记忆效率。未来的版本可能会利用稀疏的张量操作。

由于自由有线的神经网络可能不适合具有层的范例,它'必须优化它们进行培训和推理的必要方法。自由有线网络中最努力的实现将是一系列并行化操作,该操作扩展了一个Nnumbers的1D磁带,其中每个操作是输入的函数和所有先前操作的结果。该代码使用拓扑排序算法来查找给定图形的最小次数。

此图形显示左侧的1D磁带和它在右侧代表的可自由无线网络(在此图像中遗漏为简单性).So注意到1D磁带扩展到2D以允许批量培训。

从Freewire导入节点,图形,没有参数的模型#节点是一个输入节点输入= [node(),node()]#节点构造函数的第一参数是隐藏的输入节点列表= [node(输入,激活=& #39; sigmoid')对于范围(0,5)]输出=节点(隐藏,激活=' sigmoid')#指定在生成图表时输入,隐藏或输出节点的输入,隐藏或输出节点g =图(输入,隐藏,[输出])m = model(g)#创建培训数据数据= [[0,0],[1,0],[0,1],[1,1]]目标= [0,1,1,0]#与keras m相似api。编译(优化器=' SGD',损失=' MSE')m。适合(数据,目标,epochs = 10000,batch_size = 1)打印(" 0 xor 0:" m([0,0]))打印(" 0 xor 1:&# 34;,m([0,1]))打印(" 1 xor 0:" m([1,0]))打印(" 1 xor 1:" ,m([1,1]))

您可以可视化图形以查看其体系结构和权重(Giventhat该图足够小)。可视化使用GraphViz库进行。

图' S权重和偏差开始为零。该变化是用图形构造模型的变化。

从Freewire导入节点,图形,reviewire导入的模型Visualize Inputs = [node(),node()] hidden1 =节点(输入)hidden2 = node([输入[0],hidden1])hidden3 = node([输入[输入[输入[输入[1 ],hidding1])输出=节点([hidden2,hidden3])g =图表(输入,[hidden1,hidden2,hidden3],[输出])可视化(g,title ="架构") 有关更多示例,请参阅示例文件夹,包括带有随机有线图层的MNIST网络。