尝试将 tensorflow python 移植到 javascript

Trying to port a tensorflow python to javascript

我正在尝试将这个 python 代码移植到 javascript,我在我的 js 脚本中得到了非常不同的结果,所以我想确保我的 dense层 是正确的:

Python

let trainValues = // data source
let trainLabels = // data source

model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(24, activation=tf.nn.relu),
  tf.keras.layers.Dense(2, activation=tf.nn.softmax)
])

model.compile(optimizer='adam',
  loss='sparse_categorical_crossentropy',
  metrics=['accuracy'])


model.fit(x=trainValues, y=trainLabels, epochs=5)

Node.js

let trainValues = // data source
let trainLabels = // data source

const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [24], units: 24, activation: 'relu'}));
model.add(tf.layers.dense({units: 1, activation: 'softmax'}));
model.compile({
    loss: tf.losses.softmaxCrossEntropy,
    optimizer: tf.train.adam(),
    metrics: ['accuracy']
});

trainValues = tf.tensor2d(trainValues);
trainLabels = tf.tensor1d(trainLabels);

await model.fit(trainValues, trainLabels, {
    epochs: 5
});

你的第二个密集层似乎有不同数量的单位(2 in python,1 in JavaScript)。

此外,您的损失函数不同(sparse_categorical_crossentropy in python,softmaxCrossEntropy in JavaScript)。您无需提供 tf.losses.* 函数之一,只需在此处传递一个字符串(定义为 here)。

要在 JavaScript 中使用相同的模型,代码应如下所示:

const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [24], units: 24, activation: 'relu'}));
model.add(tf.layers.dense({units: 2, activation: 'softmax'}));
model.compile({
    loss: 'sparseCategoricalCrossentropy',
    optimizer: tf.train.adam(),
    metrics: ['accuracy']
});

我假设输入单元的数量是 24 并且您正确处理了数据。