-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
I have been trying to use the pyaging package through spyder, as it is one of the only packages that includes the Horvath centenarian clocks. I have been following the tutorial available, but keep running into an issue when using pya.pred.predict_age(). I am very new to python, and have only used it one other time. I have included the code I ran and the output it gave, hoping for some troubleshooting advice.
Thank you!
import pandas as pd
import pyaging as pya
betas = pd.read_csv("/Users/hayleywelsh/Desktop/Methyl paper 3/Paper_3_QC/Raw-beta-values-N87-n866895-no-annotation.csv", index_col=0)
betas = betas.T
betas = pya.pp.epicv2_probe_aggregation(betas)
|-----> 🏗️ Starting epicv2_probe_aggregation function
|-----> ⚙️ Looking for duplicated probes started
|-----------> in progress: 100.0000%
|-----------> There are no duplicated probes. Returning original data
|-----> 🎉 Done! [17.0187s]
adata = pya.pp.df_to_adata(betas, imputer_strategy='knn')
|-----> 🏗️ Starting df_to_adata function
|-----> ⚙️ Create anndata object started
|-----------? Dropping 669 columns with only NAs: ['cg25399512', 'cg15734032', 'cg16292782'], etc.
|-----> ⚠️ Create anndata object finished [1.5476s]
|-----> ⚙️ Add metadata to anndata started
|-----------? No metadata provided. Leaving adata.obs empty
|-----> ⚠️ Add metadata to anndata finished [0.0013s]
|-----> ⚙️ Log data statistics started
|-----------> There are 87 observations
|-----------> There are 866226 features
|-----------> Total missing values: 41628
|-----------> Percentage of missing values: 0.06%
|-----> ✅ Log data statistics finished [0.0886s]
|-----> ⚙️ Impute missing values started
|-----------> Imputing missing values using knn strategy
|-----> ✅ Impute missing values finished [21.9341s]
|-----> ⚙️ Add imputer strategy to adata.uns started
|-----> ✅ Add imputer strategy to adata.uns finished [0.0008s]
|-----> 🎉 Done! [23.5831s]
encen100_results = pya.pred.predict_age(adata, ['encen100'])
|-----> 🏗️ Starting predict_age function
|-----> ⚙️ Set PyTorch device started
|-----------> Using device: cpu
|-----> ✅ Set PyTorch device finished [0.0015s]
|-----> 🕒 Processing clock: encen100
|-----------> ⚙️ Load clock started
|-----------------> Data found in pyaging_data/encen100.pt
|-----------> ✅ Load clock finished [0.0091s]
|-----------> ⚙️ Check features in adata started
|-----------------> All features are present in adata.var_names.
|-----------> ✅ Check features in adata finished [0.2808s]
|-----------> ⚙️ Predict ages with model started
|-----------------> There is no preprocessing necessary
|-----------------> There is no postprocessing necessary
|-----------------> in progress: 100.0000%
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[8], line 1
----> 1 encen100_results = pya.pred.predict_age(adata, ['encen100'])
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/pyaging/predict/_pred.py:107, in predict_age(adata, clock_names, dir, batch_size, clean, verbose)
99 check_features_in_adata(
100 adata,
101 model,
102 logger,
103 indent_level=2,
104 )
106 # Perform age prediction using the model applying preprocessing and postprocessing steps
--> 107 predicted_ages_tensor = predict_ages_with_model(adata, model, device, batch_size, logger, indent_level=2)
109 # Add predicted ages and clock metadata to adata
110 add_pred_ages_and_clock_metadata_adata(adata, model, predicted_ages_tensor, dir, logger, indent_level=2)
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/pyaging/utils/_utils.py:66, in progress.<locals>.decorator.<locals>.wrapper(*args, **kwargs)
64 logger = args[-1] # Assumes logger is the last positional argument
65 logger.start_progress(f"{message} started", indent_level=indent_level)
---> 66 result = func(*args, **kwargs)
67 logger.finish_progress(f"{message} finished", indent_level=indent_level)
68 return result
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/pyaging/predict/_pred_utils.py:315, in predict_ages_with_model(adata, model, device, batch_size, logger, indent_level)
313 with torch.inference_mode():
314 for batch in main_tqdm(dataloader, indent_level=indent_level + 1, logger=logger):
--> 315 batch_pred = model(batch.obsm[f"X_{model.metadata['clock_name']}"])
316 predictions.append(batch_pred)
317 # Concatenate all batch predictions
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
1510 else:
-> 1511 return self._call_impl(*args, **kwargs)
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
1515 # If we don't have any hooks, we want to skip the rest of the logic in
1516 # this function, and just call forward.
1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1518 or _global_backward_pre_hooks or _global_backward_hooks
1519 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1520 return forward_call(*args, **kwargs)
1522 try:
1523 result = None
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/pyaging/models/_base_models.py:40, in pyagingModel.forward(self, x)
38 def forward(self, x):
39 x = self.preprocess(x)
---> 40 x = self.base_model(x)
41 x = self.postprocess(x)
42 return x
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
1510 else:
-> 1511 return self._call_impl(*args, **kwargs)
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
1515 # If we don't have any hooks, we want to skip the rest of the logic in
1516 # this function, and just call forward.
1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1518 or _global_backward_pre_hooks or _global_backward_hooks
1519 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1520 return forward_call(*args, **kwargs)
1522 try:
1523 result = None
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/pyaging/models/_base_models.py:68, in LinearModel.forward(self, x)
67 def forward(self, x):
---> 68 x = self.linear(x)
69 return x
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
1510 else:
-> 1511 return self._call_impl(*args, **kwargs)
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
1515 # If we don't have any hooks, we want to skip the rest of the logic in
1516 # this function, and just call forward.
1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1518 or _global_backward_pre_hooks or _global_backward_hooks
1519 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1520 return forward_call(*args, **kwargs)
1522 try:
1523 result = None
File ~/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/torch/nn/modules/linear.py:116, in Linear.forward(self, input)
115 def forward(self, input: Tensor) -> Tensor:
--> 116 return F.linear(input, self.weight, self.bias)
RuntimeError: mat1 and mat2 must have the same dtype, but got Float and Double
Metadata
Metadata
Assignees
Labels
No labels