【发布时间】:2018-05-20 10:13:02
【问题描述】:
我正在构建一个小程序来预测一维浮点数组中的一些浮点数。到目前为止,我一直在使用dense 层来实现这一点:
const model = sequential();
model.add(layers.dense({units: 32, inputShape: [numCols,]}));
model.add(layers.activation({activation: 'relu'}));
model.add(layers.dense({units: 4}));
model.add(layers.dense({units: 1}));
我的xs 输入形状是[numRows, numCols](例如[132, 100] - 在包含 132 个示例的数据集中:[[1, 2, 3, ...], [4, 5, 6, ... ], ...]) 并且我的ys 输出是单个值[num](例如[17.50])。
但我想尝试 LSTM 来测试它是否会表现得更好。问题是 LSTM 的层需要一个 3d 矩阵,我不知道该怎么做。
我尝试了以下方法:
const trainXs = xs.clone()
.reshape([numRows, numCols, 1]);
以上将我的输入[[1, 2, 3, ...], [4, 5, 6, ...], ...] 转换为[[[1], [2], [3], ...], [[4], [5], [6], ...], ...]。
还有层:
const model = sequential();
model.add(layers.simpleRNN({
units: 32,
inputShape: [numCols, numRows], // [100, 132]
recurrentInitializer: 'glorotNormal',
returnSequences: true
}));
model.add(layers.simpleRNN({
units: 32,
recurrentInitializer: 'glorotNormal',
returnSequences: true
}));
但上述操作会失败并出现以下错误:
Error: Error when checking input: expected simple_rnn_SimpleRNN1_input to have shape [,100,132], but got array with shape [132,100,1].
我有点困惑,我不确定我应该如何重塑我的 2d 张量以适应 LSTM 层的要求。
更新:
合适的电话:
model.fit(trainXs, trainYs, {
epochs: 1000,
batchSize: 12,
validationData: [testXs, testYs] // Test data has the same shape as trainXs/trainYs
});
我现在只有一层:
model.add(layers.simpleRNN({
units: 32,
inputShape: [1, numCols, numRows],
recurrentInitializer: 'glorotNormal',
returnSequences: true
}));
【问题讨论】:
标签: tensorflow machine-learning tensorflow.js