||
MeteoInfoLab的脚本语言是Jython,可以直接使用Java类库。机器学习目前Python(CPython)大行其道,不过Java语言的机器学习库也有不少,比如:Deeplearning4j, Weka, Encog等。Encog支持丰富的神经网络算法,内部具有并行运算功能,有Java和.Net两个版本。这里利用Java版的Encog库进行了简单的封装,提供了FeedforwardNetwork类来创建神经网络,添加网络层,设置训练方法、激活函数等参数,对已知数据进行训练,最后预测结果。
miml工具箱已经打包在MeteoInfo软件中(MeteoInfo -> toolbox -> miml目录),github上的代码仓库:https://github.com/Yaqiang/miml 。该工具箱的使用也很简单,这里用神经网络的一个最基本的XOR问题来说明。AND和OR都很容易理解,XOR是运算符两边不同时为真,可以表示如下:
1 AND 1 -> 1 1 OR 1 -> 1 1 XOR 1 -> 0
1 AND 0 -> 0 1 OR 0 -> 1 1 XOR 0 -> 1
0 AND 0 -> 0 0 OR 0 -> 0 0 XOR 0 -> 0
MeteoInfoLab脚本如下:
import miml indata = array([[0,0],[1,0],[0,1],[1,1]]) ideal = array([0,1,1,0]) net = miml.FeedforwardNetwork(5, 'trainlm') net.layers[0].set_activation('tanh') net.train(indata, ideal, isprint=True) print net.predict([0,0]) print net.predict([0,1])
先引入miml包(import miml),训练用的输入数据为:indata = array([[0,0],[1,0],[0,1],[1,1]]),真值:ideal = array([0,1,1,0])。然后构建神经网络(缺省为输入层,一个隐含层,输出层),隐含层的神经元数设为5,训练方法设为trainlm,将隐含层的激活函数设为tanh,然后进行训练。训练完成后就可以利用这个神经网络进行预测了。
运行结果如下(神经网络的特征决定了每次运行的结果都可能不一样)。输入为[0, 0]时,XOR的真值为0,这里的预测值为0.003811562449670306;输入为[0, 1]时,XOR的真值为1,这里的预测值为0.9890792015360702。
Epochs 1: Error=0.510
Epochs 2: Error=0.269
Epochs 3: Error=0.041
Epochs 4: Error=0.009
Epochs 5: Error=0.000
array([0.003811562449670306])
array([0.9890792015360702])
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-19 23:17
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社