【发布时间】:2018-08-22 01:05:16
【问题描述】:
我正在尝试使用时间序列数据来预测未来的股票价格。我有一个 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();
【问题讨论】:
-
xs 和 ys 定义在哪里?
-
你能在
model.fit之前做console.log("xt.shape", xt.shape, "yt.shape", yt.shape)并在此处发布结果吗? -
@edkeveked xt.shape (3) [1, 251, 1]0: 11: 2512: 1length: 3__proto__: Array(0) yt.shape (2) [251, 1]跨度>
-
@edkeveked xt.shape (3) [1, 251, 1] yt.shape (2) [251, 1]
-
@scottm,现在我清楚地知道您为什么会出现错误。我会更新我的答案
标签: javascript tensorflow lstm tensorflow.js