我正在尝试使用Tensorflow Js实施和测试单个输出MLP,其中我的数据如下所示:
dataset = [[x_1, x_2, ..., x_n, y], ...]
这是我的代码:
for (var i = 0; i < dataset.length; ++i) {
x[i] = dataset[i].slice(0, inputLength);
y[i] = dataset[i][inputLength];
}
const xTrain = tf.tensor2d(x.slice(1));
const yTrain = tf.tensor1d(y.slice(1));
const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [inputLength], units: 10}));
model.add(tf.layers.dense({units: 1}));
const learningRate = 0.1;
const optimizer = tf.train.sgd(learningRate);
model.compile({loss: 'meanSquaredError', optimizer});
return model.fit(
xTrain,
yTrain,
{
batchSize: 10,
epochs: 5
}
)
问题是我的模型没有收敛,并且每一步的损失函数的值都是null
。另外,请注意,我知道我可以使用多元回归来解决这个问题,但是我想将结果与MLP进行比较。
我想知道是否有人可以帮助我。
答案 0 :(得分:1)
model.fit()
中使用的x / y张量的尺寸必须比模型的第一层/最后一层的形状大一个,以表示多个训练数据集,因此可以进行GPU加速的批量训练
模型的另一个问题是较高的learningRate
(与训练值的大小有关),这会阻止模型收敛,因为它会跳过最优解并失去控制。
减小learningRate
或将学习值标准化为较小的幅度。