pub mod average_pooling_1d;
pub mod average_pooling_2d;
pub mod average_pooling_3d;
pub mod global_average_pooling_1d;
pub mod global_average_pooling_2d;
pub mod global_average_pooling_3d;
pub mod global_max_pooling_1d;
pub mod global_max_pooling_2d;
pub mod global_max_pooling_3d;
pub mod max_pooling_1d;
pub mod max_pooling_2d;
pub mod max_pooling_3d;
pub(crate) mod pooling_engine;
mod validation;
pub use average_pooling_1d::AveragePooling1D;
pub use average_pooling_2d::AveragePooling2D;
pub use average_pooling_3d::AveragePooling3D;
pub use global_average_pooling_1d::GlobalAveragePooling1D;
pub use global_average_pooling_2d::GlobalAveragePooling2D;
pub use global_average_pooling_3d::GlobalAveragePooling3D;
pub use global_max_pooling_1d::GlobalMaxPooling1D;
pub use global_max_pooling_2d::GlobalMaxPooling2D;
pub use global_max_pooling_3d::GlobalMaxPooling3D;
pub use max_pooling_1d::MaxPooling1D;
pub use max_pooling_2d::MaxPooling2D;
pub use max_pooling_3d::MaxPooling3D;
macro_rules! layer_functions_global_pooling {
() => {
fn output_shape(&self) -> String {
if !self.input_shape.is_empty() {
format!(
"({}, {})",
self.input_shape[0],
self.input_shape[self.input_shape.len() - 1]
)
} else {
String::from("Unknown")
}
}
$crate::neural_network::layers::no_trainable_parameters_layer_functions!();
};
}
macro_rules! layer_functions_1d_pooling {
() => {
fn output_shape(&self) -> String {
if !self.input_shape.is_empty() {
let output_shape = calculate_output_shape_1d_pooling(
&self.input_shape,
self.pool_size,
self.stride,
self.padding,
);
format!(
"({}, {}, {})",
output_shape[0], output_shape[1], output_shape[2]
)
} else {
String::from("Unknown")
}
}
$crate::neural_network::layers::no_trainable_parameters_layer_functions!();
};
}
macro_rules! layer_functions_2d_pooling {
() => {
fn output_shape(&self) -> String {
if !self.input_shape.is_empty() {
let output_shape = calculate_output_shape_2d_pooling(
&self.input_shape,
self.pool_size,
self.strides,
self.padding,
);
format!(
"({}, {}, {}, {})",
output_shape[0], output_shape[1], output_shape[2], output_shape[3]
)
} else {
String::from("Unknown")
}
}
$crate::neural_network::layers::no_trainable_parameters_layer_functions!();
};
}
macro_rules! layer_functions_3d_pooling {
() => {
fn output_shape(&self) -> String {
if !self.input_shape.is_empty() {
let output_shape = calculate_output_shape_3d_pooling(
&self.input_shape,
self.pool_size,
self.strides,
self.padding,
);
format!(
"({}, {}, {}, {}, {})",
output_shape[0],
output_shape[1],
output_shape[2],
output_shape[3],
output_shape[4]
)
} else {
String::from("Unknown")
}
}
$crate::neural_network::layers::no_trainable_parameters_layer_functions!();
};
}
pub(in crate::neural_network::layers::pooling) use layer_functions_1d_pooling;
pub(in crate::neural_network::layers::pooling) use layer_functions_2d_pooling;
pub(in crate::neural_network::layers::pooling) use layer_functions_3d_pooling;
pub(in crate::neural_network::layers::pooling) use layer_functions_global_pooling;