[英]TensorFlow.js How to train output = input+1
我正在尝试学习 TensorFlow.js 并尝试训练它,因此当给出输入时,输出应该是 input+1。
我的代码:
const model = tf.sequential();
const hiddenLayer = tf.layers.dense({
inputShape: [1],
activation: "sigmoid",
units: 1
});
const outputLayer = tf.layers.dense({
activation: "sigmoid",
units: 1
});
model.add(hiddenLayer);
model.add(outputLayer);
model.compile({
loss: "meanSquaredError",
optimizer: tf.train.sgd()
})
const trainedDataInput = [1, 2, 3, 4, 8, 100, 200];
const trainedDataOutput = [2, 3, 4, 5, 9, 101, 201];
const trainedDataInputTensor = tf.tensor(trainedDataInput);
const trainedDataOutputTensor = tf.tensor(trainedDataOutput);
model.fit(trainedDataInputTensor, trainedDataOutputTensor);
const toPredict = tf.tensor([8]);
model.predict(toPredict).print();
输出似乎总是在 0.1 和 0.9 之间。 我做错了什么?
+1对kokodoko所说的。 sigmoid 激活通常用于二元分类。 要进行线性回归,您需要线性(默认)激活。
您的代码的其他问题: 1. 对于线性回归,您只需要一个密集层。 2. 输入示例的形状应为 [numExamples, 1],在您的情况下为 [8, 1]。 3. 您需要指定在fit()
调用期间训练模型的次数。
请参阅下面更正后的代码。
const model = tf.sequential();
model.add(tf.layers.dense({
inputShape: [1], // 'linear' is the default activation, so no need to specify it.
units: 1
}));
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'})
const trainedDataInput = [1, 2, 3, 4, 8, 100, 200];
const trainedDataOutput = [2, 3, 4, 5, 9, 101, 201];
const trainedDataInputTensor = tf.tensor(trainedDataInput, [8, 1])
const trainedDataOutputTensor = tf.tensor(trainedDataOutput, [8, 1])
const history = await model.fit(trainedDataInputTensor, trainedDataOutputTensor, {epochs: 100});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.