请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3825|回复: 6

MeteoInfo机器学习工具箱:miml

[复制链接]

新浪微博达人勋

发表于 2019-3-8 15:27:47 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 MeteoInfo 于 2019-3-8 16:58 编辑

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脚本如下:
  1. import miml

  2. indata = array([[0,0],[1,0],[0,1],[1,1]])
  3. ideal = array([0,1,1,0])
  4. net = miml.FeedforwardNetwork(5, 'trainlm')
  5. net.layers[0].set_activation('tanh')
  6. net.train(indata, ideal, isprint=True)
  7. print net.predict([0,0])
  8. 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])
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-8 16:21:43 | 显示全部楼层
{:eb502:}{:eb502:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-8 16:28:22 | 显示全部楼层
好厉害!学习学习!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-8 17:08:43 | 显示全部楼层
有机会请王老师来给我们讲一下这个东东
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-12 14:29:25 | 显示全部楼层
{:eb511:}{:eb511:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-12-1 16:40:11 | 显示全部楼层
王老师,我将miml.0.8.3 windows放在meteoinfo的toolbox文件夹下,运行以下脚本测试,会报错没有encog,是什么原因?该如何修改或调整?
from miml.neural_network import FeedforwardNetwork

i = 1
x = arange(-2, 2.01, 0.1)
hiddensizes = [5,10]
for hs in hiddensizes:
    print 'Hidden layer size: %i' % hs
    net = FeedforwardNetwork(hs)
    net.layers[0].set_activation('tanh')
    for k in range(1, 6):
        t = sin(k * x)
        net.train(x, t)
        y = net.predict(x.reshape(len(x), 1))
        subplot(len(hiddensizes), 5, i)
        i += 1
        plot(x, t, 'r.', x, y, 'g-')
        ylim(-1, 1)
        xticks([])
        yticks([])

run script...
Traceback (most recent call last):
  File "<iostream>", line 1, in <module>
  File "E:\MeteoInfo_2.3b2\MeteoInfo\toolbox\miml\neural_network\__init__.py", line 5, in <module>
    from .ffnetwork import FeedforwardNetwork
  File "E:\MeteoInfo_2.3b2\MeteoInfo\toolbox\miml\neural_network\ffnetwork.py", line 4, in <module>
    from layer import Layer
  File "E:\MeteoInfo_2.3b2\MeteoInfo\toolbox\miml\neural_network\layer.py", line 1, in <module>
    from org.encog.neural.networks.layers import BasicLayer
ImportError: No module named encog
>>>
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-12-1 21:12:25 | 显示全部楼层
Linda.W 发表于 2022-12-1 16:40
王老师,我将miml.0.8.3 windows放在meteoinfo的toolbox文件夹下,运行以下脚本测试,会报错没有encog,是什 ...

你用的MeteoInfo版本太旧了,建议用最新版本试试。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表