Source code for nirs4all.controllers.models.tensorflow.data_prep

"""
TensorFlow Data Preparation

This module handles TensorFlow-specific data preparation and tensor formatting.
"""

from typing import Any, Optional, Tuple
import numpy as np


[docs] class TensorFlowDataPreparation: """Handles TensorFlow-specific data preparation and reshaping."""
[docs] @staticmethod def prepare_features(X: np.ndarray) -> np.ndarray: """Prepare features for TensorFlow (proper tensor formatting). Handles conversion to float32 and proper shape formatting: - 2D: (samples, features) -> reshape to (samples, features, 1) for Conv1D - 3D: Only transpose if needed (channels < features), ensuring Conv1D gets (samples, timesteps, channels) Args: X: Input features array. Returns: Prepared features array in float32. """ # Convert to float32 for TensorFlow X = X.astype(np.float32, copy=False) # Handle 2D data: add channel dimension for Conv1D # (samples, features) -> (samples, features, 1) if X.ndim == 2: X = np.expand_dims(X, axis=-1) # Handle 3D data: transpose only if we have (batch, channels, features) where channels < features # This ensures Conv1D receives (batch, timesteps, channels) format # For example: (batch, 3, 200) -> (batch, 200, 3) for 200 wavelengths and 3 processings elif X.ndim == 3: if X.shape[1] < X.shape[2]: X = np.transpose(X, (0, 2, 1)) return X
[docs] @staticmethod def prepare_targets(y: Optional[np.ndarray]) -> Optional[np.ndarray]: """Prepare targets for TensorFlow. Converts to float32 and flattens if needed. Args: y: Target values array (optional). Returns: Prepared targets array in float32, or None if input was None. """ if y is None: return None y = y.astype(np.float32, copy=False) # Flatten if 2D with single column if y.ndim == 2 and y.shape[1] == 1: y = y.ravel() return y
[docs] @staticmethod def prepare_data( X: np.ndarray, y: Optional[np.ndarray], context: Any = None ) -> Tuple[np.ndarray, Optional[np.ndarray]]: """Prepare both features and targets for TensorFlow. Args: X: Input features array. y: Target values array (optional). context: Execution context (currently unused but kept for interface compatibility). Returns: Tuple of (prepared_X, prepared_y). """ X_prepared = TensorFlowDataPreparation.prepare_features(X) y_prepared = TensorFlowDataPreparation.prepare_targets(y) return X_prepared, y_prepared