Spaces:
Sleeping
Sleeping
Update curry_model.ipynb to reset execution counts, enhance model loading and prediction logic, and adjust input tensor shape for compatibility. Modify utils/testing.py to correct feature dimensions in reshaping and improve prediction output handling.
92b21c6 Download utils/testing.py from jawwaadsabree/CurryModel: direct link, hf CLI and curl.
- Browser
- Download file 3.6 kB
-
https://huggingface.co/spaces/jawwaadsabree/CurryModel/resolve/main/utils/testing.py
- Command line
-
hf download hf://spaces/jawwaadsabree/CurryModel/utils/testing.py
-
curl -L -o testing.py https://huggingface.co/spaces/jawwaadsabree/CurryModel/resolve/main/utils/testing.py
3.6 kB
| import numpy as np | |
| import torch | |
| import wandb | |
| import plotly.graph_objects as go | |
| from .model import get_model, get_loaders, fix_date, load_data, Config | |
| from .prediction import fix_points | |
| from wandb.sdk.wandb_config import Config as WandbConfig | |
| def predict(model, loader, scaler, device, no_log=False): | |
| model.eval() # Set model to evaluation mode | |
| predictions = [] | |
| actuals = [] | |
| originalInputs = [] | |
| with torch.no_grad(): | |
| for inputs, labels in loader: | |
| inputs = inputs.to(device) | |
| outputs = model(inputs) | |
| _originalInputs = scaler.inverse_transform(inputs.squeeze().cpu().numpy()) | |
| originalInputs.append(_originalInputs) | |
| predictions.append(outputs.cpu().numpy()) | |
| actuals.append(labels.cpu().numpy()) | |
| predictions = np.concatenate(predictions) | |
| actuals = np.concatenate(actuals) | |
| pred_ys = [] | |
| actual_ys = [] | |
| zs = [] | |
| pred_ys = [fix_points(x, scaler) for x in predictions.flatten()] | |
| actual_ys = [fix_points(y, scaler) for y in actuals.flatten()] | |
| for date in originalInputs: | |
| date = date[:, 0] | |
| for i, row in enumerate(date.flatten()): | |
| zs.append(row) | |
| # Assuming 'zs' is a tensor, first convert it to a NumPy array or list | |
| zs = zs.cpu().numpy() if isinstance(zs, torch.Tensor) else zs | |
| # Now you can apply set and sort operations | |
| zs = sorted(list(set(zs))) | |
| zs = [fix_date(date) for date in zs][-30:] if len(zs) > 30 else [fix_date(date) for date in zs][15:] | |
| # Create a figure | |
| fig = go.Figure() | |
| # pred_ys = [np.nan] * 15 + pred_ys | |
| # actual_ys = [np.nan] * 15 + actual_ys | |
| # Add Predictions plot | |
| fig.add_trace(go.Scatter(x=zs, y=pred_ys, mode='lines+markers', name='Predictions')) | |
| # Add Actual plot | |
| fig.add_trace(go.Scatter(x=zs, y=actual_ys, mode='lines+markers', name='Actual')) | |
| # Customize the layout (title, labels, etc.) | |
| fig.update_layout( | |
| title='Stephen Curry Points Prediction', | |
| xaxis_title='Date', | |
| yaxis_title='Points', | |
| xaxis=dict(tickmode='array', tickvals=zs, ticktext=zs), | |
| template='ggplot2', # Optional: Change plot theme | |
| width=1500, # Width of the plot | |
| height=400 # Height of the plot | |
| ) | |
| if not no_log: | |
| wandb.log({"predictions vs actuals": fig}) | |
| # Show the plot | |
| fig.show() | |
| def predict_only(config: Config | WandbConfig, scaler, device): | |
| model, _, _ = get_model(config) | |
| with wandb.init(project="curry-scraper", config=config.to_dict()): | |
| _, _, validation_loader = get_loaders(config, scaler) | |
| predict(model, validation_loader, scaler, device) | |
| def predict_next_game(model, scaler, device): | |
| last_15_df = load_data().tail(15) | |
| last_15_games_features = last_15_df.copy() | |
| last_15_games_features = scaler.fit_transform(last_15_games_features) | |
| last_15_games_features = last_15_games_features.reshape(1, 15, 59) # Reshape for the model | |
| last_15_df['Date'] = last_15_df['Date'].apply(fix_date) | |
| model.to(device) # Ensure model is on the correct device | |
| model.eval() # Set model to evaluation mode | |
| # Assuming last_15_games_features is a NumPy array with the features of the last 15 games | |
| inputs = torch.tensor(last_15_games_features).float().to(device) # Ensure the correct type and device | |
| # Get the prediction from the model | |
| with torch.no_grad(): | |
| prediction = model(inputs) # Output should be for the next game | |
| # Return the predicted value (e.g., predicted points) | |
| return fix_points(prediction.cpu().numpy(), scaler) |