[easyAi]-想学人工智能又不会数学? Java程序员的福利来了!

故事背景

现在人工智能的热潮越来越火了

有的java程序员就好慌、怎么办?

现在的年轻人,动不动就来个什么深度学习,弄得一脸懵逼,感觉跟不上时代了
在这里插入图片描述
其实,无非就是训练,训练完了然后进行应用

那么有没有一种东西就如下面的所说:

我只给你数据,然后告诉你对错,你自己慢慢参悟吧!!

其实是有的!!!

其实对于现在很火的人工智能,可以这样理解
在这里插入图片描述
你可以将数据交给一个 黑匣子去训练 这样等他找到这样的特征之后,就有能力辨别

然后,你有什么需求就向他去提问(前提是和你训练的有关)

再然后 他就会告诉你结果

easyAi : 一个不需要数学的人工智能框架

现在已经在开源中国网站宣布开源了
大家可以去下载源代码来查看

开源中国: 点击进入easyAi
码云(源代码):点击进入easyAi
 
软件使用视频教程

一个简单的神经网络应用

场景需求

这里我需要对一组数据进行识别
需要训练他们找出 大于0

设计:

这里使用了 4层神经网络 以及1万个训练量

代码实现

首先先获取源代码 (开发ing…暂时还没提供maven)

源代码地址:点击进入easyAi

当然也有视频教程:点击观看视频

import org.wlld.MatrixTools.Matrix;
import org.wlld.function.Sigmod;
import org.wlld.i.OutBack;
import org.wlld.nerveCenter.NerveManager;
import org.wlld.nerveEntity.SensoryNerve;

import java.util.*;

/**
 * 简单神经网络
 * <br>
 * <b>需求: </b> 需要一个神经网络来帮我识别 <i>大于0</i> 的数字 <br>
 *
 * <b>设计: </b>这里使用了4层神经网络以及1万个训练量<br>
 *
 * 训练完成后,需要对数据进行检验<br>
 *
 * @Author: Timeless小帅
 * @Date: 2020-03-12 11:50
 */
public class NerveDemo1 {

    public static void main(String[] args) throws Exception {
		//===== 第一步:初始化 =====
		
        /* NerveManager 的构造函数参考
         *
         * @param sensoryNerveNub 输入神经元个数
         * @param hiddenNerverNub 隐层神经元个数
         * @param outNerveNub 输出神经元个数
         * @param hiddenDepth 隐层深度
         * @param activeFunction 激活函数
         * @param isDynamic 是否是动态神经元
		 * 
		 * 这里是训练两种类型的数据 所以输入神经元是2 其他的就先按照这样写
         */
        NerveManager nerveManager = new NerveManager(2,6,1,4,new Sigmod(),false);
        nerveManager.init(true,false);


        //===== 第二部:创建训练数据 =====
        List<Map<Integer,Double>> list_right = new LinkedList<>();//存放正确的值
        List<Map<Integer,Double>> list_wrong = new LinkedList<>();//存放错误的值
        Random random = new Random();
        for (int i = 0; i < 10000; i++) {
            Map<Integer,Double> mp1 = new HashMap<>();
            Map<Integer,Double> mp2 = new HashMap<>();
            mp1.put(0,random.nextDouble());
            mp1.put(1,random.nextDouble());
            mp2.put(0,-random.nextDouble());//负样本:负数永远小于0
            mp2.put(1,-random.nextDouble());
            list_right.add(mp1);
            list_wrong.add(mp2);
        }

        //做一个正标注和负标注
        Map<Integer,Double> right = new HashMap<>();
        Map<Integer,Double> wrong = new HashMap<>();
        right.put(1,1.0);
        wrong.put(1,0.0);

        //开始训练
        for (int i = 0; i < list_right.size(); i++) {
            Map<Integer,Double> mp1 = list_right.get(i);
            Map<Integer,Double> mp2 = list_wrong.get(i);
            //这里的post的训练
            post(nerveManager.getSensoryNerves(),mp1,right,null,true);
            post(nerveManager.getSensoryNerves(),mp2,wrong,null,true);
        }

        //测试 这里测试10个数据
        List<Map<Integer,Double>> test1 = new LinkedList<>();
        for (int i = 0; i < 10; i++) {
            Map<Integer,Double> mp1 = new HashMap<>();
            if (i==4){//在第五次的时候给一个错误的值//看看能否正确识别
                mp1.put(0,-random.nextDouble());
                mp1.put(1,-random.nextDouble());
                test1.add(mp1);
                continue;
            }
            mp1.put(0,random.nextDouble());
            mp1.put(1,random.nextDouble());
            test1.add(mp1);
        }
        //查看结果
        Back back = new Back();
        for (Map<Integer, Double> test_data : test1) {
            //这里的post是进行学习
            post(nerveManager.getSensoryNerves(),test_data,null,back,false);
        }
        /*
         * 输出结果:
         *
         * eventId = 1 , id = 1 , out = 0.9853120208
         * eventId = 1 , id = 1 , out = 0.9834875798
         * eventId = 1 , id = 1 , out = 0.9851957982
         * eventId = 1 , id = 1 , out = 0.9850682959
         * eventId = 1 , id = 1 , out = 0.028913533
         * eventId = 1 , id = 1 , out = 0.9840823386
         * eventId = 1 , id = 1 , out = 0.9846590694
         * eventId = 1 , id = 1 , out = 0.9853884496
         * eventId = 1 , id = 1 , out = 0.9765962636
         * eventId = 1 , id = 1 , out = 0.8927546188
         *
         * 很显然第五个数值非常小,意味着不是我们想要的结果
         */


    }

    /**
     * 提交函数
     * @param sensoryNerveList 感知神经元输入层集合
     * @param data 输入点的数据
     * @param tagging 标注
     * @param back 返回结果 (训练的时候可以写null)
     * @param isStudy 是否是学习模式(训练的时候为true)
     */
    public static void post(List<SensoryNerve> sensoryNerveList,Map<Integer,Double>data,Map<Integer,Double>tagging,Back back,boolean isStudy) throws Exception {
        final int size = sensoryNerveList.size();
        for (int i = 0; i < size; i++) {
            sensoryNerveList.get(i).postMessage(1,data.get(i),isStudy,tagging,back);
        }
    }



    /** 回调(查看结果) **/
    static class Back implements OutBack{

        /**
         * 回调
         * @param out     输出数值
         * @param id      输出神经元ID
         * @param eventId 事件ID
         */
        @Override
        public void getBack(double out, int id, long eventId) {
            System.out.println("eventId = " + eventId+ " , id = " + id+" , out = " + out);
        }

        @Override
        public void getBackMatrix(Matrix matrix, long eventId) {

        }
    }


}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
easyAi是一个用java进行开发的傻瓜ai框架,无需任何算法知识,通过简单的api调用就可以实现常用的图像内物体的识别,定位等图像ai服务,及自然语言分类处理服务。面向java开发程序员,不依赖任何第三方库,第三方接口,独立包。直接引入maven项目pom文件,就可以执行人工智能任务。easyAi说明本包原名imageMarket,因为开始加入自然语言模块,所以之后更名为easyAi。 本包对物体在图像中进行训练及识别,切割,定位的轻量级,面向小白的框架,功能在逐渐扩展中。 本包对中文输入语句,对输入语句的类别进行分类,功能在逐渐扩展中。easyAi软件目的 低硬件成本,CPU可快速学习运行,面向Java开发的程序员,经过简单API调用就可实现物体在图像中的识别、定位及中文语言分类等功能; 努力为中小企业提供AI场景解决技术方案,AI内核驱动力!为什么做easyAi这个包1、低门槛化:现在随着人工智能技术的兴起,很多场景需要开发人员添加相应的功能,但是在二三线城市算法人才匮乏,并且大多是Java开发程序员,业务做的更多,因为作者本人就是三线城市程序员,所以深知这一点。所以需要一款部署简单,不需要学习任何算法知识,只通过最简单的API调用,就可以实现部分人工智能应用,并面向覆盖面最广的Java程序员使用的,且能满足大部分AI业务场景实现的技术包。 2、面向用户:广大没接触过算法知识,人才相对匮乏的二三线Java业务开发程序员,实现人工智能应用。 3、部署简单:本包所有底层函数及数学库都是作者Java手写,不依赖任何第三方库,所以开发者只需要将本包下载到本地后,打成JAR包,引入到自己的POM文件中,就可以独立使用所有功能。 4、功能还在扩展:本包现在的功能还在逐步扩展中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Timeless小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值