From 2398e7bb7580f542be2e627d9eb1dfa4058955b2 Mon Sep 17 00:00:00 2001 From: guor Date: Thu, 28 Nov 2019 18:08:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9C=BA=E5=99=A8=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0=E6=A8=A1=E5=9E=8B=E7=9A=84=E5=BC=95=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com.pgmmers.radar/dal/model/MoldDal.java | 7 ++ .../dal/model/impl/MoldDalImpl.java | 44 ++++++++++ .../vo/model/MoldParamVO.java | 24 +++++ .../com.pgmmers.radar/vo/model/MoldVO.java | 88 +++++++++++++++++++ .../com/pgmmers/radar/mapper/MoldMapper.java | 7 ++ .../pgmmers/radar/mapper/MoldParamMapper.java | 7 ++ .../java/com/pgmmers/radar/model/MoldPO.java | 28 ++++++ .../com/pgmmers/radar/model/MoldParamPO.java | 17 ++++ .../service/impl/dnn/TensorFlowEstimator.java | 19 ++++ .../service/impl/model/MoldServiceImpl.java | 19 ++++ .../pgmmers/radar/service/dnn/Estimator.java | 23 +++++ .../radar/service/model/MoldService.java | 7 ++ 12 files changed, 290 insertions(+) create mode 100644 radar-dal/src/main/java/com.pgmmers.radar/dal/model/MoldDal.java create mode 100644 radar-dal/src/main/java/com.pgmmers.radar/dal/model/impl/MoldDalImpl.java create mode 100644 radar-dal/src/main/java/com.pgmmers.radar/vo/model/MoldParamVO.java create mode 100644 radar-dal/src/main/java/com.pgmmers.radar/vo/model/MoldVO.java create mode 100644 radar-dao/src/main/java/com/pgmmers/radar/mapper/MoldMapper.java create mode 100644 radar-dao/src/main/java/com/pgmmers/radar/mapper/MoldParamMapper.java create mode 100644 radar-dao/src/main/java/com/pgmmers/radar/model/MoldPO.java create mode 100644 radar-dao/src/main/java/com/pgmmers/radar/model/MoldParamPO.java create mode 100644 radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/dnn/TensorFlowEstimator.java create mode 100644 radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/MoldServiceImpl.java create mode 100644 radar-service/src/main/java/com/pgmmers/radar/service/dnn/Estimator.java create mode 100644 radar-service/src/main/java/com/pgmmers/radar/service/model/MoldService.java diff --git a/radar-dal/src/main/java/com.pgmmers.radar/dal/model/MoldDal.java b/radar-dal/src/main/java/com.pgmmers.radar/dal/model/MoldDal.java new file mode 100644 index 0000000..642a973 --- /dev/null +++ b/radar-dal/src/main/java/com.pgmmers.radar/dal/model/MoldDal.java @@ -0,0 +1,7 @@ +package com.pgmmers.radar.dal.model; + +import com.pgmmers.radar.vo.model.MoldVO; + +public interface MoldDal { + MoldVO get(Long id); +} diff --git a/radar-dal/src/main/java/com.pgmmers.radar/dal/model/impl/MoldDalImpl.java b/radar-dal/src/main/java/com.pgmmers.radar/dal/model/impl/MoldDalImpl.java new file mode 100644 index 0000000..0103200 --- /dev/null +++ b/radar-dal/src/main/java/com.pgmmers.radar/dal/model/impl/MoldDalImpl.java @@ -0,0 +1,44 @@ +package com.pgmmers.radar.dal.model.impl; + +import com.pgmmers.radar.dal.model.MoldDal; +import com.pgmmers.radar.mapper.MoldMapper; +import com.pgmmers.radar.mapper.MoldParamMapper; +import com.pgmmers.radar.model.MoldPO; +import com.pgmmers.radar.model.MoldParamPO; +import com.pgmmers.radar.vo.model.MoldParamVO; +import com.pgmmers.radar.vo.model.MoldVO; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import tk.mybatis.mapper.entity.Example; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class MoldDalImpl implements MoldDal { + @Resource + private MoldMapper moldMapper; + @Resource + private MoldParamMapper moldParamMapper; + + @Override + public MoldVO get(Long id) { + MoldVO vo = new MoldVO(); + MoldPO moldPO = moldMapper.selectByPrimaryKey(id); + if (moldPO != null) { + Example example = new Example(MoldParamPO.class); + example.createCriteria().andEqualTo("moldId", id); + List moldParamList = moldParamMapper.selectByExample(example); + List list = moldParamList.stream().map(moldParamPO -> { + MoldParamVO moldParamVO = new MoldParamVO(); + BeanUtils.copyProperties(moldParamPO, moldParamVO); + return moldParamVO; + }).collect(Collectors.toList()); + BeanUtils.copyProperties(moldPO, vo); + vo.setParams(list); + return vo; + } + return null; + } +} diff --git a/radar-dal/src/main/java/com.pgmmers.radar/vo/model/MoldParamVO.java b/radar-dal/src/main/java/com.pgmmers.radar/vo/model/MoldParamVO.java new file mode 100644 index 0000000..27cf7f6 --- /dev/null +++ b/radar-dal/src/main/java/com.pgmmers.radar/vo/model/MoldParamVO.java @@ -0,0 +1,24 @@ +package com.pgmmers.radar.vo.model; + +import java.io.Serializable; + +/** + *

+ * 机器学习模型配置,目前只考虑输入层为离散值的情况,不考虑需要词嵌入和融入卷积层,其中 + * 离散值通过表达式取数从前置流程传递过来. + *

+ * + * @author guor + * @date 2019/11/28 + */ +public class MoldParamVO implements Serializable { + private Long id; + /** + * 取数表达式 + */ + private String exp; + /** + * 参数顺序,显式配置,强制有序 + */ + private int order; +} diff --git a/radar-dal/src/main/java/com.pgmmers.radar/vo/model/MoldVO.java b/radar-dal/src/main/java/com.pgmmers.radar/vo/model/MoldVO.java new file mode 100644 index 0000000..444f64e --- /dev/null +++ b/radar-dal/src/main/java/com.pgmmers.radar/vo/model/MoldVO.java @@ -0,0 +1,88 @@ +package com.pgmmers.radar.vo.model; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 机器学习模型配置,定义模型文件路径和参数 + *

+ * + * @author guor + * @date 2019/11/28 + */ +public class MoldVO implements Serializable { + /** + * 自增ID,主键 + */ + private Long id; + /** + * 模型名称 + */ + private String name; + /** + * 输入层参数的key + */ + private String feed; + /** + * 模型参数定义,需要注意参数顺序,改变顺序会使模型调用出错或者失效 + */ + private List params; + /** + * 模型文件路径 + */ + private String path; + /** + * 模型更新时间 + */ + private Date updateDate; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getFeed() { + return feed; + } + + public void setFeed(String feed) { + this.feed = feed; + } + + public List getParams() { + return params; + } + + public void setParams(List params) { + this.params = params; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } +} diff --git a/radar-dao/src/main/java/com/pgmmers/radar/mapper/MoldMapper.java b/radar-dao/src/main/java/com/pgmmers/radar/mapper/MoldMapper.java new file mode 100644 index 0000000..22930bd --- /dev/null +++ b/radar-dao/src/main/java/com/pgmmers/radar/mapper/MoldMapper.java @@ -0,0 +1,7 @@ +package com.pgmmers.radar.mapper; + +import com.pgmmers.radar.model.MoldPO; +import tk.mybatis.mapper.common.Mapper; + +public interface MoldMapper extends Mapper { +} diff --git a/radar-dao/src/main/java/com/pgmmers/radar/mapper/MoldParamMapper.java b/radar-dao/src/main/java/com/pgmmers/radar/mapper/MoldParamMapper.java new file mode 100644 index 0000000..583d663 --- /dev/null +++ b/radar-dao/src/main/java/com/pgmmers/radar/mapper/MoldParamMapper.java @@ -0,0 +1,7 @@ +package com.pgmmers.radar.mapper; + +import com.pgmmers.radar.model.MoldParamPO; +import tk.mybatis.mapper.common.Mapper; + +public interface MoldParamMapper extends Mapper { +} diff --git a/radar-dao/src/main/java/com/pgmmers/radar/model/MoldPO.java b/radar-dao/src/main/java/com/pgmmers/radar/model/MoldPO.java new file mode 100644 index 0000000..55f7974 --- /dev/null +++ b/radar-dao/src/main/java/com/pgmmers/radar/model/MoldPO.java @@ -0,0 +1,28 @@ +package com.pgmmers.radar.model; + +import javax.persistence.Table; +import java.util.Date; + +@Table(name = "engine_mold") +public class MoldPO { + /** + * 自增ID,主键 + */ + private Long id; + /** + * 模型名称 + */ + private String name; + /** + * 输入层参数的key + */ + private String feed; + /** + * 模型文件路径 + */ + private String path; + /** + * 模型更新时间 + */ + private Date updateDate; +} diff --git a/radar-dao/src/main/java/com/pgmmers/radar/model/MoldParamPO.java b/radar-dao/src/main/java/com/pgmmers/radar/model/MoldParamPO.java new file mode 100644 index 0000000..5ea76d8 --- /dev/null +++ b/radar-dao/src/main/java/com/pgmmers/radar/model/MoldParamPO.java @@ -0,0 +1,17 @@ +package com.pgmmers.radar.model; + +import javax.persistence.Table; + +@Table(name = "engine_mold_param") +public class MoldParamPO { + private Long id; + private Long moldId; + /** + * 取数表达式 + */ + private String exp; + /** + * 参数顺序,显式配置,强制有序 + */ + private int order; +} diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/dnn/TensorFlowEstimator.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/dnn/TensorFlowEstimator.java new file mode 100644 index 0000000..28a4010 --- /dev/null +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/dnn/TensorFlowEstimator.java @@ -0,0 +1,19 @@ +package com.pgmmers.radar.service.impl.dnn; + +import com.pgmmers.radar.service.dnn.Estimator; +import com.pgmmers.radar.service.model.MoldService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Map; + +@Component +public class TensorFlowEstimator implements Estimator { + @Resource + private MoldService moldService; + + @Override + public double predict(Long modelId, Map> data) { + return 0; + } +} diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/MoldServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/MoldServiceImpl.java new file mode 100644 index 0000000..971c68e --- /dev/null +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/MoldServiceImpl.java @@ -0,0 +1,19 @@ +package com.pgmmers.radar.service.impl.model; + +import com.pgmmers.radar.dal.model.MoldDal; +import com.pgmmers.radar.service.model.MoldService; +import com.pgmmers.radar.vo.model.MoldVO; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class MoldServiceImpl implements MoldService { + @Resource + private MoldDal moldDal; + + @Override + public MoldVO get(Long id) { + return moldDal.get(id); + } +} diff --git a/radar-service/src/main/java/com/pgmmers/radar/service/dnn/Estimator.java b/radar-service/src/main/java/com/pgmmers/radar/service/dnn/Estimator.java new file mode 100644 index 0000000..5fb3026 --- /dev/null +++ b/radar-service/src/main/java/com/pgmmers/radar/service/dnn/Estimator.java @@ -0,0 +1,23 @@ +package com.pgmmers.radar.service.dnn; + +import java.util.Map; + +/** + *

+ * 机器学习模型执行器接口 + *

+ *

+ * 该接口内置TensorFlow实现,目前版本只考虑输入层为离散值的情况,不考虑词嵌入和融入卷积层,其中 + * 离散值通过表达式取数从前置流程传递过来,模型的预测结果为事件评分。 + *

+ *

+ * 模型抽象:y=f(x) + *

+ * + * @author guor + * @date 2019/11/28 + */ +public interface Estimator { + + double predict(Long modelId, Map> data); +} diff --git a/radar-service/src/main/java/com/pgmmers/radar/service/model/MoldService.java b/radar-service/src/main/java/com/pgmmers/radar/service/model/MoldService.java new file mode 100644 index 0000000..e7c7884 --- /dev/null +++ b/radar-service/src/main/java/com/pgmmers/radar/service/model/MoldService.java @@ -0,0 +1,7 @@ +package com.pgmmers.radar.service.model; + +import com.pgmmers.radar.vo.model.MoldVO; + +public interface MoldService { + MoldVO get(Long id); +}