跳到内容

cazala/突触

存储库文件导航

Synaptic公司生成状态 加入聊天https://synapticjs.slack.com

重要提示:Synaptic 2.x公司现在正处于讨论阶段!欢迎参与

Synaptic是一个javascript神经网络库,用于节点.js浏览器,它的通用算法是无架构的,因此您基本上可以构建和训练任何类型的一阶,甚至二阶神经网络体系结构。

这个库包括一些内置架构,如多层感知器,多层长短期存储器网络(LSTM),液态机器霍普菲尔德网络,以及能够训练任何给定网络的培训师,其中包括内置的培训任务/测试,如解决异或、完成干扰序列回忆任务或嵌入式Reber语法测试,因此您可以轻松测试和比较不同体系结构的性能。

该库实现的算法摘自Derek D.Monner的论文:

二阶递归神经网络的广义类LSTM训练算法

通过源代码对该论文中的方程式进行了注释。

介绍

如果你之前没有关于神经网络的知识,你应该从阅读本指南.

如果您想要一个关于如何将数据输入神经网络的实际示例,请看这篇文章.

你也可以看看这篇文章.

演示

这些演示的源代码可以在中找到这个分支.

入门

要尝试这些示例,请检查gh-页分支。

git校验gh-pages

其他语言

本自述文件也有其他语言版本。

概述

安装

在节点中

您可以使用安装synaptic净现值法:

npm安装synaptic--保存
在浏览器中

你可以用安装synaptic凉亭:

凉亭安装突触

或者您可以简单地使用CDN链接,由CDNjs公司

<脚本 型钢混凝土="https://cdnjs.cloudflare.com/ajax/libs/synaptic/1.1.4/synaptica.js"></脚本>

用法

无功功率,无功功率 突触的 = 要求(“突触”); //浏览器中不需要此行
无功功率,无功功率 神经元 = 突触的.神经元,
	图层 = 突触的.图层,
	网络 = 突触的.网络,
	教练 = 突触的.教练,
	建筑师 = 突触的.建筑师;

现在,您可以开始创建网络、训练网络或使用内置网络建筑师.

示例

感知器

这就是如何创建一个简单的感知器:

感知器.

功能 感知器(输入, 隐藏的, 输出)
{
	//创建图层
	无功功率,无功功率 inputLayer(输入层) = 新的 图层(输入);
	无功功率,无功功率 隐藏层 = 新的 图层(隐藏的);
	无功功率,无功功率 outputLayer(输出层) = 新的 图层(输出);

	//连接图层
	inputLayer(输入层).项目(隐藏层);
	隐藏层.项目(outputLayer(输出层));

	//设置图层
	.设置({
		输入:inputLayer(输入层),
		隐藏的:[隐藏层],
		输出:outputLayer(输出层)
	});
}

//扩展原型链
感知器.原型 = 新的 网络();
感知器.原型.建造师 = 感知器;

现在您可以通过创建一个培训器并教感知器学习XOR来测试您的新网络

无功功率,无功功率 我的感知器 = 新的 感知器(2,3,1);
无功功率,无功功率 我的培训师 = 新的 教练(我的感知器);

我的培训师.异或(); //{错误:0.004998819355993572,迭代次数:21871,时间:356}

我的感知器.激活([0,0]); // 0.0268581547421616
我的感知器.激活([1,0]); // 0.9829673642853368
我的感知器.激活([0,1]); //0.9831714267395621
我的感知器.激活([1,1]); // 0.02128894618097928
长短期存储器

这就是如何创建一个简单的长短期记忆具有输入门、遗忘门、输出门和窥视孔连接的网络:

长短期记忆

功能 LSTM公司(输入, 阻碍, 输出)
{
	//创建图层
	无功功率,无功功率 inputLayer(输入层) = 新的 图层(输入);
	无功功率,无功功率 inputGate(输入门) = 新的 图层(阻碍);
	无功功率,无功功率 遗忘之门 = 新的 图层(阻碍);
	无功功率,无功功率 内存单元格 = 新的 图层(阻碍);
	无功功率,无功功率 outputGate输出门 = 新的 图层(阻碍);
	无功功率,无功功率 outputLayer(输出层) = 新的 图层(输出);

	//来自输入层的连接
	无功功率,无功功率 输入 = inputLayer(输入层).项目(内存单元格);
	inputLayer(输入层).项目(inputGate(输入门));
	inputLayer(输入层).项目(遗忘之门);
	inputLayer(输入层).项目(outputGate输出门);

	//来自存储单元的连接
	无功功率,无功功率 输出 = 内存单元格.项目(outputLayer(输出层));

	//自我联系
	无功功率,无功功率 自己 = 内存单元格.项目(内存单元格);

	//窥视孔
	内存单元格.项目(inputGate(输入门));
	内存单元格.项目(遗忘之门);
	内存单元格.项目(outputGate输出门);

	//闸门
	inputGate(输入门).大门(输入, 图层.闸门类型.INPUT(输入));
	锻造闸门.大门(自己, 图层.网关类型.ONE_TO_ONE(一对一));
	outputGate输出门.大门(输出, 图层.网关类型.输出);

	//输入到输出直接连接
	inputLayer(输入层).项目(outputLayer(输出层));

	//设置神经网络的层
	.设置({
		输入:inputLayer(输入层),
		隐藏的:[inputGate(输入门), 遗忘之门, 内存单元格, outputGate输出门],
		输出:outputLayer(输出层)
	});
}

//扩展原型链
LSTM公司.原型 = 新的 网络();
LSTM公司.原型.建造师 = LSTM公司;

这些是用于解释目的的示例建筑师已经包括多层感知器和多层LSTM网络架构。

贡献

Synaptic公司是一个始于阿根廷布宜诺斯艾利斯的开源项目。欢迎世界上任何人为项目的发展作出贡献。

如果你想贡献,请随时发送公关,只需确保跑步npm运行测试npm运行生成提交之前。这样,您将运行所有测试规范并构建web分发文件。

支持

如果你喜欢这个项目并且想表示你的支持,你可以给我买一杯啤酒神奇的网络货币:

BTC:16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK公司以太币:0xa423bfe9db2dc125dd3b56f215e09658491cc556LTC:LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXaXMR:46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM

<3