This commit is contained in:
2025-09-04 14:08:58 +08:00
parent 54098cd65e
commit 6c914866ec

View File

@@ -0,0 +1,61 @@
package org.dromara.easyai.rnnJumpNerveEntity;
import org.dromara.easyai.matrixTools.Matrix;
import org.dromara.easyai.matrixTools.MatrixOperation;
import org.dromara.easyai.i.OutBack;
import org.dromara.easyai.naturalLanguage.word.WordEmbedding;
import java.util.List;
public class NerveCenter extends MatrixOperation {//神经中枢
private final int depth;//该神经中枢的深度
private final float powerTh;//权重阈值
private final List<Nerve> nerveList;//该神经中枢控制的对应隐层神经元集合
private WordEmbedding wordEmbedding;//词嵌入
private final boolean isFinish;//是否是最后一层
public int getDepth() {
return depth;
}
public NerveCenter(int depth, List<Nerve> nerveList, float powerTh, boolean isFinish) {
this.depth = depth;
this.nerveList = nerveList;
this.powerTh = powerTh;
this.isFinish = isFinish;
}
public void setWordEmbedding(WordEmbedding wordEmbedding) {
this.wordEmbedding = wordEmbedding;
}
public void backType(long eventId, float parameter, int id, Matrix featureMatrix, OutBack outBack, String myWord) throws Exception {
if (id > 0 && parameter > powerTh) {//增加新特征继续传播
String nextWord = wordEmbedding.getWord(id - 1);
if (myWord == null) {
myWord = nextWord;
} else {
myWord = myWord + nextWord;
}
if (isFinish) {//输出结果
outBack.backWord(myWord, eventId);
} else {
Matrix matrix = wordEmbedding.getEmbedding(nextWord, eventId, false).getFeatureMatrix();
featureMatrix = pushVector(featureMatrix, matrix, true);
go(eventId, featureMatrix, outBack, myWord);
}
} else {//停止继续传播 进行输出
outBack.backWord(myWord, eventId);
}
}
private void go(long eventId, Matrix featureMatrix, OutBack outBack, String word) throws Exception {
//神经中枢收到传递命令 将命令传递给本层神经元
for (Nerve nerve : nerveList) {//将信息发送给目标层隐层神经元
nerve.sendMyTestMessage(eventId, featureMatrix, outBack, word);
}
}
}