tritium demo conv2d
transcript ·
python ·
c ·
rust
// TRITIUM-PROVENANCE sha256=fa150e08b678777a032d553feb0ff5a804a6e70b0b4702daf495d667b6bba189 lang=rust
// TRITIUM-HEIGHT high=1.00 mid=0.00 low=0.00
fn im2col_f(x: &mut [f64], h: i64, w: i64, kh: i64, kw: i64, out: &mut [f64]) -> i64 {
let mut j = 0;
let mut u = 0;
let mut v = 0;
let mut p = 0;
let mut i = 0;
while i < ((h - kh) + 1) {
j = 0;
while j < ((w - kw) + 1) {
u = 0;
while u < kh {
v = 0;
while v < kw {
out[p as usize] = x[(((((i + u) * w) + (j + v))) as usize)];
p += 1;
v += 1;
}
u += 1;
}
j += 1;
}
i += 1;
}
p
}
fn conv2d_f(x: &mut [f64], h: i64, w: i64, k: &mut [f64], kh: i64, kw: i64, out: &mut [f64]) -> i64 {
let mut j = 0;
let mut u = 0;
let mut v = 0;
let mut x_2 = 0.0;
let mut sum = (h - kh) + 1;
let mut sum_2 = (w - kw) + 1;
let mut i = 0;
while i < sum {
j = 0;
while j < sum_2 {
x_2 = 0.0;
u = 0;
while u < kh {
v = 0;
while v < kw {
x_2 = x_2 + (x[(((((i + u) * w) + (j + v))) as usize)] * k[((((u * kw) + v)) as usize)]);
v += 1;
}
u += 1;
}
out[((((i * sum_2) + j)) as usize)] = x_2;
j += 1;
}
i += 1;
}
sum * sum_2
}
fn list_get(a: &[i64], i: i64) -> i64 {
if i < 0 {
return 0;
}
let i = i as usize;
if i >= a.len() { 0 } else { a[i] }
}
fn list_set(vals: &mut [i64], i: i64, v: i64) -> i64 {
vals[i as usize] = v;
v
}
fn relu(vals: &mut [i64], n: i64) -> i64 {
let mut i = 0;
while i < n {
if list_get(vals, i) < 0 {
list_set(vals, i, 0);
}
i += 1;
}
n
}