DL4J ComputationGraph报错“cannot do forward pass: inputs not set”求助
问题分析与解决
报错“cannot do forward pass: inputs not set”的核心原因是模型声明的输入未被完整传入,或模型结构存在维度配置错误,以下是具体排查和修复方案:
1. 必须完整传入所有声明的输入
你的代码通过addInputs(inAndOutNames)声明了所有输入(bit0到bitN-1、p),在训练或预测时,必须严格按照inAndOutNames的顺序传入所有对应数据,遗漏任意一个都会触发该错误。
示例喂数据代码(以inputAmount=3为例):
// 构造符合InputType.recurrent(1)的输入:形状为[批量大小, 时间步长, 1] INDArray bit0 = Nd4j.rand(new int[]{8, 10, 1}); INDArray bit1 = Nd4j.rand(new int[]{8, 10, 1}); INDArray bit2 = Nd4j.rand(new int[]{8, 10, 1}); INDArray p = Nd4j.rand(new int[]{8, 10, 1}); // 按addInputs的顺序传入所有输入 INDArray[] outputs = model.output(bit0, bit1, bit2, p); // 训练时使用MultiDataSet MultiDataSet dataSet = new MultiDataSet( new INDArray[]{bit0, bit1, bit2, p}, new INDArray[]{Nd4j.rand(new int[]{8, 10, 10})} // 对应输出层10维的标签 ); model.fit(dataSet);
2. 修正LSTM层的输入维度配置
l2层同时接收l1的输出(128维特征)和p的输入(1维特征),Deeplearning4j默认会在特征维度将两个输入拼接,因此l2的nIn必须设置为128 + 1 = 129,而非当前的128。维度不匹配会导致后续运行错误,需立即修正:
.addLayer("l2", new LSTM.Builder().nIn(129).nOut(256).build(), "l1", "p")
3. 验证输入名称一致性
检查所有输入名称(bit0到bitN-1、p)在addInputs、inputNames、层的输入参数中完全一致,避免拼写错误导致输入未被正确关联。
内容的提问来源于stack exchange,提问作者Fi0x
相关产品推荐
相关产品推荐

