AttributeError: Das Objekt „implicit.evaluation._memoryviewslice“ hat kein Attribut „dtype“.
Posted: 11 Jan 2025, 08:31
Ich habe ein ALS-Modell mithilfe des impliziten Pakets mit GPU-Unterstützung trainiert. Bei der Auswertung des Modells mit der Funktion ndcg_at_k ist jedoch der folgende Fehler aufgetreten:
Umgebungsdetails:
[*]implizit: 0.7.2 (aus dem Quellcode erstellt)
[*]Python: 3.11.2
[*]CUDA: 12.3
[*]Betriebssystem: Debian GNU/Linux 12
Lösungsversuche:
Wie kann ich diesen AttributeError beheben, wenn ich das Modell mit der impliziten Bibliothek auswerte?
Code: Select all
import os
import random
import pandas as pd
from scipy.sparse import csr_matrix
from implicit.evaluation import train_test_split, ndcg_at_k, mean_average_precision_at_k
from implicit.gpu.als import AlternatingLeastSquares
os.environ['OPENBLAS_NUM_THREADS']="1"
os.environ['CUDA_VISIBLE_DEVICES']="0"
# init random data
n_actions = 100000
max_uid = 100000
max_action_id = 10000
df = pd.DataFrame(data={
"user_id" : [random.randint(1, max_uid) for i in range(0, n_actions)],
"action" : [random.randint(1, max_action_id) for i in range(0, n_actions)],
"impression" : [1 for i in range(0, n_actions)]
})
# convert to sparse format
user_rows = [uid for uid in df.user_id.tolist()]
query_cols = [st for st in df.action.tolist()]
qvecs = csr_matrix((df.impression, (user_rows, query_cols)))
# train test split and model training
train_user_items, test_user_items = train_test_split(qvecs, train_percentage=0.9, random_state=19)
model = AlternatingLeastSquares(factors=130, regularization=0.05, alpha=1.0, calculate_training_loss=True)
model.fit(train_user_items)
# calculate ndcg
ndcg = ndcg_at_k(model, train_user_items, test_user_items, K=14, show_progress=True, num_threads=1)n.tolist()]
qvecs = csr_matrix((df.impression, (user_rows, query_cols)))
# train test split and model training
train_user_items, test_user_items = train_test_split(qvecs, train_percentage=0.9, random_state=19)
model = AlternatingLeastSquares(factors=130, regularization=0.05, alpha=1.0, calculate_training_loss=True)
model.fit(train_user_items)
# calculate ndcg
ndcg = ndcg_at_k(model, train_user_items, test_user_items, K=14, show_progress=True, num_threads=1)
Code: Select all
AttributeError: 'implicit.evaluation._memoryviewslice' object has no attribute 'dtype'
[*]implizit: 0.7.2 (aus dem Quellcode erstellt)
[*]Python: 3.11.2
[*]CUDA: 12.3
[*]Betriebssystem: Debian GNU/Linux 12
Lösungsversuche:
- Ich habe versucht, das Modell in CPU zu konvertieren, aber das Problem wurde dadurch nicht behoben.
Wie kann ich diesen AttributeError beheben, wenn ich das Modell mit der impliziten Bibliothek auswerte?