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

时间:2018-08-20 21:11:08

标签: javascript tensorflow lstm tensorflow.js

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

'输入张量应具有与目标张量相同的样本数。找到1个输入样本和251个目标样本。'

该模型的代码如下。

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();

1 个答案:

答案 0 :(得分:1)

错误似乎来自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 。整形的关键是不要失去特征和标签之间的相关性