Archive

DeepThinkJS 教程!

哈哈哈哈,你们期待的DeepThinkJS教程终于到啦,其实真的很简单(当然主要是我其他算法还没写好滑稽)。不过效果还真不错(JS的速度比我想的要快多了)

OK废话不多说,进入正题
(最后PS一点,现在还没写好Doc,写好Doc以后我会发布在博客里面的,你们放心)
首先,制作一个人工智能你需要以下物(如果都知道的话可以不用浪费时间跳过这部分直接看最后怎么实例化)
1.数据(没数据你搞啥人工智能)
2.数据对应的标签(只有数据没有标签机器学不来呀QAQ)
3.层数(输入层,隐藏层,输出层)
4.学习率(每一个错误机器学习多少)
5.激活函数

如果你没看懂没关系,我下面会详细讲解滴。


TOPIC 1 数据与数据标签
人工智能就是一个用数据怼出来的一个机器,从你给他的数据里面学习规律,归纳总结,所以数据肯定是必然需要的
那么数据和数据标签又分别是什么呢?数据就是要输入的东西,类似参数一样,而数据标签就是正在正常运行的时候,按照这些数据(或者参数)得到的东西,举个例子吧,最简单的and只有两个都是1输出才是1,那么他的数据和数据标签是什么呢?

(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 1


TOPIC 2 神经网络结构
这就是所谓的数据和数据标签
好了,现在我们有数据了,接下来就是结构了,结构在神经网络里面分为3个大类——输出层,输入层和隐藏层。输入层就是输入的数据的数量(比如刚刚的and就是2个输入层),而输出层就是输出的数量(刚刚的案例里面就是1个输出层),而隐藏层就是真正学习的地方,按理来说这个越多越好,但是也不一定,有时候多了反而不好,比如说刚才案例里面就弄一个1层的3个隐藏神经元就ok了,搞什么10层,每层20个神经元完全没有任何必要,反而速度还会变慢一点。


TOPIC 3 学习率
这个就很简单了,就是从每次错误里面吸取的教训,大了就会一直反弹,弄小了就太慢了而且有时候还掉到局部最优解里面去,所以要搞不大不小才行。(不懂没事,下一个TOPIC我详细讲解)


TOPIC 4 激活函数
一共只有两种激活函数sigmoid和tanh。这个对非专业人士就知道这一点就好啦,tanh速度比sigmoid快很多(一般来说),所以尽量用tanh,但是由于tanh学习太厉害了,所以一般学习率设成0.3 0.1这样子就ok了,而sigmoid一般是设1。当然这不是绝对,如果一直在剧烈反弹就降低学习率,如果不动或小范围反弹就升高一点。



实例化一个神经网络
首先把所有数据和标签准备好,想好自己要用啥激活函数(sigmoid或者tanh),学习率(不行可以调),还有神经网络的结构就可以开始啦!
首先把全部数据放到一个Array数组里面,再把全部全部的标签放到一个Array里面(index要和另外一个Array一一对应)
这里有一个非常非常重要的东西,就是如果你用sigmoid的话,那么标签的值只能在0到1之间!如果你用的是tanh的话,那么标签的值只能在-1到1之间!如果标签不在那个范围的话,那么就除一个数先让他到那个范围(反正等会可以重新把他乘回来),切记!

数组的格式也是有规定的哦!数据和标签都必须是二维数组的形式,比如刚才那个AND的例子,就应该是这个样子的
数据:[[0,0],[1,0],[0,1],[1,1]]
标签:[[0],[0],[0],[1]]

弄好数据以后就是结构了,输入和输出层很容易,但是隐藏层难一点点,就是必须得用数组的形式来表达,比如一个1层10个,1层5个,1层3个的隐藏层就是这样子的[10,5,3]
然后全部搞好以后就可以真正实例化了!
首先得在html你们加载DTJS.js
然后在js里面这么写
var xx = new MLPNN(输入层个数,隐藏层数组,输出层数组,数据,数据标签,学习率,激活函数("tanh"或者"sigmoid"));
举个栗子,刚才的AND问题,我想写一个输入层为2,只有一层隐藏层个数为3的,输出层是1个的,用sigmoid,学习率为1的神经网络就是这样子的
var nn = new MLPNN(2,[3],1,[[0,0],[0,1],[1,0],[1,1]],[[0],[0],[0],[0]],1,"sigmoid");
就成功实例化了!
实例化以后就可以初始化你的神经网络啦!初始化就是把全部的权重全部重新随机化。初始化是这样写的 名字.init(true)
那么弄好以后怎么训练呢?很简单直接 名字.train(); 就好了比如说我刚刚那个就是nn.train(),train函数你可以放一个true就会给你目前神经网络的信息,名字.train(true)。再注意一下就是train函数运行一次就是训练一次
然后你就开始训练啦!

训练以后怎么测试呢?你们有一个forward函数,就是这样子的 xx.forward(),不过你得给他输入,比如说AND的例子里面,我就可以这样子nn.forward([1,1]);如果训练完美的话就应该会给我一个[1],

最后,一些有用的property属性
cost 错误值,典型cost函数计算出来的值
train_count 训练次数

DeepThinkJS library地址: https://codetiger.me/project/project1.html

好啦,就这么多了,感谢观看!呼好多,写死我了ヽ( ̄▽ ̄)و。


CodeTiger
2018.3.16