Struct AdaptiveAvgPool2D

Source
pub struct AdaptiveAvgPool2D<F: Float + Debug + Send + Sync> { /* private fields */ }
Expand description

Adaptive Average Pooling 2D layer

Applies average pooling with adaptive output size. The output size is specified, and the pooling kernel size and stride are computed automatically.

§Examples

use scirs2_neural::layers::{AdaptiveAvgPool2D, Layer};
use ndarray::{Array, Array4};

// Create an adaptive average pooling layer with output size 7x7
let pool = AdaptiveAvgPool2D::new((7, 7), Some("adaptive_pool")).unwrap();

// Forward pass with a batch of 2 samples, each with 3 channels and size 32x32
let batch_size = 2;
let channels = 3;
let height = 32;
let width = 32;
let input = Array4::<f64>::from_elem((batch_size, channels, height, width), 0.1).into_dyn();
let output = pool.forward(&input).unwrap();

// Output should have dimensions [batch_size, channels, 7, 7]
assert_eq!(output.shape(), &[batch_size, channels, 7, 7]);

Implementations§

Source§

impl<F: Float + Debug + ScalarOperand + Send + Sync + 'static> AdaptiveAvgPool2D<F>

Source

pub fn new(output_size: (usize, usize), name: Option<&str>) -> Result<Self>

Create a new adaptive average pooling layer

§Arguments
  • output_size - Desired output spatial size (height, width)
  • name - Optional name for the layer
§Returns
  • A new adaptive average pooling layer
Examples found in repository?
examples/new_features_showcase.rs (line 43)
33fn demonstrate_adaptive_pooling() -> Result<(), Box<dyn std::error::Error>> {
34    println!("🔧 Adaptive Pooling Layers Demonstration");
35    println!("========================================\n");
36
37    // Create input tensor: batch_size=2, channels=3, height=32, width=32
38    let input = Array4::<f64>::from_elem((2, 3, 32, 32), 1.5);
39    println!("Input shape: {:?}", input.shape());
40
41    // Adaptive Average Pooling to 7x7
42    println!("\n1. Adaptive Average Pooling (32x32 → 7x7):");
43    let adaptive_avg_pool = AdaptiveAvgPool2D::new((7, 7), Some("adaptive_avg_7x7"))?;
44    let avg_output = adaptive_avg_pool.forward(&input.clone().into_dyn())?;
45    println!("   Output shape: {:?}", avg_output.shape());
46    println!(
47        "   Layer description: {}",
48        adaptive_avg_pool.layer_description()
49    );
50
51    // Adaptive Max Pooling to 4x4
52    println!("\n2. Adaptive Max Pooling (32x32 → 4x4):");
53    let adaptive_max_pool = AdaptiveMaxPool2D::new((4, 4), Some("adaptive_max_4x4"))?;
54    let max_output = adaptive_max_pool.forward(&input.into_dyn())?;
55    println!("   Output shape: {:?}", max_output.shape());
56    println!(
57        "   Layer description: {}",
58        adaptive_max_pool.layer_description()
59    );
60
61    // Non-square adaptive pooling
62    println!("\n3. Non-square Adaptive Pooling (32x32 → 3x5):");
63    let non_square_pool = AdaptiveAvgPool2D::new((3, 5), Some("non_square"))?;
64    let non_square_output =
65        non_square_pool.forward(&Array4::<f64>::from_elem((1, 2, 16, 20), 2.0).into_dyn())?;
66    println!("   Input shape: [1, 2, 16, 20]");
67    println!("   Output shape: {:?}", non_square_output.shape());
68
69    println!("✅ Adaptive pooling demonstration completed!\n");
70    Ok(())
71}
Source

pub fn name(&self) -> Option<&str>

Get the name of the layer

Trait Implementations§

Source§

impl<F: Float + Debug + ScalarOperand + Send + Sync + 'static> Layer<F> for AdaptiveAvgPool2D<F>

Source§

fn as_any(&self) -> &dyn Any

Get the layer as a dyn Any for downcasting Read more
Source§

fn as_any_mut(&mut self) -> &mut dyn Any

Get the layer as a mutable dyn Any for downcasting Read more
Source§

fn forward(&self, input: &Array<F, IxDyn>) -> Result<Array<F, IxDyn>>

Forward pass of the layer Read more
Source§

fn backward( &self, _input: &Array<F, IxDyn>, grad_output: &Array<F, IxDyn>, ) -> Result<Array<F, IxDyn>>

Backward pass of the layer to compute gradients Read more
Source§

fn update(&mut self, _learning_rate: F) -> Result<()>

Update the layer parameters with the given gradients Read more
Source§

fn layer_type(&self) -> &str

Get the type of the layer (e.g., “Dense”, “Conv2D”) Read more
Source§

fn parameter_count(&self) -> usize

Get the number of trainable parameters in this layer Read more
Source§

fn layer_description(&self) -> String

Get a detailed description of this layer Read more
Source§

fn params(&self) -> Vec<Array<F, IxDyn>>

Get the parameters of the layer Read more
Source§

fn gradients(&self) -> Vec<Array<F, IxDyn>>

Get the gradients of the layer parameters Read more
Source§

fn set_gradients(&mut self, _gradients: &[Array<F, IxDyn>]) -> Result<()>

Set the gradients of the layer parameters Read more
Source§

fn set_params(&mut self, _params: &[Array<F, IxDyn>]) -> Result<()>

Set the parameters of the layer Read more
Source§

fn set_training(&mut self, _training: bool)

Set the layer to training mode (true) or evaluation mode (false) Read more
Source§

fn is_training(&self) -> bool

Get the current training mode Read more

Auto Trait Implementations§

§

impl<F> Freeze for AdaptiveAvgPool2D<F>

§

impl<F> RefUnwindSafe for AdaptiveAvgPool2D<F>
where F: RefUnwindSafe,

§

impl<F> Send for AdaptiveAvgPool2D<F>

§

impl<F> Sync for AdaptiveAvgPool2D<F>

§

impl<F> Unpin for AdaptiveAvgPool2D<F>
where F: Unpin,

§

impl<F> UnwindSafe for AdaptiveAvgPool2D<F>
where F: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V