繁体   English   中英

TensorFlow.js 如何训练输出 = 输入 + 1

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM