のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

fastaiで、confusion_matrixの計算が、CPU側へ持ってくると、1/3になった。

3000クラスぐらいのconfusion_matrixの計算をすると時間が20分ぐらいかかった。 fastaiの、confusion_matrixの計算を,Tensorから、CPU側へ持ってきたら、1/3になった。

 #かなり、時間がかかる20分ぐらいかかる
 import time
 t1 = time.time() 
 
 interp.confusion_matrix()
 t2 = time.time()
  
 elapsed_time = t2-t1
 print(f"経過時間(sec):{elapsed_time}")

経過時間:982.7583639621735

import time
t1 = time.time() 

DATA       = interp.data
PRED_CLASS = interp.pred_class.cpu().numpy()
Y_TRUE     = interp.y_true.cpu().numpy()

#x=torch.arange(0, DATA.c)
x = np.arange(0,DATA.c)
slice_size = 1
#cm = torch.zeros( DATA.c, DATA.c, dtype=x.dtype)
cm = np.zeros( (DATA.c, DATA.c), dtype=x.dtype)
for i in range(0, Y_TRUE.shape[0], slice_size):
  cm_slice = ((PRED_CLASS[i:i+slice_size]==x[:,None])
            & (Y_TRUE[i:i+slice_size]==x[:,None,None])).sum(2)
  #torch.add(cm, cm_slice, out=cm)
  np.add(cm, cm_slice, out=cm)
  #to_np(cm)

t2 = time.time()
 
elapsed_time = t2-t1
print(f"経過時間(sec):{elapsed_time}")

経過時間(sec):341.22110533714294