unify model names

This commit is contained in:
Dobromir Popov
2025-09-09 01:10:35 +03:00
parent 0e886527c8
commit 317c703ea0
5 changed files with 229 additions and 104 deletions

View File

@@ -6,8 +6,6 @@ Much larger and more sophisticated architecture for better learning
import os
import logging
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import math
@@ -15,10 +13,30 @@ import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
import torch.nn.functional as F
from typing import Dict, Any, Optional, Tuple
# Try to import optional dependencies
try:
import numpy as np
HAS_NUMPY = True
except ImportError:
np = None
HAS_NUMPY = False
try:
import matplotlib.pyplot as plt
HAS_MATPLOTLIB = True
except ImportError:
plt = None
HAS_MATPLOTLIB = False
try:
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
HAS_SKLEARN = True
except ImportError:
HAS_SKLEARN = False
# Import checkpoint management
from NN.training.model_manager import save_checkpoint, load_best_checkpoint
from NN.training.model_manager import create_model_manager
@@ -423,38 +441,46 @@ class EnhancedCNNModel(nn.Module):
'features': self._memory_barrier(processed_features)
}
def predict(self, feature_matrix: np.ndarray) -> Dict[str, Any]:
def predict(self, feature_matrix) -> Dict[str, Any]:
"""
Make predictions on feature matrix
Args:
feature_matrix: numpy array of shape [sequence_length, features]
feature_matrix: tensor or numpy array of shape [sequence_length, features]
Returns:
Dictionary with prediction results
"""
self.eval()
with torch.no_grad():
# Convert to tensor and add batch dimension
if isinstance(feature_matrix, np.ndarray):
if HAS_NUMPY and isinstance(feature_matrix, np.ndarray):
x = torch.FloatTensor(feature_matrix).unsqueeze(0) # Add batch dim
else:
elif isinstance(feature_matrix, torch.Tensor):
x = feature_matrix.unsqueeze(0)
else:
x = torch.FloatTensor(feature_matrix).unsqueeze(0)
# Move to device
device = next(self.parameters()).device
x = x.to(device)
# Forward pass
outputs = self.forward(x)
# Extract results with proper shape handling
probs = outputs['probabilities'].cpu().numpy()[0]
confidence_tensor = outputs['confidence'].cpu().numpy()
regime = outputs['regime'].cpu().numpy()[0]
volatility = outputs['volatility'].cpu().numpy()
if HAS_NUMPY:
probs = outputs['probabilities'].cpu().numpy()[0]
confidence_tensor = outputs['confidence'].cpu().numpy()
regime = outputs['regime'].cpu().numpy()[0]
volatility = outputs['volatility'].cpu().numpy()
else:
probs = outputs['probabilities'].cpu().tolist()[0]
confidence_tensor = outputs['confidence'].cpu().tolist()
regime = outputs['regime'].cpu().tolist()[0]
volatility = outputs['volatility'].cpu().tolist()
# Handle confidence shape properly
if isinstance(confidence_tensor, np.ndarray):
if HAS_NUMPY and isinstance(confidence_tensor, np.ndarray):
if confidence_tensor.ndim == 0:
confidence = float(confidence_tensor.item())
elif confidence_tensor.size == 1:
@@ -465,7 +491,7 @@ class EnhancedCNNModel(nn.Module):
confidence = float(confidence_tensor)
# Handle volatility shape properly
if isinstance(volatility, np.ndarray):
if HAS_NUMPY and isinstance(volatility, np.ndarray):
if volatility.ndim == 0:
volatility = float(volatility.item())
elif volatility.size == 1:
@@ -474,20 +500,29 @@ class EnhancedCNNModel(nn.Module):
volatility = float(volatility[0] if len(volatility) > 0 else 0.0)
else:
volatility = float(volatility)
# Determine action (0=BUY, 1=SELL for 2-action system)
action = int(np.argmax(probs))
if HAS_NUMPY:
action = int(np.argmax(probs))
else:
action = int(torch.argmax(torch.tensor(probs)).item())
action_confidence = float(probs[action])
# Convert logits to list
if HAS_NUMPY:
raw_logits = outputs['logits'].cpu().numpy()[0].tolist()
else:
raw_logits = outputs['logits'].cpu().tolist()[0]
return {
'action': action,
'action_name': 'BUY' if action == 0 else 'SELL',
'confidence': float(confidence),
'action_confidence': action_confidence,
'probabilities': probs.tolist(),
'regime_probabilities': regime.tolist(),
'probabilities': probs if isinstance(probs, list) else probs.tolist(),
'regime_probabilities': regime if isinstance(regime, list) else regime.tolist(),
'volatility_prediction': float(volatility),
'raw_logits': outputs['logits'].cpu().numpy()[0].tolist()
'raw_logits': raw_logits
}
def get_memory_usage(self) -> Dict[str, Any]: