Files
rustytorch/crates/core/rtx-nn/src/functional.rs
T
2026-03-04 00:08:42 +00:00

60 lines
1.5 KiB
Rust

//! Functional API for neural network operations
use crate::Result;
use rtx_tensor::Tensor;
/// Linear transformation: y = xW^T + b
pub fn linear(input: &Tensor, weight: &Tensor, bias: Option<&Tensor>) -> Result<Tensor> {
let output = input.matmul(&weight.transpose(0, 1)?)?;
if let Some(bias) = bias {
output.add(bias).map_err(Into::into)
} else {
Ok(output)
}
}
/// ReLU activation function
pub fn relu(input: &Tensor) -> Result<Tensor> {
input
.maximum(&Tensor::zeros_like(input)?)
.map_err(Into::into)
}
/// GELU activation function (simplified)
pub fn gelu(input: &Tensor) -> Result<Tensor> {
// Simplified: just return input for now
Ok(input.clone())
}
/// Softmax function
pub fn softmax(input: &Tensor, dim: i32) -> Result<Tensor> {
Ok(input.softmax(dim)?)
}
/// 2D convolution operation (placeholder)
pub fn conv2d(
input: &Tensor,
weight: &Tensor,
bias: Option<&Tensor>,
_stride: (usize, usize),
_padding: (usize, usize),
) -> Result<Tensor> {
// Placeholder: just do matrix multiplication
let output = input.matmul(weight)?;
if let Some(bias) = bias {
output.add(bias).map_err(Into::into)
} else {
Ok(output)
}
}
/// Dropout function (placeholder)
pub fn dropout(input: &Tensor, _p: f32, training: bool) -> Result<Tensor> {
if training {
// Placeholder: just return input for now
Ok(input.clone())
} else {
Ok(input.clone())
}
}