将 tensorflow.js lstm 的 1d 数组重塑为 3d

reshape 1d array to 3d for tensorflow.js lstm

我正在尝试使用时间序列数据预测未来的股票价格。我有一个包含 251 个时间步的 xs 数组,以及一个包含该时间步相应股票价格的 ys 数组。我已将 xs 数组重塑为 3d,但出现错误

'Input Tensors should have the same number of samples as target Tensors. Found 1 input sample(s) and 251 target sample(s).'

模型的代码如下。

var xs = [];
var ys = [];
for(i in result){
    xs.push(i);
    ys.push(result[i].close);
    }

    var xt = tf.tensor3d(xs, [1,xs.length,1]);
    var yt = tf.tensor2d(ys, [xs.length, 1]);
    //xt.reshape([1, xs.length, 1]).print();
    //yt.reshape([1, ys.length, 1]).print();
    var lstm1 = tf.layers.lstm({units: 32, returnSequences: true, inputShape:[xs.length,1]});
    var model = tf.sequential();
    model.add(lstm1);
    model.add(tf.layers.dropout({rate:0.2}));
    model.add(tf.layers.lstm({units:5}));
    model.add(tf.layers.dropout({rate:0.2}));
    model.add(tf.layers.dense({units:1, inputShape:[32], activation:'softmax'}));
    model.compile({optimizer:'adam', loss:'categoricalCrossentropy'});



    model.fit(xt, yt, {epochs:1000}).then(() => {

  bestfit = model.predict(tf.tensor(xs, [xs.length,1])).dataSync();

错误似乎来自 model.fit(x, y),因为 x 和 y 的形状似乎不匹配。

x 的形状为 [1, 251, 1],y 的形状为 [251, 1]。这不起作用,因为 x 中的特征多于 y 中的标签。你必须重塑 x 或 y。

  • 重塑 x:x.reshape([251, 1, 1])x.reshape([251, 1])

  • 重塑 y:y.reshape([1, 251])y.reshape([1, 251, 1])

注意:只要前两个维度大小相等并且,几乎有无限种重塑方法可以工作所有维度大小的乘积等于251。重塑的重点是不要失去特征和标签之间的相关性