写给设计师的人工智能指南:JS框架Synaptic
上一篇写了tensorflow,发现tf对于设计师来说,其实门槛有点高.要折腾各种配置,还要gpu...其实是不利于快速入门的.
今天更新一篇,选择了一个js框架,非常容易使用.
本系列其他文章可点击查阅:
Synaptic是一个用于node.js和浏览器的JavaScript神经网络库,可以构建和训练基本上任何类型的一阶甚至二阶神经网络。
内置了4种经典的神经网络算法:
multilayer perceptrons(MLP)
多层感知器
multilayer long-short term memory networks (LSTM)
长短期记忆网络
Liquid State Machine,(LSM)
液体状态机
Hopfield神经网络
框架入门比较简单,按照官方的教程即可.
下面是用MLP的2个小练习:
MLP(多层感知器)神经网络是常见的ANN算法,它由一个输入层,一个输出层和一个或多个隐藏层组成。
1 预测学生期末考试能否通过
两个输入栏表示了学生学习的时间和期中考试的分数。
最终结果栏可以有两种值,1 或 0,来表示学生是否通过的期末考试。
例如,我们可以看到,如果学生学习了 35 个小时并在期中获得了 67 分,他 / 她就会通过期末考试。
现在我们假设我们想预测一个学习了 25 个小时并在期中考试中获得 70 分的学生是否能够通过期末考试。
这是一个二元分类问题,多层感知器可以从给定的样本(训练数据)进行学习,并且根据给出的新的数据点,进行准确的预测。
代码如下:
第一行代码
new Architect.Perceptron(2,1,1);
表示有2个参数输入,有1个隐藏层,输出1个参数.
参数的取值一般在0-1之间的范围.
所以35个小时,67分,我们可以表示为[0.35,0.67]
以此类推~
训练数据输入后,调用
perceptron.trainer.train(trainingSet, trainingOptions);
即可开始训练.
回到前文的问题,我们需要预测:
一个学习了 25 个小时并在期中考试中获得 70 分的学生是否能够通过期末考试。
可以调用
perceptron.activate([0.25,0.7]);
运行,结果为[0.99996429...]如无意外,该名学生可以通过期末考试~~~~
2 预测西瓜是不是好瓜
这边采用周志华老师在<机器学习>一书中的例子,作为训练集.
原始数据集长下面这个样子:
编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜
1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,是
2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.774,0.376,是
3,乌黑,蜷缩,浊响,清晰,凹陷,硬滑,0.634,0.264,是
4,青绿,蜷缩,沉闷,清晰,凹陷,硬滑,0.608,0.318,是
5,浅白,蜷缩,浊响,清晰,凹陷,硬滑,0.556,0.215,是
6,青绿,稍蜷,浊响,清晰,稍凹,软粘,0.403,0.237,是
7,乌黑,稍蜷,浊响,稍糊,稍凹,软粘,0.481,0.149,是
8,乌黑,稍蜷,浊响,清晰,稍凹,硬滑,0.437,0.211,是
9,乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑,0.666,0.091,否
10,青绿,硬挺,清脆,清晰,平坦,软粘,0.243,0.267,否
11,浅白,硬挺,清脆,模糊,平坦,硬滑,0.245,0.057,否
12,浅白,蜷缩,浊响,模糊,平坦,软粘,0.343,0.099,否
13,青绿,稍蜷,浊响,稍糊,凹陷,硬滑,0.639,0.161,否
14,浅白,稍蜷,沉闷,稍糊,凹陷,硬滑,0.657,0.198,否
15,乌黑,稍蜷,浊响,清晰,稍凹,软粘,0.36,0.37,否
16,浅白,蜷缩,浊响,模糊,平坦,硬滑,0.593,0.042,否
17,青绿,蜷缩,沉闷,稍糊,稍凹,硬滑,0.719,0.103,否
这个比上面那个学习时间跟考试分数复杂多了.
如何也转化为适合神经网络运算的数据呢?
Synaptic官方有说明文档,
针对我们这个例子,我们可以这么转化
色泽
青绿=>0,0,1
乌黑=>0,1,0
浅白=>1,0,0
根蒂
蜷缩=>0,0,1
稍蜷=>0,1,0
硬挺=>1,0,0
敲声
沉闷=>0,0,1
浊响=>0,1,0
清脆=>1,0,0
纹理
清晰=>0,0,1
稍糊=>0,1,0
模糊=>1,0,0
脐部
凹陷=>0,0,1
稍凹=>0,1,0
平坦=>1,0,0
触感
硬滑=>0
软粘=>1
密度,含糖率符合0-1的范围就不用转化啦.
数据的处理需要写代码来完成,不然如果面对实际中上百万的数据,想想都头疼.
结果可以看下图:
写入代码就是这样子的:
第一行代码
new Architect.Perceptron(18,8,1);18表示有18个输入参数,可以数一下input数组,8表示有8个隐藏层,这个只要位于输入与输出层的数量之间即可.
输入以下代码:
训练完后,预测下:
我在训练的时候,把一条好瓜的数据跟一条不是好瓜的数据作为测试集,
没有列入训练中,这样就可以验证下训练的结果好坏了~
perceptron.activate([0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0.719,0.103])
结果:[0.5603304...]
不是好瓜
perceptron.activate([0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0.697,0.46])
结果:[0.9999...]
是好瓜~
以上是非常简单的2个例子,
练习后
我们可以广泛尝试各种数据集~
看看预测的效果咋样了~
补充:
MLP主要用来判断各种是跟否的问题,如果应用到设计中,那就是"是不是"好设计的问题了.
对应的训练数据可以是:
构图
色彩
氛围
质感
空间
文字信息
这些参数构成的数据集.
设计+科技=
自在园O设计Mix科技实验室。