概要
plunkerでtensorflow.jsやってみた。
xorやってみた。
tf.variableで書いてみた。
学習したweight、biasを取り出した。
rustで、推論してみた。
サンプルコード
fn tanh(x: f64) -> f64 {
let a: f64 = (x).exp();
let b: f64 = (-x).exp();
return (a - b) / (a + b);
}
fn sigmoid(x: f64) -> f64 {
return 1.0 / (1.0 + (-x).exp());
}
fn main() {
let w1 = [[-3.4681022, 0.379121, -1.4711456, 2.2247136, 2.3135107, 2.7624693, -1.83576, -1.1545312], [2.1978209, 0.2895245, 2.0881913, -1.3450832, -1.4154571, 1.9255028, 3.2867477, 1.956522]];
let b1 = [-0.6591252, 0.3864409, 0.4982838, 0.3707547, 0.3982254, -0.3612466, 0.4284867, 0.2701645];
let w2 = [[1.4324994 ], [0.7911373], [-2.3011343], [-1.7614117], [-2.4442003], [3.9701838], [-1.837263], [-1.3641325]];
let b2 = [0.9285715];
for i in 0..4
{
let mut x = [0.0, 0.0];
let mut y = [0.0];
let mut h = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
if i == 0
{
x = [1.0, 0.0];
print!("1, 0 = ");
}
if i == 1
{
x = [0.0, 1.0];
print!("0, 1 = ");
}
if i == 2
{
x = [1.0, 1.0];
print!("1, 1 = ");
}
if i == 3
{
x = [0.0, 0.0];
print!("0, 0 = ");
}
for k in 0..2
{
for l in 0..8
{
h[l] += x[k] * w1[k][l];
}
}
for l in 0..8
{
h[l] += b1[l];
h[l] = tanh(h[l]);
}
for k in 0..8
{
for l in 0..1
{
y[l] += h[k] * w2[k][l];
}
}
for k in 0..1
{
y[k] += b2[k];
y[k] = sigmoid(y[k]);
}
println!("{} ", y[0]);
}
}
成果物
以上。