试图学习tensorflow.js,但需要一个更简单的例子,如brain.js

时间:2018-06-14 20:13:40

标签: javascript node.js tensorflow.js brain.js

brain.js的例子让我能够很好地理解软件 - 以及机器学习的各个方面。

现在我正在努力学习tensorflow.js,很难复制相同类型的代码。

例如,TensorFlow相当于以下脑代码是什么?

var net = new brain.NeuralNetwork();

net.train([{input: { r: 0.03, g: 0.7, b: 0.5 }, output: { black: 1 }},
       {input: { r: 0.16, g: 0.09, b: 0.2 }, output: { white: 1 }},
       {input: { r: 0.5, g: 0.5, b: 1.0 }, output: { white: 1 }}]);

var output = net.run({ r: 1, g: 0.4, b: 0 });  // { white: 0.99, black: 0.002 }

1 个答案:

答案 0 :(得分:4)

这将是您提供的示例的简化版本:

const net = tf.sequential();
net.add(tf.layers.dense({
  units: 2,
  inputShape: [3],
  activation: 'sigmoid'
}));
net.compile({
  loss: 'meanSquaredError',
  optimizer: 'sgd'
});

const xs = tf.tensor2d([
  [0.03, 0.7, 0.5],
  [0.16, 0.09, 0.2],
  [0.5, 0.5, 1.0]
]);
const ys = tf.tensor2d([
  [1, 0],
  [0, 1],
  [0, 1]
]);

net.fit(xs, ys).then(() => {
  const xPredict = tf.tensor2d([
    [1.0, 0.4, 0.0]
  ]);

  const prediction = net.predict(xPredict);
  prediction.print();
});
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.11.6">
</script>

但正如您所看到的,您必须更加具体地了解神经网络实际上做了什么。我刚刚使用了你可以使用的基本选项。正如您所看到的,网络因此而表现非常糟糕,但我希望您能了解其工作原理。所以让我试着解释这个片段的作用:

const通常用于tf.tensor,因为它们存在于GPU上,因此无论如何它们都无法更改。

tf.sequential()创建一个空的前馈网络。 (如果你不知道那是什么,那么在没有实现的情况下首先尝试学习神经网络)

tf.layers.dense()创建一个完全连接的图层。

units:2定义图层的输出形状。在这种情况下,矢量具有两个值。

任何非第一层都可以忽略

inputShape: [3],因为它可以由前一层推断并定义输入张量的形状

activation: 'sigmoid'是激活函数,它应用于图层的返回值,并且高度依赖于您要解决的问题。

.compile()使用给定选项编译网络,并且也可以自定义

xsys是培训数据集。注意:它们有一个额外的维度来表示多个x-y对,因此它们可以批量传递给训练函数。

.fit()是训练方法并训练网络的内部权重。注意:这是一个异步函数,因此您必须等到它完成后才能使用该模型。

xPredict是测试数据,也是一个高于网络返回形状的维度。

.predict()根据给定的输入预测网络的输出。

.print()在控制台中输出张量。 (如果它太大,就会被裁剪掉)

我强烈建议您在尝试实施神经网络之前先了解神经网络(通过复制),因为它们会变得非常复杂和令人困惑。然后你可以阅读文档,看看有什么可能。