Files
EasyAi/src/main/java/org/dromara/easyai/rnnNerveEntity/HiddenNerve.java
2025-09-04 14:09:39 +08:00

53 lines
2.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package org.dromara.easyai.rnnNerveEntity;
import org.dromara.easyai.matrixTools.Matrix;
import org.dromara.easyai.i.ActiveFunction;
import org.dromara.easyai.i.OutBack;
import java.util.Map;
/**
* @author lidapeng
* 隐层神经元
* @date 9:30 上午 2019/12/21
*/
public class HiddenNerve extends Nerve {
private final int depth;//所处深度
public HiddenNerve(int id, int depth, int upNub, int downNub, float studyPoint,
boolean init, ActiveFunction activeFunction, int rzType, float lParam, int rnnOutNumber) throws Exception {//隐层神经元
super(id, upNub, "HiddenNerve", downNub, studyPoint,
init, activeFunction, rzType, lParam, rnnOutNumber);
this.depth = depth;
}
@Override
public void input(long eventId, float parameter, boolean isKernelStudy, Map<Integer, Float> E
, OutBack outBack, boolean isEmbedding, Matrix rnnMatrix) throws Exception {//接收上一层的输入
boolean allReady = insertParameter(eventId, parameter, isEmbedding);
if (allReady) {//参数齐了,开始计算 sigma - threshold
if (isEmbedding && !isKernelStudy) {
outBack.getWordVector(getId(), getWOne(eventId));
destoryParameter(eventId);
} else {
float sigma = calculation(eventId, isEmbedding);
float out = activeFunction.function(sigma);//激活函数输出数值
if (rnnMatrix != null) {//rnn 1改输出值2查看是否需要转向
out = out + rnnMatrix.getNumber(depth, getId() - 1);
}
if (isKernelStudy) {
outNub = out;
} else {
destoryParameter(eventId);
}
if (rnnMatrix != null && rnnMatrix.getX() == depth + 1) {//转向输出
sendRnnMessage(eventId, out, isKernelStudy, E, outBack, false, rnnMatrix);
} else {
sendMessage(eventId, out, isKernelStudy, E, outBack, false, rnnMatrix);
}
}
}
}
}